mirror of https://github.com/sbt/sbt.git
Add GitHub Action for SDKMAN releases
This commit is contained in:
parent
542591ea20
commit
f3f7cc0f36
|
|
@ -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 }}
|
||||||
Loading…
Reference in New Issue