
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
78 lines
2.6 KiB
Bash
Executable File
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
|