angular/integration/run_tests.sh
George Kalpakas ec495c807f ci: do not check/upload packages-dist/ UMD bundle sizes multiple times (#33987)
At the end of the `integration/run_tests.sh` script, we check and upload
the payload sizes of UMD bundles in `dist/packages-dist/`. At some
point, we started sharding the integration tests on CI to speed the
overall build time. As a result, checking and uploading of UMD bundle
sizes was run multiple times (once per shard).

Given that the data is identical on each shard, the data was just
overwriting the previously uploaded data. Even if the end result is the
same, checking and uploading the data multiple times is wasteful.

This commit fixes `integration/run_tests.sh` to only check/upload UMD
bundle sizes on the 1st shard.

PR Close #33987
2019-11-25 16:36:07 -05:00

78 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -u -e -o pipefail
# see https://circleci.com/docs/2.0/env-vars/#circleci-built-in-environment-variables
CI=${CI:-false}
cd "$(dirname "$0")"
# basedir is the workspace root
readonly basedir=$(pwd)/..
readonly bazel_bin=$(yarn bin)/bazel
# When running on the CI, we track the payload size of various integration output files. Also
# we shard tests across multiple CI job instances. The script needs to be run with a shard index
# and the maximum amount of shards available for the integration tests on the CI.
# For example: "./run_tests.sh {SHARD_INDEX} {MAX_SHARDS}".
if $CI; then
source ${basedir}/scripts/ci/payload-size.sh
SHARD_INDEX=${1:?"No shard index has been specified."}
MAX_SHARDS=${2:?"The maximum amount of shards has not been specified."}
# Determines the tests that need to be run for this shard index.
TEST_DIRS=$(node ./get-sharded-tests.js --shardIndex ${SHARD_INDEX} --maxShards ${MAX_SHARDS})
# NB: we don't run build-packages-dist.js because we expect that it was done
# by an earlier job in the CircleCI workflow.
else
# Not on CircleCI so let's build the packages-dist directory.
# This should be fast on incremental re-build.
node ${basedir}/scripts/build-packages-dist.js
# If we aren't running on CircleCI, we do not shard tests because this would be the job of
# Bazel eventually. For now, we just run all tests sequentially when running locally.
TEST_DIRS=$(ls | grep -v node_modules)
fi
# Workaround https://github.com/yarnpkg/yarn/issues/2165
# Yarn will cache file://dist URIs and not update Angular code
readonly cache=.yarn_local_cache
function rm_cache {
rm -rf $cache
}
rm_cache
mkdir $cache
trap rm_cache EXIT
for testDir in ${TEST_DIRS}; do
[[ -d "$testDir" ]] || continue
echo "#################################"
echo "Running integration test $testDir"
echo "#################################"
(
cd $testDir
rm -rf dist
yarn install --cache-folder ../$cache
yarn test || exit 1
# Track payload size for cli-hello-world* tests, plus hello_world__closure
if $CI && ([[ $testDir =~ cli-hello-world ]] || [[ $testDir == hello_world__closure ]]); then
if ([[ $testDir =~ cli-hello-world ]]); then
yarn build
fi
trackPayloadSize "$testDir" "dist/*.js" true "${basedir}/integration/_payload-limits.json"
fi
# remove the temporary node modules directory to keep the source folder clean.
rm -rf node_modules
)
done
if $CI && [[ "$SHARD_INDEX" == "0" ]]; then
trackPayloadSize "umd" "../dist/packages-dist/*/bundles/*.umd.min.js" false
fi