| #!/usr/bin/env bash |
| # Copyright 2016 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file. |
| |
| set -euf -o pipefail |
| |
| readonly JIRI_REPO_URL="https://fuchsia.googlesource.com/jiri" |
| readonly GS_BUCKET_URL="https://fuchsia-build.storage.googleapis.com/jiri" |
| |
| # Accept the first argument as a list of OSes to build for. Possible values |
| # are valid GOOS strings from [linux darwin] |
| if [[ $# -ge 1 ]]; then |
| readonly TARGETS="${1}" |
| else |
| readonly TARGETS="linux darwin" |
| fi |
| |
| # Accept the first argument as a list of OSes to build for. Possible values |
| # are valid GOARCH strings from [amd64 arm64] |
| if [[ $# -eq 2 ]]; then |
| readonly ARCHS="${2}" |
| else |
| readonly ARCHS="amd64 arm64" |
| fi |
| |
| # Determine and validate the version of jiri. |
| readonly HOST_OS=$(uname | tr '[:upper:]' '[:lower:]') |
| readonly COMMIT_URL="${JIRI_REPO_URL}/+refs/heads/master?format=JSON" |
| readonly VERSION=$(curl -sSf "${COMMIT_URL}" | sed -n 's/.*"value": "\([0-9a-f]\{40\}\)"/\1/p') |
| if [[ -z ${VERSION} ]]; then |
| echo "Cannot determine the latest jiri version" 1>&2 |
| exit 1 |
| fi |
| |
| # Do all our work in a temporary directory, then rm it when we're done. |
| readonly TEMP_DIR="$(mktemp -d)" |
| trap "rm -rf -- "${TEMP_DIR}"" EXIT |
| |
| failed=false |
| RED='\033[0;31m' |
| NC='\033[0m' |
| for target in ${TARGETS}; do |
| for arch in ${ARCHS}; do |
| if [[ "$target" == "darwin" && "$arch" == "arm64" ]]; then |
| continue |
| fi |
| os=$(echo ${target} | sed 's/darwin/mac/') |
| tmpdir="${TEMP_DIR}/jiri-${os}-${arch}" |
| mkdir -p ${tmpdir} |
| |
| # Download the jiri binary. |
| if ! curl -sSf -o "${tmpdir}/jiri" "${GS_BUCKET_URL}/${target}-${arch}/${VERSION}"; then |
| echo -e "${RED}Failed downloading prebuilt jiri binary.${NC}" 1>&2 |
| echo -e "${RED}${GS_BUCKET_URL}/${target}-${arch}/${VERSION}${NC}" |
| if [[ "$arch" != "arm64" ]]; then |
| failed=true |
| fi |
| continue |
| fi |
| chmod 755 "${tmpdir}/jiri" |
| |
| # Upload the jiri binary to CIPD |
| cipd create -name "fuchsia/tools/jiri/${os}-${arch}" -in "${tmpdir}" -ref latest -tag "git_repository:https://fuchsia.googlesource.com/jiri" -tag "git_revision:${VERSION}" |
| done |
| done |
| |
| # fail if any os-arch failed |
| if [[ "$failed" = true ]]; then |
| echo -e "${RED}Failure${NC}" |
| exit 1 |
| fi |