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 }}