123 lines
7.4 KiB
Bash
Executable File
123 lines
7.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Variables
|
|
readonly projectDir=$(realpath "$(dirname ${BASH_SOURCE[0]})/..")
|
|
readonly envHelpersPath="$projectDir/.circleci/env-helpers.inc.sh";
|
|
readonly bashEnvCachePath="$projectDir/.circleci/bash_env_cache";
|
|
|
|
if [ -f $bashEnvCachePath ]; then
|
|
# Since a bash env cache is present, load this into the $BASH_ENV
|
|
cat "$bashEnvCachePath" >> $BASH_ENV;
|
|
echo "BASH environment loaded from cached value at $bashEnvCachePath";
|
|
else
|
|
# Since no bash env cache is present, build out $BASH_ENV values.
|
|
|
|
# Load helpers and make them available everywhere (through `$BASH_ENV`).
|
|
source $envHelpersPath;
|
|
echo "source $envHelpersPath;" >> $BASH_ENV;
|
|
|
|
|
|
####################################################################################################
|
|
# Define PUBLIC environment variables for CircleCI.
|
|
####################################################################################################
|
|
# See https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables for more info.
|
|
####################################################################################################
|
|
setPublicVar PROJECT_ROOT "$projectDir";
|
|
setPublicVar CI_AIO_MIN_PWA_SCORE "95";
|
|
# This is the branch being built; e.g. `pull/12345` for PR builds.
|
|
setPublicVar CI_BRANCH "$CIRCLE_BRANCH";
|
|
setPublicVar CI_BUILD_URL "$CIRCLE_BUILD_URL";
|
|
setPublicVar CI_COMMIT "$CIRCLE_SHA1";
|
|
# `CI_COMMIT_RANGE` is only used on push builds (a.k.a. non-PR, non-scheduled builds and rerun
|
|
# workflows of such builds).
|
|
setPublicVar CI_COMMIT_RANGE "$CIRCLE_GIT_BASE_REVISION..$CIRCLE_GIT_REVISION";
|
|
setPublicVar CI_PULL_REQUEST "${CIRCLE_PR_NUMBER:-false}";
|
|
setPublicVar CI_REPO_NAME "$CIRCLE_PROJECT_REPONAME";
|
|
setPublicVar CI_REPO_OWNER "$CIRCLE_PROJECT_USERNAME";
|
|
|
|
# Store a PR's refs and shas so they don't need to be requested multiple times.
|
|
setPublicVar GITHUB_REFS_AND_SHAS $(node tools/utils/get-refs-and-shas-for-target.js ${CIRCLE_PR_NUMBER:-false} | awk '{ gsub(/"/,"\\\"") } 1');
|
|
|
|
|
|
####################################################################################################
|
|
# Define "lazy" PUBLIC environment variables for CircleCI.
|
|
# (I.e. functions to set an environment variable when called.)
|
|
####################################################################################################
|
|
createPublicVarSetter CI_STABLE_BRANCH "\$(npm info @angular/core dist-tags.latest | sed -r 's/^\\s*([0-9]+\\.[0-9]+)\\.[0-9]+.*$/\\1.x/')";
|
|
|
|
|
|
####################################################################################################
|
|
# Define SECRET environment variables for CircleCI.
|
|
####################################################################################################
|
|
setSecretVar CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN "$AIO_DEPLOY_TOKEN";
|
|
setSecretVar CI_SECRET_PAYLOAD_FIREBASE_TOKEN "$ANGULAR_PAYLOAD_TOKEN";
|
|
|
|
|
|
####################################################################################################
|
|
# Define SauceLabs environment variables for CircleCI.
|
|
####################################################################################################
|
|
setPublicVar SAUCE_USERNAME "angular-framework";
|
|
setSecretVar SAUCE_ACCESS_KEY "0c731274ed5f-cbc9-16f4-021a-9835e39f";
|
|
# TODO(josephperrott): Remove environment variables once all saucelabs tests are via bazel method.
|
|
setPublicVar SAUCE_LOG_FILE /tmp/angular/sauce-connect.log
|
|
setPublicVar SAUCE_READY_FILE /tmp/angular/sauce-connect-ready-file.lock
|
|
setPublicVar SAUCE_PID_FILE /tmp/angular/sauce-connect-pid-file.lock
|
|
setPublicVar SAUCE_TUNNEL_IDENTIFIER "angular-framework-${CIRCLE_BUILD_NUM}-${CIRCLE_NODE_INDEX}"
|
|
# Amount of seconds we wait for sauceconnect to establish a tunnel instance. In order to not
|
|
# acquire CircleCI instances for too long if sauceconnect failed, we need a connect timeout.
|
|
setPublicVar SAUCE_READY_FILE_TIMEOUT 120
|
|
|
|
|
|
####################################################################################################
|
|
# Define environment variables for the `angular/components` repo unit tests job.
|
|
####################################################################################################
|
|
# We specifically use a directory within "/tmp" here because we want the cloned repo to be
|
|
# completely isolated from angular/angular in order to avoid any bad interactions between
|
|
# their separate build setups. **NOTE**: When updating the temporary directory, also update
|
|
# the `save_cache` path configuration in `config.yml`
|
|
setPublicVar COMPONENTS_REPO_TMP_DIR "/tmp/angular-components-repo"
|
|
setPublicVar COMPONENTS_REPO_URL "https://github.com/angular/components.git"
|
|
setPublicVar COMPONENTS_REPO_BRANCH "master"
|
|
# **NOTE**: When updating the commit SHA, also update the cache key in the CircleCI `config.yml`.
|
|
setPublicVar COMPONENTS_REPO_COMMIT "598db096e668aa7e9debd56eedfd127b7a55e371"
|
|
|
|
# Save the created BASH_ENV into the bash env cache file.
|
|
cat "$BASH_ENV" >> $bashEnvCachePath;
|
|
fi
|
|
|
|
|
|
####################################################################################################
|
|
# Decrypt GCP Credentials and store them as the Google default credentials.
|
|
####################################################################################################
|
|
mkdir -p "$HOME/.config/gcloud";
|
|
openssl aes-256-cbc -d -in "${projectDir}/.circleci/gcp_token" \
|
|
-md md5 -k "$CIRCLE_PROJECT_REPONAME" -out "$HOME/.config/gcloud/application_default_credentials.json"
|
|
####################################################################################################
|
|
# Set bazel configuration for CircleCI runs.
|
|
####################################################################################################
|
|
cp "${projectDir}/.circleci/bazel.linux.rc" "$HOME/.bazelrc";
|
|
|
|
####################################################################################################
|
|
# Create shell script in /tmp for Bazel actions to access CI envs without
|
|
# busting the cache. Used by payload-size.sh script in integration tests.
|
|
####################################################################################################
|
|
readonly bazelVarEnv="/tmp/bazel-ci-env.sh"
|
|
echo "# Setup by /.circle/env.sh" > $bazelVarEnv
|
|
echo "export PROJECT_ROOT=\"${PROJECT_ROOT}\";" >> $bazelVarEnv
|
|
echo "export CI_BRANCH=\"${CI_BRANCH}\";" >> $bazelVarEnv
|
|
echo "export CI_BUILD_URL=\"${CI_BUILD_URL}\";" >> $bazelVarEnv
|
|
echo "export CI_COMMIT=\"${CI_COMMIT}\";" >> $bazelVarEnv
|
|
echo "export CI_COMMIT_RANGE=\"${CI_COMMIT_RANGE}\";" >> $bazelVarEnv
|
|
echo "export CI_PULL_REQUEST=\"${CI_PULL_REQUEST}\";" >> $bazelVarEnv
|
|
echo "export CI_REPO_NAME=\"${CI_REPO_NAME}\";" >> $bazelVarEnv
|
|
echo "export CI_REPO_OWNER=\"${CI_REPO_OWNER}\";" >> $bazelVarEnv
|
|
echo "export CI_SECRET_PAYLOAD_FIREBASE_TOKEN=\"${CI_SECRET_PAYLOAD_FIREBASE_TOKEN}\";" >> $bazelVarEnv
|
|
|
|
####################################################################################################
|
|
####################################################################################################
|
|
## Source `$BASH_ENV` to make the variables available immediately. ##
|
|
## ***NOTE: This must remain the the last action in this script*** ##
|
|
####################################################################################################
|
|
####################################################################################################
|
|
source $BASH_ENV;
|