in src/setup-bazelisk/src.main.kts [86:114]
suspend fun tryGetBazeliskVersion(versionPrefix: String, os: OS, arch: Arch): BazeliskVersionDownloadInfo {
val json = Retry().retry { downloadJson(apiUrl) }
val releases = parseJson(json)
val release = releases.find { it.tagName.startsWith("v$versionPrefix") }
?: error(
"Could not find the '$versionPrefix' release. Available: " +
releases.joinToString { it.tagName.trimStart('v') })
val archName = when (arch) {
Arch.X64 -> "amd64"
Arch.ARM64 -> "arm64"
else -> error("Unsupported architecture: '$arch'")
}
val expectedName = when (os) {
OS.Linux -> "bazelisk-linux-$archName"
OS.Mac -> "bazelisk-darwin-$archName"
OS.Windows -> "bazelisk-windows-$archName.exe"
}
val asset = release.assets.find { it.name == expectedName }
?: error("Could not find asset matching '$expectedName'. Available: '${release.assets.joinToString { it.name }}'")
return BazeliskVersionDownloadInfo(
release.tagName,
expectedName,
URI.create(asset.browserDownloadUrl).toURL()
)
}