xref: /aosp_15_r20/external/grpc-grpc/tools/distrib/buildozer.sh (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker#! /bin/bash
2*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2019 The gRPC Authors
3*cc02d7e2SAndroid Build Coastguard Worker#
4*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*cc02d7e2SAndroid Build Coastguard Worker#
8*cc02d7e2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
9*cc02d7e2SAndroid Build Coastguard Worker#
10*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License.
15*cc02d7e2SAndroid Build Coastguard Worker
16*cc02d7e2SAndroid Build Coastguard Workerset -e
17*cc02d7e2SAndroid Build Coastguard Worker
18*cc02d7e2SAndroid Build Coastguard WorkerBUILDOZER_VERSION="4.2.2"
19*cc02d7e2SAndroid Build Coastguard WorkerTEMP_BUILDOZER_PATH="/tmp/buildozer-for-grpc"
20*cc02d7e2SAndroid Build Coastguard Worker
21*cc02d7e2SAndroid Build Coastguard WorkerMAX_DOWNLOAD_RETRY=5
22*cc02d7e2SAndroid Build Coastguard WorkerDOWNLOAD_WAITING_INTERVAL_SECS=10
23*cc02d7e2SAndroid Build Coastguard Worker
24*cc02d7e2SAndroid Build Coastguard Workerfunction error_handling() {
25*cc02d7e2SAndroid Build Coastguard Worker    error=$1
26*cc02d7e2SAndroid Build Coastguard Worker    if [[ -n "$error" ]]; then
27*cc02d7e2SAndroid Build Coastguard Worker        echo "${error}"
28*cc02d7e2SAndroid Build Coastguard Worker        exit 1
29*cc02d7e2SAndroid Build Coastguard Worker    fi
30*cc02d7e2SAndroid Build Coastguard Worker}
31*cc02d7e2SAndroid Build Coastguard Worker
32*cc02d7e2SAndroid Build Coastguard Workerfunction download_buildozer() {
33*cc02d7e2SAndroid Build Coastguard Worker    platform="$(uname -sm)"
34*cc02d7e2SAndroid Build Coastguard Worker    case "${platform}" in
35*cc02d7e2SAndroid Build Coastguard Worker        "Linux x86_64")     download_link="https://github.com/bazelbuild/buildtools/releases/download/${BUILDOZER_VERSION}/buildozer-linux-amd64";;
36*cc02d7e2SAndroid Build Coastguard Worker        "Linux aarch64")    download_link="https://github.com/bazelbuild/buildtools/releases/download/${BUILDOZER_VERSION}/buildozer-linux-arm64";;
37*cc02d7e2SAndroid Build Coastguard Worker        "Darwin x86_64")    download_link="https://github.com/bazelbuild/buildtools/releases/download/${BUILDOZER_VERSION}/buildozer-darwin-amd64";;
38*cc02d7e2SAndroid Build Coastguard Worker        "Darwin arm64")     download_link="https://github.com/bazelbuild/buildtools/releases/download/${BUILDOZER_VERSION}/buildozer-darwin-arm64";;
39*cc02d7e2SAndroid Build Coastguard Worker        *)                  error_handling "Unsupported platform: ${platform}";;
40*cc02d7e2SAndroid Build Coastguard Worker    esac
41*cc02d7e2SAndroid Build Coastguard Worker
42*cc02d7e2SAndroid Build Coastguard Worker    download_success=0
43*cc02d7e2SAndroid Build Coastguard Worker    for i in $(seq 1 $MAX_DOWNLOAD_RETRY); do
44*cc02d7e2SAndroid Build Coastguard Worker        if [ -x "$(command -v curl)" ]; then
45*cc02d7e2SAndroid Build Coastguard Worker            http_code=`curl -L -o ${TEMP_BUILDOZER_PATH} -w "%{http_code}" ${download_link}`
46*cc02d7e2SAndroid Build Coastguard Worker            if [ $http_code -eq "200" ]; then
47*cc02d7e2SAndroid Build Coastguard Worker                download_success=1
48*cc02d7e2SAndroid Build Coastguard Worker            fi
49*cc02d7e2SAndroid Build Coastguard Worker        elif [ -x "$(command -v wget)" ]; then
50*cc02d7e2SAndroid Build Coastguard Worker            wget -S -O ${TEMP_BUILDOZER_PATH} ${download_link} 2>&1 | grep "200 OK" && download_success=1
51*cc02d7e2SAndroid Build Coastguard Worker        else
52*cc02d7e2SAndroid Build Coastguard Worker            error_handling "Download failed: curl and wget not available"
53*cc02d7e2SAndroid Build Coastguard Worker        fi
54*cc02d7e2SAndroid Build Coastguard Worker
55*cc02d7e2SAndroid Build Coastguard Worker        if [ $download_success -eq 1 ]; then
56*cc02d7e2SAndroid Build Coastguard Worker            break
57*cc02d7e2SAndroid Build Coastguard Worker        elif [ $i -lt $MAX_DOWNLOAD_RETRY ]; then
58*cc02d7e2SAndroid Build Coastguard Worker            echo "Failed to download buildozer: retrying in $DOWNLOAD_WAITING_INTERVAL_SECS secs"
59*cc02d7e2SAndroid Build Coastguard Worker            sleep $DOWNLOAD_WAITING_INTERVAL_SECS
60*cc02d7e2SAndroid Build Coastguard Worker        fi
61*cc02d7e2SAndroid Build Coastguard Worker    done
62*cc02d7e2SAndroid Build Coastguard Worker
63*cc02d7e2SAndroid Build Coastguard Worker    if [ $download_success -ne 1 ]; then
64*cc02d7e2SAndroid Build Coastguard Worker        error_handling "Failed to download buildozer after $MAX_DOWNLOAD_RETRY tries"
65*cc02d7e2SAndroid Build Coastguard Worker    fi
66*cc02d7e2SAndroid Build Coastguard Worker
67*cc02d7e2SAndroid Build Coastguard Worker    chmod +x ${TEMP_BUILDOZER_PATH}
68*cc02d7e2SAndroid Build Coastguard Worker}
69*cc02d7e2SAndroid Build Coastguard Worker
70*cc02d7e2SAndroid Build Coastguard Worker
71*cc02d7e2SAndroid Build Coastguard Worker# Get the correct version of buildozer
72*cc02d7e2SAndroid Build Coastguard Workerif [ -x "$(command -v buildozer)" ]; then
73*cc02d7e2SAndroid Build Coastguard Worker    existing_buildozer_version="$(buildozer -version 2>&1 | head -n1 | cut -d" " -f3)"
74*cc02d7e2SAndroid Build Coastguard Worker    if [[ "${existing_buildozer_version}" != "${BUILDOZER_VERSION}" ]]; then
75*cc02d7e2SAndroid Build Coastguard Worker        download_buildozer
76*cc02d7e2SAndroid Build Coastguard Worker        buildozer_bin="${TEMP_BUILDOZER_PATH}"
77*cc02d7e2SAndroid Build Coastguard Worker    else
78*cc02d7e2SAndroid Build Coastguard Worker        buildozer_bin="buildozer"
79*cc02d7e2SAndroid Build Coastguard Worker    fi
80*cc02d7e2SAndroid Build Coastguard Workerelse
81*cc02d7e2SAndroid Build Coastguard Worker    if [ -x ${TEMP_BUILDOZER_PATH} ]; then
82*cc02d7e2SAndroid Build Coastguard Worker        existing_buildozer_version="$(${TEMP_BUILDOZER_PATH} -version 2>&1 | head -n1 | cut -d" " -f3)"
83*cc02d7e2SAndroid Build Coastguard Worker        if [[ "${existing_buildozer_version}" != "${BUILDOZER_VERSION}" ]]; then
84*cc02d7e2SAndroid Build Coastguard Worker            download_buildozer
85*cc02d7e2SAndroid Build Coastguard Worker        fi
86*cc02d7e2SAndroid Build Coastguard Worker    else
87*cc02d7e2SAndroid Build Coastguard Worker        download_buildozer
88*cc02d7e2SAndroid Build Coastguard Worker    fi
89*cc02d7e2SAndroid Build Coastguard Worker    buildozer_bin="${TEMP_BUILDOZER_PATH}"
90*cc02d7e2SAndroid Build Coastguard Workerfi
91*cc02d7e2SAndroid Build Coastguard Worker
92*cc02d7e2SAndroid Build Coastguard Worker# cd to repo root
93*cc02d7e2SAndroid Build Coastguard Workerdir=$(dirname "${0}")
94*cc02d7e2SAndroid Build Coastguard Workercd "${dir}/../.."
95*cc02d7e2SAndroid Build Coastguard Worker
96*cc02d7e2SAndroid Build Coastguard Workerset -ex
97*cc02d7e2SAndroid Build Coastguard Worker
98*cc02d7e2SAndroid Build Coastguard Worker# shellcheck disable=SC2086,SC2068
99*cc02d7e2SAndroid Build Coastguard Worker${buildozer_bin} "$@"
100