diff --git a/.github/workflows/build-chocolatey.yml b/.github/workflows/build-chocolatey.yml new file mode 100644 index 000000000000..9de87d8e5ad6 --- /dev/null +++ b/.github/workflows/build-chocolatey.yml @@ -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 + \ No newline at end of file diff --git a/.github/workflows/build-sdk.yml b/.github/workflows/build-sdk.yml new file mode 100644 index 000000000000..0233403894fb --- /dev/null +++ b/.github/workflows/build-sdk.yml @@ -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" + + \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 74c4741c1ab4..d4583847c438 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -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 + 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 ] diff --git a/.github/workflows/publish-chocolatey.yml b/.github/workflows/publish-chocolatey.yml new file mode 100644 index 000000000000..3b31728a50ba --- /dev/null +++ b/.github/workflows/publish-chocolatey.yml @@ -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 }} + \ No newline at end of file diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index a4977bc5ffd9..ab921ec588d2 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -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 }} + # TODO: ADD RELEASE WORKFLOW TO CHOCOLATEY AND OTHER PACKAGE MANAGERS HERE \ No newline at end of file diff --git a/.github/workflows/test-chocolatey.yml b/.github/workflows/test-chocolatey.yml new file mode 100644 index 000000000000..b6ca9bf74b12 --- /dev/null +++ b/.github/workflows/test-chocolatey.yml @@ -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 + \ No newline at end of file diff --git a/pkgs/README.md b/pkgs/README.md new file mode 100644 index 000000000000..9369fb822da1 --- /dev/null +++ b/pkgs/README.md @@ -0,0 +1,16 @@ +