#!/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 ) }