From 06264645fdf073a790c3ce5ae9a9c81418b4d8fa Mon Sep 17 00:00:00 2001 From: Georgios Kalpakas Date: Fri, 12 May 2017 22:07:51 +0300 Subject: [PATCH] build: use subshells when changing directories This prevents being left in the wrong directory in case of error. --- aio/aio-builds-setup/scripts/test.sh | 9 +- .../scripts/travis-preverify-pr.sh | 9 +- aio/scripts/deploy-preview.sh | 102 +++++++++--------- aio/scripts/deploy-staging.sh | 24 ++--- build.sh | 64 +++++------ scripts/ci/build.sh | 4 +- tools/code.angularjs.org/publish.sh | 11 +- 7 files changed, 114 insertions(+), 109 deletions(-) diff --git a/aio/aio-builds-setup/scripts/test.sh b/aio/aio-builds-setup/scripts/test.sh index 84a1b83e7e..06a9fb76b1 100755 --- a/aio/aio-builds-setup/scripts/test.sh +++ b/aio/aio-builds-setup/scripts/test.sh @@ -5,7 +5,8 @@ set -eux -o pipefail source "`dirname $0`/_env.sh" # Test `scripts-js/` -cd "$SCRIPTS_JS_DIR" -yarn install -yarn test -cd - +( + cd "$SCRIPTS_JS_DIR" + yarn install + yarn test +) diff --git a/aio/aio-builds-setup/scripts/travis-preverify-pr.sh b/aio/aio-builds-setup/scripts/travis-preverify-pr.sh index f75796a200..e67dff3a30 100755 --- a/aio/aio-builds-setup/scripts/travis-preverify-pr.sh +++ b/aio/aio-builds-setup/scripts/travis-preverify-pr.sh @@ -5,10 +5,11 @@ set -eux -o pipefail source "`dirname $0`/_env.sh" # Build `scripts-js/` -cd "$SCRIPTS_JS_DIR" -yarn install -yarn build -cd - +( + cd "$SCRIPTS_JS_DIR" + yarn install + yarn build +) # Preverify PR AIO_GITHUB_ORGANIZATION="angular" \ diff --git a/aio/scripts/deploy-preview.sh b/aio/scripts/deploy-preview.sh index 21aed29417..a6380f6369 100755 --- a/aio/scripts/deploy-preview.sh +++ b/aio/scripts/deploy-preview.sh @@ -15,59 +15,59 @@ readonly PREVERIFY_SCRIPT=aio-builds-setup/scripts/travis-preverify-pr.sh readonly skipBuild=$([[ "$1" == "--skip-build" ]] && echo "true" || echo ""); readonly relevantChangedFilesCount=$(git diff --name-only $TRAVIS_COMMIT_RANGE | grep -P "^(?:aio|packages)/(?!.*[._]spec\.[jt]s$)" | wc -l) -cd "`dirname $0`/.." +( + cd "`dirname $0`/.." -# Do not deploy unless this PR has touched relevant files: `aio/` or `packages/` (except for spec files) -if [[ $relevantChangedFilesCount -eq 0 ]]; then - echo "Skipping deploy because this PR did not touch any relevant files." - exit 0 -fi - -# Do not deploy unless this PR meets certain preconditions. -readonly preverifyExitCode=$($PREVERIFY_SCRIPT > /dev/fd/3 && echo 0 || echo $?) -case $preverifyExitCode in - 0) - # Preconditions met: Deploy - ;; - 1) - # An error occurred: Fail the script - exit 1 - ;; - 2) - # Preconditions not met: Skip deploy - echo "Skipping deploy because this PR did not meet the preconditions." + # Do not deploy unless this PR has touched relevant files: `aio/` or `packages/` (except for spec files) + if [[ $relevantChangedFilesCount -eq 0 ]]; then + echo "Skipping deploy because this PR did not touch any relevant files." exit 0 - ;; - *) - # Unexpected exit code: Fail the script - echo "Unexpected pre-verification exit code: $preverifyExitCode" + fi + + # Do not deploy unless this PR meets certain preconditions. + readonly preverifyExitCode=$($PREVERIFY_SCRIPT > /dev/fd/3 && echo 0 || echo $?) + case $preverifyExitCode in + 0) + # Preconditions met: Deploy + ;; + 1) + # An error occurred: Fail the script + exit 1 + ;; + 2) + # Preconditions not met: Skip deploy + echo "Skipping deploy because this PR did not meet the preconditions." + exit 0 + ;; + *) + # Unexpected exit code: Fail the script + echo "Unexpected pre-verification exit code: $preverifyExitCode" + exit 1 + ;; + esac + + # Build the app + if [ "$skipBuild" != "true" ]; then + yarn build + fi + tar --create --gzip --directory "$INPUT_DIR" --file "$OUTPUT_FILE" . + + # Deploy to staging + readonly httpCode=$( + curl --include --location --request POST --silent --write-out "\nHTTP_CODE: %{http_code}\n" \ + --header "Authorization: Token $NGBUILDS_IO_KEY" --data-binary "@$OUTPUT_FILE" "$UPLOAD_URL" \ + | sed 's/\r\n/\n/' \ + | tee /dev/fd/3 \ + | tail -1 \ + | sed 's/HTTP_CODE: //' + ) + + # Exit with an error if the request failed. + # (Ignore 409 failures, which mean trying to re-deploy for the same PR/SHA.) + if [ $httpCode -lt 200 ] || ([ $httpCode -ge 400 ] && [ $httpCode -ne 409 ]); then exit 1 - ;; -esac + fi -# Build the app -if [ "$skipBuild" != "true" ]; then - yarn build -fi -tar --create --gzip --directory "$INPUT_DIR" --file "$OUTPUT_FILE" . - -# Deploy to staging -readonly httpCode=$( - curl --include --location --request POST --silent --write-out "\nHTTP_CODE: %{http_code}\n" \ - --header "Authorization: Token $NGBUILDS_IO_KEY" --data-binary "@$OUTPUT_FILE" "$UPLOAD_URL" \ - | sed 's/\r\n/\n/' \ - | tee /dev/fd/3 \ - | tail -1 \ - | sed 's/HTTP_CODE: //' + # Run PWA-score tests + yarn test-pwa-score -- "$DEPLOYED_URL" "$MIN_PWA_SCORE" ) - -# Exit with an error if the request failed. -# (Ignore 409 failures, which mean trying to re-deploy for the same PR/SHA.) -if [ $httpCode -lt 200 ] || ([ $httpCode -ge 400 ] && [ $httpCode -ne 409 ]); then - exit 1 -fi - -# Run PWA-score tests -yarn test-pwa-score -- "$DEPLOYED_URL" "$MIN_PWA_SCORE" - -cd - diff --git a/aio/scripts/deploy-staging.sh b/aio/scripts/deploy-staging.sh index dcaab1469d..c7e8eea59d 100755 --- a/aio/scripts/deploy-staging.sh +++ b/aio/scripts/deploy-staging.sh @@ -7,18 +7,18 @@ set +x -eu -o pipefail FIREBASE_PROJECT_ID=aio-staging DEPLOYED_URL=https://$FIREBASE_PROJECT_ID.firebaseapp.com -cd "`dirname $0`/.." +( + cd "`dirname $0`/.." -# Build the app -yarn build + # Build the app + yarn build -# Deploy to staging -firebase use "$FIREBASE_PROJECT_ID" --token "$FIREBASE_TOKEN" -firebase deploy --message "Commit: $TRAVIS_COMMIT" --non-interactive --token "$FIREBASE_TOKEN" + # Deploy to staging + firebase use "$FIREBASE_PROJECT_ID" --token "$FIREBASE_TOKEN" + firebase deploy --message "Commit: $TRAVIS_COMMIT" --non-interactive --token "$FIREBASE_TOKEN" -# Run PWA-score tests -# TODO(gkalpak): Figure out why this fails and re-enable. -sleep 10 -yarn test-pwa-score -- "$DEPLOYED_URL" "$MIN_PWA_SCORE" || true - -cd - + # Run PWA-score tests + # TODO(gkalpak): Figure out why this fails and re-enable. + sleep 10 + yarn test-pwa-score -- "$DEPLOYED_URL" "$MIN_PWA_SCORE" || true +) diff --git a/build.sh b/build.sh index dd7aaaca92..04c7f1c877 100755 --- a/build.sh +++ b/build.sh @@ -362,38 +362,40 @@ if [[ ${BUILD_ALL} == true && ${TYPECHECK_ALL} == true ]]; then travisFoldStart "copy e2e files" "no-xtrace" mkdir -p ./dist/all/ - echo "====== Copying files needed for e2e tests =====" - cp -r ./modules/playground ./dist/all/ - cp -r ./modules/playground/favicon.ico ./dist/ - #rsync -aP ./modules/playground/* ./dist/all/playground/ - mkdir ./dist/all/playground/vendor - cd ./dist/all/playground/vendor - ln -s ../../../../node_modules/core-js/client/core.js . - ln -s ../../../../node_modules/zone.js/dist/zone.js . - ln -s ../../../../node_modules/zone.js/dist/long-stack-trace-zone.js . - ln -s ../../../../node_modules/systemjs/dist/system.src.js . - ln -s ../../../../node_modules/base64-js . - ln -s ../../../../node_modules/reflect-metadata/Reflect.js . - ln -s ../../../../node_modules/rxjs . - ln -s ../../../../node_modules/angular/angular.js . - ln -s ../../../../node_modules/hammerjs/hammer.js . - cd - + ( + echo "====== Copying files needed for e2e tests =====" + cp -r ./modules/playground ./dist/all/ + cp -r ./modules/playground/favicon.ico ./dist/ + #rsync -aP ./modules/playground/* ./dist/all/playground/ + mkdir ./dist/all/playground/vendor + cd ./dist/all/playground/vendor + ln -s ../../../../node_modules/core-js/client/core.js . + ln -s ../../../../node_modules/zone.js/dist/zone.js . + ln -s ../../../../node_modules/zone.js/dist/long-stack-trace-zone.js . + ln -s ../../../../node_modules/systemjs/dist/system.src.js . + ln -s ../../../../node_modules/base64-js . + ln -s ../../../../node_modules/reflect-metadata/Reflect.js . + ln -s ../../../../node_modules/rxjs . + ln -s ../../../../node_modules/angular/angular.js . + ln -s ../../../../node_modules/hammerjs/hammer.js . + ) - echo "====== Copying files needed for benchmarks =====" - cp -r ./modules/benchmarks ./dist/all/ - cp -r ./modules/benchmarks/favicon.ico ./dist/ - mkdir ./dist/all/benchmarks/vendor - cd ./dist/all/benchmarks/vendor - ln -s ../../../../node_modules/core-js/client/core.js . - ln -s ../../../../node_modules/zone.js/dist/zone.js . - ln -s ../../../../node_modules/zone.js/dist/long-stack-trace-zone.js . - ln -s ../../../../node_modules/systemjs/dist/system.src.js . - ln -s ../../../../node_modules/reflect-metadata/Reflect.js . - ln -s ../../../../node_modules/rxjs . - ln -s ../../../../node_modules/angular/angular.js . - ln -s ../../../../bower_components/polymer . - ln -s ../../../../node_modules/incremental-dom/dist/incremental-dom-cjs.js - cd - + ( + echo "====== Copying files needed for benchmarks =====" + cp -r ./modules/benchmarks ./dist/all/ + cp -r ./modules/benchmarks/favicon.ico ./dist/ + mkdir ./dist/all/benchmarks/vendor + cd ./dist/all/benchmarks/vendor + ln -s ../../../../node_modules/core-js/client/core.js . + ln -s ../../../../node_modules/zone.js/dist/zone.js . + ln -s ../../../../node_modules/zone.js/dist/long-stack-trace-zone.js . + ln -s ../../../../node_modules/systemjs/dist/system.src.js . + ln -s ../../../../node_modules/reflect-metadata/Reflect.js . + ln -s ../../../../node_modules/rxjs . + ln -s ../../../../node_modules/angular/angular.js . + ln -s ../../../../bower_components/polymer . + ln -s ../../../../node_modules/incremental-dom/dist/incremental-dom-cjs.js + ) travisFoldEnd "copy e2e files" TSCONFIG="packages/tsconfig.json" diff --git a/scripts/ci/build.sh b/scripts/ci/build.sh index 9c16c4eb95..ff089d0c20 100755 --- a/scripts/ci/build.sh +++ b/scripts/ci/build.sh @@ -40,6 +40,7 @@ travisFoldEnd "tsc a bunch of useless stuff" # Build angular.io if [[ ${CI_MODE:-} == "aio" ]]; then travisFoldStart "build.aio" + ( cd "`dirname $0`/../../aio" yarn build @@ -52,7 +53,6 @@ if [[ ${CI_MODE:-} == "aio" ]]; then yarn deploy-preview -- --skip-build travisFoldEnd "deploy.aio.pr-preview" fi - - cd - + ) travisFoldEnd "build.aio" fi diff --git a/tools/code.angularjs.org/publish.sh b/tools/code.angularjs.org/publish.sh index 580dfbb585..3638616c2e 100755 --- a/tools/code.angularjs.org/publish.sh +++ b/tools/code.angularjs.org/publish.sh @@ -30,11 +30,12 @@ function prepare { if [ -d "$REPO_DIR" ]; then - cd $REPO_DIR - git fetch --update-shallow origin - git checkout master - git merge --ff-only origin/master - cd - + ( + cd $REPO_DIR + git fetch --update-shallow origin + git checkout master + git merge --ff-only origin/master + ) else echo "-- Cloning code.angularjs.org into $REPO_DIR" git clone git@github.com:angular/code.angularjs.org.git $REPO_DIR --depth=1