2017-05-23 04:36:02 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2018-10-17 12:19:15 -04:00
|
|
|
# WARNING: CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN should NOT be printed.
|
2017-05-23 04:36:02 -04:00
|
|
|
set +x -eu -o pipefail
|
|
|
|
|
2018-10-18 07:49:30 -04:00
|
|
|
# Do not deploy if we are running in a fork.
|
|
|
|
if [[ "$CI_REPO_OWNER/$CI_REPO_NAME" != "angular/angular" ]]; then
|
|
|
|
echo "Skipping deploy because this is not angular/angular."
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Do not deploy if this is a PR. PRs are deployed in the `aio_preview` CircleCI job.
|
2018-10-17 12:19:15 -04:00
|
|
|
if [[ $CI_PULL_REQUEST != "false" ]]; then
|
2017-07-27 11:12:04 -04:00
|
|
|
echo "Skipping deploy because this is a PR build."
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Do not deploy if the current commit is not the latest on its branch.
|
2018-10-18 07:49:30 -04:00
|
|
|
readonly latestCommit=$(git ls-remote origin $CI_BRANCH | cut -c1-40)
|
|
|
|
if [[ $CI_COMMIT != $latestCommit ]]; then
|
|
|
|
echo "Skipping deploy because $CI_COMMIT is not the latest commit ($latestCommit)."
|
2017-07-27 11:12:04 -04:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# The deployment mode is computed based on the branch we are building
|
2018-10-17 12:19:15 -04:00
|
|
|
if [[ $CI_BRANCH == master ]]; then
|
2017-07-27 11:12:04 -04:00
|
|
|
readonly deployEnv=next
|
2018-10-18 07:49:30 -04:00
|
|
|
elif [[ $CI_BRANCH == $CI_STABLE_BRANCH ]]; then
|
2018-04-13 15:41:32 -04:00
|
|
|
readonly deployEnv=stable
|
2017-07-27 11:12:04 -04:00
|
|
|
else
|
2017-07-28 06:57:44 -04:00
|
|
|
# Extract the major versions from the branches, e.g. the 4 from 4.3.x
|
2018-10-17 12:19:15 -04:00
|
|
|
readonly majorVersion=${CI_BRANCH%%.*}
|
2018-10-18 07:49:30 -04:00
|
|
|
readonly majorVersionStable=${CI_STABLE_BRANCH%%.*}
|
2017-07-28 06:57:44 -04:00
|
|
|
|
|
|
|
# Do not deploy if the major version is not less than the stable branch major version
|
2017-09-01 17:04:59 -04:00
|
|
|
if [[ !( "$majorVersion" < "$majorVersionStable" ) ]]; then
|
2018-10-17 12:19:15 -04:00
|
|
|
echo "Skipping deploy of branch \"$CI_BRANCH\" to firebase."
|
2018-10-18 07:49:30 -04:00
|
|
|
echo "We only deploy archive branches with the major version less than the stable branch: \"$CI_STABLE_BRANCH\""
|
2017-07-28 06:57:44 -04:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2017-07-27 11:12:04 -04:00
|
|
|
# Find the branch that has highest minor version for the given `$majorVersion`
|
|
|
|
readonly mostRecentMinorVersion=$(
|
|
|
|
# List the branches that start with the major version
|
|
|
|
git ls-remote origin refs/heads/${majorVersion}.*.x |
|
|
|
|
# Extract the version number
|
|
|
|
awk -F'/' '{print $3}' |
|
|
|
|
# Sort by the minor version
|
|
|
|
sort -t. -k 2,2n |
|
|
|
|
# Get the highest version
|
|
|
|
tail -n1
|
|
|
|
)
|
2017-05-23 04:36:02 -04:00
|
|
|
|
2017-07-27 11:12:04 -04:00
|
|
|
# Do not deploy as it is not the latest branch for the given major version
|
2018-10-17 12:19:15 -04:00
|
|
|
if [[ $CI_BRANCH != $mostRecentMinorVersion ]]; then
|
|
|
|
echo "Skipping deploy of branch \"$CI_BRANCH\" to firebase."
|
|
|
|
echo "There is a more recent branch with the same major version: \"$mostRecentMinorVersion\""
|
2017-07-27 11:12:04 -04:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2017-07-28 06:57:44 -04:00
|
|
|
readonly deployEnv=archive
|
2017-07-27 11:12:04 -04:00
|
|
|
fi
|
2017-05-23 04:36:02 -04:00
|
|
|
|
|
|
|
case $deployEnv in
|
2017-07-27 11:12:04 -04:00
|
|
|
next)
|
2017-05-23 04:36:02 -04:00
|
|
|
readonly projectId=aio-staging
|
2017-07-28 06:57:44 -04:00
|
|
|
readonly deployedUrl=https://next.angular.io/
|
2018-10-17 12:19:15 -04:00
|
|
|
readonly firebaseToken=$CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN
|
2017-05-23 04:36:02 -04:00
|
|
|
;;
|
2017-07-27 11:12:04 -04:00
|
|
|
stable)
|
2017-05-23 04:36:02 -04:00
|
|
|
readonly projectId=angular-io
|
|
|
|
readonly deployedUrl=https://angular.io/
|
2018-10-17 12:19:15 -04:00
|
|
|
readonly firebaseToken=$CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN
|
2017-05-23 04:36:02 -04:00
|
|
|
;;
|
2017-07-27 11:12:04 -04:00
|
|
|
archive)
|
2018-05-03 18:05:08 -04:00
|
|
|
readonly projectId=v${majorVersion}-angular-io
|
2017-07-27 11:12:04 -04:00
|
|
|
readonly deployedUrl=https://v${majorVersion}.angular.io/
|
2018-10-17 12:19:15 -04:00
|
|
|
readonly firebaseToken=$CI_SECRET_AIO_DEPLOY_FIREBASE_TOKEN
|
2017-05-23 04:36:02 -04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2018-10-17 12:19:15 -04:00
|
|
|
echo "Git branch : $CI_BRANCH"
|
2017-07-27 11:12:04 -04:00
|
|
|
echo "Build/deploy mode : $deployEnv"
|
|
|
|
echo "Firebase project : $projectId"
|
|
|
|
echo "Deployment URL : $deployedUrl"
|
2017-07-07 19:35:07 -04:00
|
|
|
|
2017-08-08 16:59:25 -04:00
|
|
|
if [[ ${1:-} == "--dry-run" ]]; then
|
2017-07-28 06:57:44 -04:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2017-07-07 19:35:07 -04:00
|
|
|
# Deploy
|
2017-05-23 04:36:02 -04:00
|
|
|
(
|
|
|
|
cd "`dirname $0`/.."
|
|
|
|
|
|
|
|
# Build the app
|
2018-04-20 11:41:12 -04:00
|
|
|
yarn build-for $deployEnv
|
2017-05-23 04:36:02 -04:00
|
|
|
|
2017-07-26 15:41:45 -04:00
|
|
|
# Include any mode-specific files
|
|
|
|
cp -rf src/extra-files/$deployEnv/. dist/
|
|
|
|
|
2018-08-30 12:32:32 -04:00
|
|
|
# Set deployedUrl as parameter in the opensearch description
|
|
|
|
# deployedUrl must end with /
|
|
|
|
yarn set-opensearch-url $deployedUrl
|
|
|
|
|
2017-06-16 19:25:42 -04:00
|
|
|
# Check payload size
|
|
|
|
yarn payload-size
|
|
|
|
|
2017-05-23 04:36:02 -04:00
|
|
|
# Deploy to Firebase
|
2018-10-25 06:07:45 -04:00
|
|
|
yarn firebase use "$projectId" --token "$firebaseToken"
|
|
|
|
yarn firebase deploy --message "Commit: $CI_COMMIT" --non-interactive --token "$firebaseToken"
|
2017-05-23 04:36:02 -04:00
|
|
|
|
|
|
|
# Run PWA-score tests
|
2018-10-17 12:19:15 -04:00
|
|
|
yarn test-pwa-score "$deployedUrl" "$CI_AIO_MIN_PWA_SCORE"
|
2017-05-23 04:36:02 -04:00
|
|
|
)
|