xref: /aosp_15_r20/external/grpc-grpc/bazel/update_mirror.sh (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker#!/bin/bash
2*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2020 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 Worker# Script to upload github archives for bazel dependencies to GCS, creating a reliable mirror link.
17*cc02d7e2SAndroid Build Coastguard Worker# Archives are copied to "grpc-bazel-mirror" GCS bucket (https://console.cloud.google.com/storage/browser/grpc-bazel-mirror?project=grpc-testing)
18*cc02d7e2SAndroid Build Coastguard Worker# and will by downloadable with the https://storage.googleapis.com/grpc-bazel-mirror/ prefix.
19*cc02d7e2SAndroid Build Coastguard Worker#
20*cc02d7e2SAndroid Build Coastguard Worker# This script should be run each time bazel dependencies are updated.
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard Workerset -e
23*cc02d7e2SAndroid Build Coastguard Worker
24*cc02d7e2SAndroid Build Coastguard Workercd $(dirname $0)/..
25*cc02d7e2SAndroid Build Coastguard Worker
26*cc02d7e2SAndroid Build Coastguard Worker# Create a temp directory to hold the versioned tarball,
27*cc02d7e2SAndroid Build Coastguard Worker# and clean it up when the script exits.
28*cc02d7e2SAndroid Build Coastguard Workertmpdir="$(mktemp -d)"
29*cc02d7e2SAndroid Build Coastguard Workerfunction cleanup {
30*cc02d7e2SAndroid Build Coastguard Worker  rm -rf "$tmpdir"
31*cc02d7e2SAndroid Build Coastguard Worker}
32*cc02d7e2SAndroid Build Coastguard Workertrap cleanup EXIT
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Workerfunction upload {
35*cc02d7e2SAndroid Build Coastguard Worker  local file="$1"
36*cc02d7e2SAndroid Build Coastguard Worker
37*cc02d7e2SAndroid Build Coastguard Worker  if gsutil stat "gs://grpc-bazel-mirror/${file}" > /dev/null
38*cc02d7e2SAndroid Build Coastguard Worker  then
39*cc02d7e2SAndroid Build Coastguard Worker    echo "Skipping ${file}"
40*cc02d7e2SAndroid Build Coastguard Worker  else
41*cc02d7e2SAndroid Build Coastguard Worker    echo "Downloading https://${file}"
42*cc02d7e2SAndroid Build Coastguard Worker    curl -L --fail --output "${tmpdir}/archive" "https://${file}"
43*cc02d7e2SAndroid Build Coastguard Worker
44*cc02d7e2SAndroid Build Coastguard Worker    echo "Uploading https://${file} to https://storage.googleapis.com/grpc-bazel-mirror/${file}"
45*cc02d7e2SAndroid Build Coastguard Worker    gsutil cp "${tmpdir}/archive" "gs://grpc-bazel-mirror/${file}"
46*cc02d7e2SAndroid Build Coastguard Worker
47*cc02d7e2SAndroid Build Coastguard Worker    rm -rf "${tmpdir}/archive"
48*cc02d7e2SAndroid Build Coastguard Worker  fi
49*cc02d7e2SAndroid Build Coastguard Worker}
50*cc02d7e2SAndroid Build Coastguard Worker
51*cc02d7e2SAndroid Build Coastguard Worker# How to check that all mirror URLs work:
52*cc02d7e2SAndroid Build Coastguard Worker# 1. clean $HOME/.cache/bazel
53*cc02d7e2SAndroid Build Coastguard Worker# 2. bazel clean --expunge
54*cc02d7e2SAndroid Build Coastguard Worker# 3. bazel sync (failed downloads will print warnings)
55*cc02d7e2SAndroid Build Coastguard Worker
56*cc02d7e2SAndroid Build Coastguard Worker# A specific link can be upload manually by running e.g.
57*cc02d7e2SAndroid Build Coastguard Worker# upload "github.com/google/boringssl/archive/1c2769383f027befac5b75b6cedd25daf3bf4dcf.tar.gz"
58*cc02d7e2SAndroid Build Coastguard Worker
59*cc02d7e2SAndroid Build Coastguard Worker# bazel binaries used by the tools/bazel wrapper script
60*cc02d7e2SAndroid Build Coastguard Workerupload github.com/bazelbuild/bazel/releases/download/6.5.0/bazel-6.5.0-linux-x86_64
61*cc02d7e2SAndroid Build Coastguard Workerupload github.com/bazelbuild/bazel/releases/download/6.5.0/bazel-6.5.0-darwin-x86_64
62*cc02d7e2SAndroid Build Coastguard Workerupload github.com/bazelbuild/bazel/releases/download/6.5.0/bazel-6.5.0-windows-x86_64.exe
63*cc02d7e2SAndroid Build Coastguard Workerupload github.com/bazelbuild/bazel/releases/download/7.1.0/bazel-7.1.0-linux-x86_64
64*cc02d7e2SAndroid Build Coastguard Workerupload github.com/bazelbuild/bazel/releases/download/7.1.0/bazel-7.1.0-darwin-x86_64
65*cc02d7e2SAndroid Build Coastguard Workerupload github.com/bazelbuild/bazel/releases/download/7.1.0/bazel-7.1.0-windows-x86_64.exe
66*cc02d7e2SAndroid Build Coastguard Worker
67*cc02d7e2SAndroid Build Coastguard Worker# Collect the github archives to mirror from grpc_deps.bzl
68*cc02d7e2SAndroid Build Coastguard Workergrep -o '"https://github.com/[^"]*"' bazel/grpc_deps.bzl | sed 's/^"https:\/\///' | sed 's/"$//' | while read -r line ; do
69*cc02d7e2SAndroid Build Coastguard Worker    echo "Updating mirror for ${line}"
70*cc02d7e2SAndroid Build Coastguard Worker    upload "${line}"
71*cc02d7e2SAndroid Build Coastguard Workerdone
72