suspend fun tryGetBazeliskVersion()

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