In #33823, `scripts/package-builds.sh` (which is used by both `build-packages-dist.sh` and `build-ivy-npm-packages.sh`) was updated to use `realpath`. It turns out that `realpath` does not exist on macOS, so the build scripts do not work there. In order to fix this (and also reduce the likelihood of introducing similar issues in the future), this commit changes these bash scripts to Node.js scripts (using [ShellJS](https://github.com/shelljs/shelljs) for a cross-platform implementation of Unix shell commands where necessary). PR Close #33854
78 lines
2.5 KiB
Bash
Executable File
78 lines
2.5 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 false "${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; then
|
|
trackPayloadSize "umd" "../dist/packages-dist/*/bundles/*.umd.min.js" false false
|
|
fi
|