From f3f7cc0f3635ecfedbcdeeea5b62a7e02ecbe069 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Thu, 9 Apr 2026 12:12:15 +0200 Subject: [PATCH] Add GitHub Action for SDKMAN releases --- .github/workflows/sdkman.yml | 88 ++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 .github/workflows/sdkman.yml diff --git a/.github/workflows/sdkman.yml b/.github/workflows/sdkman.yml new file mode 100644 index 000000000..493da37ab --- /dev/null +++ b/.github/workflows/sdkman.yml @@ -0,0 +1,88 @@ +name: Publish to SDKMAN! +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - name: Resolve release assets + id: release + uses: actions/github-script@v8 + with: + script: | + const release = context.payload.release + const version = release.tag_name.startsWith("v") + ? release.tag_name.slice(1) + : release.tag_name + const archiveName = `sbt-${version}.tgz` + const checksumName = `${archiveName}.sha256` + + const assets = await github.paginate( + github.rest.repos.listReleaseAssets, + { + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.id, + per_page: 100, + }, + ) + + const archive = assets.find((asset) => asset.name === archiveName) + if (!archive) { + core.setFailed( + `Release ${release.tag_name} is missing ${archiveName}; SDKMAN publication requires the packaged .tgz asset.`, + ) + return + } + + const checksumAsset = assets.find((asset) => asset.name === checksumName) + + let checksumSha256 = "" + if (typeof archive.digest === "string" && archive.digest.startsWith("sha256:")) { + checksumSha256 = archive.digest.slice("sha256:".length) + } else if (checksumAsset) { + const response = await fetch(checksumAsset.browser_download_url) + if (!response.ok) { + core.setFailed( + `Could not download ${checksumName} from ${checksumAsset.browser_download_url}.`, + ) + return + } + + const text = (await response.text()).trim() + checksumSha256 = text.split(/\s+/)[0] + } else { + core.setFailed( + `Release ${release.tag_name} is missing both an asset digest and ${checksumName}; SDKMAN publication requires a SHA-256 checksum.`, + ) + return + } + + core.setOutput("version", version) + core.setOutput("archive_url", archive.browser_download_url) + core.setOutput("checksum_sha256", checksumSha256) + core.setOutput("prerelease", String(Boolean(release.prerelease))) + + - name: Release candidate on SDKMAN! + uses: sdkman/sdkman-release-action@3eb9347b254fc89b9af3a1ed08b874228f3dcd1f + with: + consumer-key: ${{ secrets.SDKMAN_CONSUMER_KEY }} + consumer-token: ${{ secrets.SDKMAN_CONSUMER_TOKEN }} + candidate: sbt + version: ${{ steps.release.outputs.version }} + url: ${{ steps.release.outputs.archive_url }} + checksum-sha-256: ${{ steps.release.outputs.checksum_sha256 }} + + - name: Set default SDKMAN! version + if: ${{ steps.release.outputs.prerelease != 'true' }} + uses: sdkman/sdkman-default-action@38ca710dbacfada85ccfb609953e4c92a717e557 + with: + CONSUMER-KEY: ${{ secrets.SDKMAN_CONSUMER_KEY }} + CONSUMER-TOKEN: ${{ secrets.SDKMAN_CONSUMER_TOKEN }} + CANDIDATE: sbt + VERSION: ${{ steps.release.outputs.version }}