Skip to content

Commit

Permalink
Backport Chocolatey support to Scala LTS (#22095)
Browse files Browse the repository at this point in the history
Backports #20534 and #21221 to LTS. 
Requires adaptation - we don't produce native launchers and don't use
universal packager plugin

[test_chocolatey]

---------

Co-authored-by: Hamza Remmal <[email protected]>
  • Loading branch information
WojciechMazur and hamzaremmal authored Dec 9, 2024
1 parent e92d7ec commit fa617ff
Show file tree
Hide file tree
Showing 11 changed files with 418 additions and 2 deletions.
57 changes: 57 additions & 0 deletions .github/workflows/build-chocolatey.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
###################################################################################################
### THIS IS A REUSABLE WORKFLOW TO BUILD SCALA WITH CHOCOLATEY ###
### HOW TO USE: ###
### ###
### NOTE: ###
### ###
###################################################################################################


name: Build 'scala' Chocolatey Package
run-name: Build 'scala' (${{ inputs.version }}) Chocolatey Package

on:
workflow_call:
inputs:
version:
required: true
type : string
url:
required: true
type : string
digest:
required: true
type : string

jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Replace the version placeholder
uses: richardrigutins/replace-in-files@v2
with:
files: ./pkgs/chocolatey/scala.nuspec
search-text: '@LAUNCHER_VERSION@'
replacement-text: ${{ inputs.version }}
- name: Replace the URL placeholder
uses: richardrigutins/replace-in-files@v2
with:
files: ./pkgs/chocolatey/tools/chocolateyInstall.ps1
search-text: '@LAUNCHER_URL@'
replacement-text: ${{ inputs.url }}
- name: Replace the CHECKSUM placeholder
uses: richardrigutins/replace-in-files@v2
with:
files: ./pkgs/chocolatey/tools/chocolateyInstall.ps1
search-text: '@LAUNCHER_SHA256@'
replacement-text: ${{ inputs.digest }}
- name: Build the Chocolatey package (.nupkg)
run: choco pack ./pkgs/chocolatey/scala.nuspec --out ./pkgs/chocolatey
- name: Upload the Chocolatey package to GitHub
uses: actions/upload-artifact@v4
with:
name: scala.nupkg
path: ./pkgs/chocolatey/scala.${{ inputs.version }}.nupkg
if-no-files-found: error

58 changes: 58 additions & 0 deletions .github/workflows/build-sdk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
###################################################################################################
### THIS IS A REUSABLE WORKFLOW TO BUILD THE SCALA LAUNCHERS ###
### HOW TO USE: ###
### - THSI WORKFLOW WILL PACKAGE THE ALL THE LAUNCHERS AND UPLOAD THEM TO GITHUB ARTIFACTS ###
### ###
### NOTE: ###
### - SEE THE WORFLOW FOR THE NAMES OF THE ARTIFACTS ###
###################################################################################################


name: Build Scala Launchers
run-name: Build Scala Launchers

on:
workflow_call:
inputs:
java-version:
type : string
required : true
outputs:
universal-id:
description: ID of the `universal` package from GitHub Artifacts (Authentication Required)
value : ${{ jobs.build.outputs.universal-id }}
universal-digest:
description: The SHA256 of the uploaded artifact (universal)
value : ${{ jobs.build.outputs.universal-digest }}


jobs:
build:
runs-on: ubuntu-latest
outputs:
universal-id : ${{ steps.universal.outputs.artifact-id }}
universal-digest : ${{ steps.universal-digest.outputs.digest }}

steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ inputs.java-version }}
cache : sbt

- name: Build and pack the SDK (universal)
run : ./project/scripts/sbt dist/pack

- name: Upload zip archive to GitHub Artifact (universal)
uses: actions/upload-artifact@v4
id : universal
with:
path: ./dist/target/pack/*
name: scala3-universal

- name: Compute SHA256 of the uploaded artifact (universal)
id : universal-digest
run : |
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -o artifact.zip -L https://api.github.com/repos/scala/scala3/actions/artifacts/${{ steps.universal.outputs.artifact-id }}/zip
echo "digest=$(sha256sum artifact.zip | cut -d " " -f 1)" >> "$GITHUB_OUTPUT"
27 changes: 27 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -774,3 +774,30 @@ jobs:
WORKFLOW_RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
with:
filename: .github/workflows/issue_nightly_failed.md

build-sdk-package:
uses: ./.github/workflows/build-sdk.yml
if:
(github.event_name == 'pull_request' && !contains(github.event.pull_request.body, '[skip ci]')) ||
(github.event_name == 'workflow_dispatch' && github.repository == 'scala/scala3') ||
(github.event_name == 'schedule' && github.repository == 'scala/scala3') ||
github.event_name == 'push'
with:
java-version: 8

build-chocolatey-package:
uses: ./.github/workflows/build-chocolatey.yml
needs: [ build-sdk-package ]
with:
version: 3.3.5-local # unused
url : https://api.github.com/repos/scala/scala3/actions/artifacts/${{ needs.build-sdk-package.outputs.universal-id }}/zip
digest : ${{ needs.build-sdk-package.outputs.universal-digest }}

test-chocolatey-package:
uses: ./.github/workflows/test-chocolatey.yml
with:
version : 3.3.5-local # unused
java-version: 8
if: github.event_name == 'pull_request' && contains(github.event.pull_request.body, '[test_chocolatey]')
needs: [ build-chocolatey-package ]

39 changes: 39 additions & 0 deletions .github/workflows/publish-chocolatey.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
###################################################################################################
### THIS IS A REUSABLE WORKFLOW TO PUBLISH SCALA TO CHOCOLATEY ###
### HOW TO USE: ###
### - THE RELEASE WORKFLOW SHOULD CALL THIS WORKFLOW ###
### - IT WILL PUBLISH TO CHOCOLATEY THE MSI ###
### ###
### NOTE: ###
### - WE SHOULD KEEP IN SYNC THE NAME OF THE MSI WITH THE ACTUAL BUILD ###
### - WE SHOULD KEEP IN SYNC THE URL OF THE RELEASE ###
### - IT ASSUMES THAT THE `build-chocolatey` WORKFLOW WAS EXECUTED BEFORE ###
###################################################################################################


name: Publish Scala to Chocolatey
run-name: Publish Scala ${{ inputs.version }} to Chocolatey

on:
workflow_call:
inputs:
version:
required: true
type: string
secrets:
# Connect to https://community.chocolatey.org/profiles/scala
# Accessible via https://community.chocolatey.org/account
API-KEY:
required: true

jobs:
publish:
runs-on: windows-latest
steps:
- name: Fetch the Chocolatey package from GitHub
uses: actions/download-artifact@v4
with:
name: scala.nupkg
- name: Publish the package to Chocolatey
run: choco push scala.nupkg --source https://push.chocolatey.org/ --api-key ${{ secrets.API-KEY }}

49 changes: 47 additions & 2 deletions .github/workflows/releases.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
name: Releases
###################################################################################################
### OFFICIAL RELEASE WORKFLOW ###
### HOW TO USE: ###
### - THIS WORKFLOW WILL NEED TO BE TRIGGERED MANUALLY ###
### ###
### NOTE: ###
### - THIS WORKFLOW SHOULD ONLY BE RUN ON STABLE RELEASES ###
### - IT ASSUMES THAT THE PRE-RELEASE WORKFLOW WAS PREVIOUSLY EXECUTED ###
### ###
###################################################################################################

name: Official release of Scala
run-name: Official release of Scala ${{ inputs.version }}

on:
workflow_dispatch:
inputs:
Expand All @@ -11,7 +24,7 @@ permissions:
contents: read

jobs:
publish_release:
publish-sdkman:
runs-on: [self-hosted, Linux]
container:
image: lampepfl/dotty:2021-03-22
Expand All @@ -35,3 +48,35 @@ jobs:

- name: Publish to SDKMAN
run: .github/workflows/scripts/publish-sdkman.sh ${{ inputs.version }}

compute-digest:
runs-on: ubuntu-latest
outputs:
digest: ${{ steps.digest.outputs.digest }}
steps:
- name: Compute the SHA256 of scala3-${{ inputs.version }}.zip in GitHub Release
id: digest
run: |
curl -o artifact.zip -L https://github.com/scala/scala3/releases/download/${{ inputs.version }}/scala3-${{ inputs.version }}.zip
echo "digest=$(sha256sum artifact.zip | cut -d " " -f 1)" >> "$GITHUB_OUTPUT"
build-chocolatey:
uses: ./.github/workflows/build-chocolatey.yml
needs: compute-digest
with:
version: ${{ inputs.version }}
url : 'https://github.com/scala/scala3/releases/download/${{ inputs.version }}/scala3-${{ inputs.version }}.zip'
digest : ${{ needs.compute-digest.outputs.digest }}
test-chocolatey:
uses: ./.github/workflows/test-chocolatey.yml
needs: build-chocolatey
with:
version : ${{ inputs.version }}
java-version: 8
publish-chocolatey:
uses: ./.github/workflows/publish-chocolatey.yml
needs: [ build-chocolatey, test-chocolatey ]
with:
version: ${{ inputs.version }}
secrets:
API-KEY: ${{ secrets.CHOCOLATEY_KEY }}
51 changes: 51 additions & 0 deletions .github/workflows/test-chocolatey.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
###################################################################################################
### THIS IS A REUSABLE WORKFLOW TO TEST SCALA WITH CHOCOLATEY ###
### HOW TO USE: ###
### ###
### NOTE: ###
### ###
###################################################################################################

name: Test 'scala' Chocolatey Package
run-name: Test 'scala' (${{ inputs.version }}) Chocolatey Package

on:
workflow_call:
inputs:
version:
required: true
type: string
java-version:
required: true
type : string

env:
CHOCOLATEY-REPOSITORY: chocolatey-pkgs
DOTTY_CI_INSTALLATION: ${{ secrets.GITHUB_TOKEN }}

jobs:
test:
runs-on: windows-latest
steps:
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ inputs.java-version }}
- name: Download the 'nupkg' from GitHub Artifacts
uses: actions/download-artifact@v4
with:
name: scala.nupkg
path: ${{ env.CHOCOLATEY-REPOSITORY }}
- name : Install the `scala` package with Chocolatey
run : choco install scala --source "${{ env.CHOCOLATEY-REPOSITORY }}" --pre # --pre since we might be testing non-stable releases
shell: pwsh
- name : Test the `scala` command
run : scala --version
shell: pwsh
- name : Test the `scalac` command
run : scalac --version
- name : Test the `scaladoc` command
run : scaladoc --version
- name : Uninstall the `scala` package
run : choco uninstall scala

17 changes: 17 additions & 0 deletions pkgs/chocolatey/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<h1 align=center>Configuration for Chocolatey</h1>

Official support for Chocolatey started by the release of Scala 3.6.0 and was backported (with modifications) to the Scala 3.3.5 LTS.
Scala 3.3 LTS Chocolatey package uses universal package (.jar) instead of native runners.

> [!IMPORTANT]
> This folder contains the templates to generate the configuration for Chocolatey.
> The `scala.nuspec` and `chocolateyInstall.ps1` files needs to be rewritten by changing the following placeholders:
> - @LAUNCHER_VERSION@ : Placeholder for the current scala version to deploy
> - @LAUNCHER_URL@ : Placeholder for the URL to the windows zip released on GitHub
> - @LAUNCHER_SHA256@ : Placeholder for the SHA256 of the msi file released on GitHub
## Important information

- How to create a *Chocolatey* package: https://docs.chocolatey.org/en-us/create/create-packages/
- Guidelines to follow for the package icon: https://docs.chocolatey.org/en-us/create/create-packages/#package-icon-guidelines
- `.nuspec` format specification: https://learn.microsoft.com/en-gb/nuget/reference/nuspec
30 changes: 30 additions & 0 deletions pkgs/chocolatey/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions pkgs/chocolatey/scala.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
<metadata>
<id>scala</id>
<version>@LAUNCHER_VERSION@</version>
<title>Scala</title>
<authors>scala</authors>
<owners>scala</owners>
<tags>scala</tags>
<summary>Scala</summary>
<description>Official release of the Scala Programming Language on Chocolatey.</description>
<packageSourceUrl>https://github.com/scala/scala3/tree/main/pkgs/chocolatey</packageSourceUrl>
<projectSourceUrl>https://github.com/scala/scala3</projectSourceUrl>
<projectUrl>https://scala-lang.org/</projectUrl>
<bugTrackerUrl>https://github.com/scala/scala3/issues</bugTrackerUrl>
<copyright>© 2002-2024, LAMP/EPFL</copyright>
<iconUrl>https://cdn.jsdelivr.net/gh/scala/scala3@a046b0014ffd9536144d67a48f8759901b96d12f/pkgs/chocolatey/icon.svg</iconUrl>
<licenseUrl>https://github.com/scala/scala3/blob/main/LICENSE</licenseUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<releaseNotes>https://github.com/scala/scala3/releases</releaseNotes>
</metadata>
<files>
<file src="tools\**" target="tools" />
</files>
</package>
Loading

0 comments on commit fa617ff

Please sign in to comment.