blob: 2c96b70cc649469bf48ace2b7a639b95273a7eb3 [file] [log] [blame]
#!/bin/bash
# Copyright 2022 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
function DownloadBazel() {
# Utility function to download a specified version of bazel to a given
# installation directory.
# Positional arguments:
# ver: The version to install. Supports "latest" (major and minor releases),
# "latest-with-prereleases" (all versions from "latest" + prereleases),
# major/minor releases such as 5.2.0, and also prereleases such as
# 6.0.0-pre.20220720.3. Release candidates with "rc" in the name are NOT
# supported.
# platform: The platform to install. Currently only "linux" has been
# validated.
# arch: Architecture to install. Currently only "x86_64" has been validated.
# dest: Where to install Bazel. Must be a user-writeable directory,
# otherwise the root user must call this function through sudo.
# Returns:
# Echoes the installation directory at the end of installation.
(
set -euxo pipefail
# Significantly cribbed from
# devtools/kokoro/vanadium/linux_scripts/usr/local/bin/use_bazel.sh
# Temporary workaround solution until use_bazel.sh can download prereleases.
# Positional arguments
local ver="$1"
local platform="$2"
local arch="$3"
local dest="$4"
# Function-local helper variables
local gcs_uri=""
local revision_identifier=""
if [[ "$ver" == "latest" || "$ver" == "latest-with-prereleases" ]]; then
# Query binary blob bucket to find the latest prerelease
if [[ "$ver" == "latest" ]]; then
# Filter out prereleases
ver=$(gsutil ls -l gs://bazel/**/*-installer-"${platform}"-"${arch}".sh | grep "gs://" | grep -v rc | grep -v pre | tail -n1 | awk '{print $NF}')
else
ver=$(gsutil ls -l gs://bazel/**/*-installer-"${platform}"-"${arch}".sh | grep "gs://" | grep -v rc | tail -n1 | awk '{print $NF}')
fi
ver=$(echo "$ver" | sed -n "s/.*bazel\-\(.*\)\-installer.*/\1/p")
fi
if [[ "$ver" =~ pre ]]; then
revision_identifier=$(echo "$ver" | awk -F"-" '{print $1}')
gcs_uri="gs://bazel/${revision_identifier}/rolling/${ver}/bazel-${ver}-installer-${platform}-${arch}.sh"
else
gcs_uri="gs://bazel/${ver}/release/bazel-${ver}-installer-${platform}-${arch}.sh"
fi
# Download the installer from GCS
gsutil -q cp "$gcs_uri" "$dest"/bazel_installer.sh
mkdir -p "$dest"/install
# Run the installer
bash "$dest"/bazel_installer.sh --prefix="$dest"/install > /dev/null
ls -d "$dest"/install
)
}