gecko-dev/build/mozconfig.cache
Wander Lairson Costa 1e4f81ec22 Bug 1572236: Support sccache in Google Storage r=chmanchester,dustin
With the migration from AWS to GCP, we also need to migrate sccache
buckets from S3 to Google Storage.

The problem is how we deal with regions, since there isn't an exact
correspondence on the region names between the two cloud providers.

To make the transition smoother, docker-worker (and soon generic-worker)
provides a new environment variable called TASKCLUSTER_WORKER_LOCATION,
with information about the cloud provider the task is running on. Using
this new variable, we configure sccache to use the corresponding storage
service of the cloud provider where the task runs.

The bucket names in Google Storage are shorter because GCS imposes a
limit of 30 characteres for the names.

Ref: https://github.com/taskcluster/taskcluster-rfcs/pull/148/files

Differential Revision: https://phabricator.services.mozilla.com/D44845

--HG--
extra : moz-landing-system : lando
2019-09-09 16:51:42 +00:00

80 lines
4.0 KiB
Plaintext

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Setup for build cache
# builds where buildprops didn't have the data (eg: taskcluster) and without sccache disabled:
if test -z "$bucket" -a -z "$SCCACHE_DISABLE" -a -z "$MOZ_PGO"; then
# prevent rerun if az is set, or wget is not available
if test -z "$availability_zone" -a -x "$(command -v wget)"; then
if test -n "$TASKCLUSTER_WORKER_LOCATION" -a -x "$(command -v jq)"; then
cloud=$(echo $TASKCLUSTER_WORKER_LOCATION | jq .cloud | tr -d \")
case $cloud in
aws|google)
availability_zone=$(echo $TASKCLUSTER_WORKER_LOCATION | jq .availabilityZone | tr -d \")
region=$(echo $TASKCLUSTER_WORKER_LOCATION | jq .region | tr -d \")
;;
esac
fi
if test -z "$availability_zone" -o -z "$region"; then
if test -n "${TASKCLUSTER_WORKER_GROUP}"; then
# TASKCLUSTER_WORKER_GROUP is just the region now, so
# stick an extra character on to make the already-convoluted logic
# here simpler.
availability_zone="${TASKCLUSTER_WORKER_GROUP}x"
elif [ -n "${SCCACHE_GCS_KEY_PATH}" ]; then
# gcp availability_zone is of the form <region>-<letter> where region is e.g. us-west2, and az is us-west2-a
gcp_zone=$(wget -T 1 -t 1 -q -O - http://169.254.169.254/computeMetadata/v1beta1/instance/zone || true)
availability_zone=${gcp_zone##*/}
else
# timeout after 1 second, and don't retry (failure indicates instance is not in ec2 or network issue)
# ec2 availability_zone is of the form <region><letter> where region is e.g. us-west-2, and az is us-west-2a
availability_zone=$(wget -T 1 -t 1 -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || true)
fi
fi
if test -z "$availability_zone" -o "$availability_zone" = "not-ec2"; then
availability_zone=not-ec2
elif test -n "$cloud"; then
case $cloud in
google)
bucket=sccache-l${MOZ_SCM_LEVEL}-${region}
;;
aws)
bucket=taskcluster-level-${MOZ_SCM_LEVEL}-sccache-${region}
;;
esac
elif [ -n "${SCCACHE_GCS_KEY_PATH}" ]; then
# gcp region is az with last two letters trimmed
if test -z "$region"; then
region=${availability_zone::${#availability_zone}-2}
fi
bucket=taskcluster-level-${MOZ_SCM_LEVEL}-sccache-${region}
else
# ec2 region is az with last letter trimmed
if test -z "$region"; then
region=${availability_zone%?}
fi
bucket=taskcluster-level-${MOZ_SCM_LEVEL}-sccache-${region}
fi
fi
fi
if test -n "$bucket"; then
if test "$cloud" = "google"; then
mk_add_options "export SCCACHE_GCS_BUCKET=$bucket"
mk_add_options "export SCCACHE_GCS_RW_MODE=READ_WRITE"
mk_add_options "export SCCACHE_GCS_CREDENTIALS_URL=http://taskcluster/auth/v1/gcp/credentials/$SCCACHE_GCS_PROJECT/sccache-l${MOZ_SCM_LEVEL}-${region}@$SCCACHE_GCS_PROJECT.iam.gserviceaccount.com"
elif [ -n "${SCCACHE_GCS_KEY_PATH}" ]; then
mk_add_options "export SCCACHE_GCS_BUCKET=$bucket"
else
mk_add_options "export SCCACHE_BUCKET=$bucket"
# instruct sccache to fetch the credentials from the Auth service's awsS3Credentials endpoint, via the Taskcluster proxy.
mk_add_options "export AWS_IAM_CREDENTIALS_URL=http://taskcluster/auth/v1/aws/s3/read-write/${bucket}/?format=iam-role-compat"
fi
export CCACHE="$MOZ_FETCHES_DIR/sccache/sccache"
export SCCACHE_VERBOSE_STATS=1
mk_add_options MOZBUILD_MANAGE_SCCACHE_DAEMON=${MOZ_FETCHES_DIR}/sccache/sccache
fi