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