Skip to content

Commit

Permalink
Backport Chocolatey support to Scala LTS
Browse files Browse the repository at this point in the history
  • Loading branch information
WojciechMazur committed Dec 3, 2024
1 parent 6ba335a commit 332f99b
Show file tree
Hide file tree
Showing 12 changed files with 432 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

63 changes: 63 additions & 0 deletions .github/workflows/build-sdk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
###################################################################################################
### 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: Get version string for this build
run: |
ver=$(./project/scripts/sbt "print scala3-compiler-bootstrapped/version" | tail -n1)
echo "This build version: $ver"
echo "THISBUILD_VERSION=$ver" >> $GITHUB_ENV
- name: Build and pack the SDK (universal)
run : ./project/scripts/sbt dist/packArchive

- name: Upload zip archive to GitHub Artifact (universal)
uses: actions/upload-artifact@v4
id : universal
with:
path: ./dist/target/scala3-${{env.THISBUILD_VERSION}}.zip
name: scala3-universal

- name: Compute SHA256 of the uploaded artifact (universal)
id : universal-digest
run : |
echo "digest=$(sha256sum ./dist/target/scala3-${{env.THISBUILD_VERSION}}.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 @@ -756,3 +756,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

16 changes: 16 additions & 0 deletions pkgs/README.md
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
> - @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
10 changes: 10 additions & 0 deletions pkgs/chocolatey/README.md
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
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 332f99b

Please sign in to comment.