-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Add support for Chocolatey #20534
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for Chocolatey #20534
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
################################################################################################### | ||
### 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 }} | ||
linux-x86_64-id: | ||
description: ID of the `linux x86-64` package from GitHub Artifacts (Authentication Required) | ||
value : ${{ jobs.build.outputs.linux-x86_64-id }} | ||
linux-aarch64-id: | ||
description: ID of the `linux aarch64` package from GitHub Artifacts (Authentication Required) | ||
value : ${{ jobs.build.outputs.linux-aarch64-id }} | ||
mac-x86_64-id: | ||
description: ID of the `mac x86-64` package from GitHub Artifacts (Authentication Required) | ||
value : ${{ jobs.build.outputs.mac-x86_64-id }} | ||
mac-aarch64-id: | ||
description: ID of the `mac aarch64` package from GitHub Artifacts (Authentication Required) | ||
value : ${{ jobs.build.outputs.mac-aarch64-id }} | ||
win-x86_64-id: | ||
description: ID of the `win x86-64` package from GitHub Artifacts (Authentication Required) | ||
value : ${{ jobs.build.outputs.win-x86_64-id }} | ||
win-x86_64-digest: | ||
description: The SHA256 of the uploaded artifact (`win x86-64`) | ||
value : ${{ jobs.build.outputs.win-x86_64-digest }} | ||
|
||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
universal-id : ${{ steps.universal.outputs.artifact-id }} | ||
linux-x86_64-id : ${{ steps.linux-x86_64.outputs.artifact-id }} | ||
linux-aarch64-id : ${{ steps.linux-aarch64.outputs.artifact-id }} | ||
mac-x86_64-id : ${{ steps.mac-x86_64.outputs.artifact-id }} | ||
mac-aarch64-id : ${{ steps.mac-aarch64.outputs.artifact-id }} | ||
win-x86_64-id : ${{ steps.win-x86_64.outputs.artifact-id }} | ||
win-x86_64-digest: ${{ steps.win-x86_64-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/Universal/stage | ||
- name: Build and pack the SDK (linux x86-64) | ||
run : ./project/scripts/sbt dist-linux-x86_64/Universal/stage | ||
- name: Build and pack the SDK (linux aarch64) | ||
run : ./project/scripts/sbt dist-linux-aarch64/Universal/stage | ||
- name: Build and pack the SDK (mac x86-64) | ||
run : ./project/scripts/sbt dist-mac-x86_64/Universal/stage | ||
- name: Build and pack the SDK (mac aarch64) | ||
run : ./project/scripts/sbt dist-mac-aarch64/Universal/stage | ||
- name: Build and pack the SDK (win x86-64) | ||
run : ./project/scripts/sbt dist-win-x86_64/Universal/stage | ||
- name: Upload zip archive to GitHub Artifact (universal) | ||
uses: actions/upload-artifact@v4 | ||
id : universal | ||
with: | ||
path: ./dist/target/universal/stage | ||
name: scala3-universal | ||
- name: Upload zip archive to GitHub Artifact (linux x86-64) | ||
uses: actions/upload-artifact@v4 | ||
id : linux-x86_64 | ||
with: | ||
path: ./dist/linux-x86_64/target/universal/stage | ||
name: scala3-x86_64-pc-linux | ||
- name: Upload zip archive to GitHub Artifact (linux aarch64) | ||
uses: actions/upload-artifact@v4 | ||
id : linux-aarch64 | ||
with: | ||
path: ./dist/linux-aarch64/target/universal/stage | ||
name: scala3-aarch64-pc-linux | ||
- name: Upload zip archive to GitHub Artifact (mac x86-64) | ||
uses: actions/upload-artifact@v4 | ||
id : mac-x86_64 | ||
with: | ||
path: ./dist/mac-x86_64/target/universal/stage | ||
name: scala3-x86_64-apple-darwin | ||
- name: Upload zip archive to GitHub Artifact (mac aarch64) | ||
uses: actions/upload-artifact@v4 | ||
id : mac-aarch64 | ||
with: | ||
path: ./dist/mac-aarch64/target/universal/stage | ||
name: scala3-aarch64-apple-darwin | ||
- name: Upload zip archive to GitHub Artifact (win x86-64) | ||
uses: actions/upload-artifact@v4 | ||
id : win-x86_64 | ||
with: | ||
path: ./dist/win-x86_64/target/universal/stage | ||
name: scala3-x86_64-pc-win32 | ||
- name: Compute SHA256 of the uploaded artifact (win x86-64) | ||
id : win-x86_64-digest | ||
run : | | ||
curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -o artifact.zip -L https://api.github.com/repos/scala/scala3/actions/artifacts/${{ steps.win-x86_64.outputs.artifact-id }}/zip | ||
echo "digest=$(sha256sum artifact.zip | cut -d " " -f 1)" >> "$GITHUB_OUTPUT" | ||
Comment on lines
+110
to
+114
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just want to ping that there is an issue about this : actions/upload-artifact#454 |
||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1013,3 +1013,24 @@ jobs: | |
uses: ./.github/workflows/build-msi.yml | ||
if : github.event_name == 'pull_request' && contains(github.event.pull_request.body, '[test_msi]') | ||
# TODO: ADD A JOB THAT DEPENDS ON THIS TO TEST THE MSI | ||
|
||
build-sdk-package: | ||
uses: ./.github/workflows/build-sdk.yml | ||
with: | ||
java-version: 8 | ||
|
||
build-chocolatey-package: | ||
uses: ./.github/workflows/build-chocolatey.yml | ||
needs: [ build-sdk-package ] | ||
with: | ||
version: 3.6.0-local # TODO: FIX THIS | ||
bishabosha marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't this be fixed before the merge? There is another usage of that in the next job. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. actually, this value when testing doesn't matter. I just have to give a version number to the package we are currently building (this package is local to the build). Nevertheless, it would be great if we have something that is correct and computes it directly without doing anything else. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've added a todo to check later what to change this value to but it is not at all a blocker |
||
url : https://api.github.com/repos/scala/scala3/actions/artifacts/${{ needs.build-sdk-package.outputs.win-x86_64-id }}/zip | ||
digest : ${{ needs.build-sdk-package.outputs.win-x86_64-digest }} | ||
|
||
test-chocolatey-package: | ||
uses: ./.github/workflows/test-chocolatey.yml | ||
with: | ||
version : 3.6.0-local # TODO: FIX THIS | ||
java-version: 8 | ||
if: github.event_name == 'pull_request' && contains(github.event.pull_request.body, '[test_chocolatey]') | ||
needs: [ build-chocolatey-package ] |
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 }} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -37,4 +37,36 @@ jobs: | |
secrets: | ||
DOTTYBOT-TOKEN: ${{ secrets.DOTTYBOT_WINGET_TOKEN }} | ||
|
||
compute-digest: | ||
runs-on: ubuntu-latest | ||
outputs: | ||
digest: ${{ steps.digest.outputs.digest }} | ||
steps: | ||
- name: Compute the SHA256 of scala3-${{ inputs.version }}-x86_64-pc-win32.zip in GitHub Release | ||
id: digest | ||
run: | | ||
curl -o artifact.zip -L https://github.com/scala/scala3/releases/download/${{ inputs.version }}/scala3-${{ inputs.version }}-x86_64-pc-win32.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 }}-x86_64-pc-win32.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 }} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There is a beneath that line, sees to be outdated now
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right, the chocolatey word should be dropped |
||
# TODO: ADD RELEASE WORKFLOW TO CHOCOLATEY AND OTHER PACKAGE MANAGERS HERE |
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 | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<h1 align=center>Configuration for Chocolatey</h1> | ||
|
||
Official support for Chocolatey started by the release of Scala 3.6.0 | ||
|
||
> [!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 | ||
hamzaremmal marked this conversation as resolved.
Show resolved
Hide resolved
|
||
> - @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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<h1 align=center>Configuration for Chocolatey</h1> | ||
|
||
Official support for Chocolatey started by the release of Scala 3.6.0 | ||
|
||
> [!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 | ||
bishabosha marked this conversation as resolved.
Show resolved
Hide resolved
|
Uh oh!
There was an error while loading. Please reload this page.