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