diff --git a/.circleci/config.yml b/.circleci/config.yml index 682a6732414fe8..60e8629c363650 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -198,6 +198,7 @@ aliases: command: | ./scripts/circleci/check_license.sh ./scripts/circleci/check_cache.sh + ./scripts/circleci/validate_yarn_lockfile.sh when: always - &download-dependencies-gradle diff --git a/scripts/circleci/validate_yarn_lockfile.sh b/scripts/circleci/validate_yarn_lockfile.sh new file mode 100755 index 00000000000000..5626dd9567b5e0 --- /dev/null +++ b/scripts/circleci/validate_yarn_lockfile.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Abort the mission if any command fails +set -e + +# Allow the script to be invoked from various environments +if [[ -z "${OVERRIDE_YARN_BINARY}" ]]; then + YARN_BINARY=$(command -v yarn) +else + YARN_BINARY="${OVERRIDE_YARN_BINARY}" +fi + +REACT_NATIVE_TEMP_DIR=$(mktemp -d /tmp/react-native-XXXXXXXX) + +function cleanup { + set +e + rm -rf "$REACT_NATIVE_TEMP_DIR" + set -e +} + +function msg { + echo -e " " + echo -e "\\x1B[36m${1}\\x1B[0m"; + echo -e "\\x1B[36m${1//?/=}\\x1B[0m" +} + +trap cleanup EXIT + +cp -R ./package.json "$REACT_NATIVE_TEMP_DIR" +cp -R ./yarn.lock "$REACT_NATIVE_TEMP_DIR" +pushd "$REACT_NATIVE_TEMP_DIR" >/dev/null + +if ! $YARN_BINARY --ignore-scripts --silent --non-interactive --mutex network --frozen-lockfile; then + msg "Yarn validation failed." + echo "This means the package.json and yarn.lock disagree in some way." + echo "Try fixing it by running \`yarn\` and committing the changes." +fi + +popd >/dev/null