#!/bin/sh # Copyright 2020 The Pigweed Authors # # 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 # # https://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. if [ -z "$PW_ENVIRONMENT_ROOT" ]; then PW_ENVIRONMENT_ROOT="$PW_ROOT/environment" fi PREFIX="$PW_ENVIRONMENT_ROOT/bootstrap" mkdir -p "$PREFIX" set -o errexit # Update the mtimes on the most recent pw_env_setup executables. for HASH in $(git --git-dir="$PW_ROOT/.git" --no-pager log --max-count=5 --format=format:%H); do if [ -f "$PREFIX/$HASH" ]; then touch "$PREFIX/$HASH" &> /dev/null fi done # Delete any files with an (apparent) age greater than 5 days. This will never # include the 5 most recent pw_env_setup executables, but if there's been no # bootstrap call in less than 5 days this could delete all versions of # pw_env_setup. This is acceptable because it's very unlikely there have been # no commits in a 5 day period, and if there really have been no commits this # will just re-download that executable in a few lines. find "$PREFIX" -mtime +5 -exec rm {} \; OS=$(uname -s | tr '[:upper:]' '[:lower:]') if [ "$OS" = "darwin" ]; then OS=mac fi ARCH=$(uname -m | tr '[:upper:]' '[:lower:]') if [ "$ARCH" = "x86_64" ]; then ARCH="amd64" fi # Support `mac-arm64` through Rosetta until `mac-arm64` binaries are ready if [[ "$OS" = "mac" ] && \ [ "$ARCH" = "arm64" ] && \ [ -n "$PW_BOOTSTRAP_USE_ROSETTA" ]] then ARCH="amd64" fi for HASH in $(git --git-dir="$PW_ROOT/.git" --no-pager log --max-count=10 --format=format:%H); do URL="https://storage.googleapis.com/pigweed-envsetup/$OS-$ARCH" URL="$URL/$HASH/pw_env_setup" FILEPATH="$PREFIX/$HASH" # First try curl. if [ ! -f "$FILEPATH" ]; then curl -o "$FILEPATH" "$URL" &> /dev/null fi # If curl fails try wget. if [ ! -f "$FILEPATH" ]; then wget -O "$FILEPATH" "$URL" &> /dev/null fi # If either curl or wget succeeded mark the file executable, print it, and # exit. If the file appears to be a text file then it doesn't exist in GCS # and we'll try the next one. TEXT=$(file --mime "$FILEPATH" | grep text) if [ -n "$TEXT" ]; then rm "$FILEPATH" continue fi if [ -f "$FILEPATH" ]; then chmod a+x "$FILEPATH" echo "$FILEPATH" exit 0 fi done exit -1