suspend fun installBazelisk()

in src/setup-bazelisk/src.main.kts [50:81]


suspend fun installBazelisk(version: String, installationPath: Path, os: OS, arch: Arch) {
    val bazeliskVersion = BazeliskVersionManager.tryGetBazeliskVersion(version, os, arch)

    val installDirectory = installationPath.resolve("bazelisk-${bazeliskVersion.version}-${os}-${arch}")
    val executableName = "bazel" + if (os == OS.Windows) ".exe" else ""
    val installPath = installDirectory.resolve(executableName)
    val tempFile = installDirectory.resolve("${executableName}.tmp")

    if (installPath.exists()) {
        println("Bazelisk ${bazeliskVersion.version} is already installed to '$installDirectory'")
        addToPath(installDirectory.absolutePathString())
        return
    }

    println("Downloading ${bazeliskVersion.downloadUrl} to $installPath")
    try {
        installDirectory.createDirectories()

        retry { bazeliskVersion.downloadUrl.downloadTo(tempFile) }
        println("Downloaded to $tempFile")

        tempFile.toFile().setExecutable(true)
        println("Set binary executable flag")

        move(tempFile, installPath)
        println("Moved to $installDirectory")
    } finally {
        tempFile.deleteIfExists()
    }

    addToPath(installDirectory.absolutePathString())
}