diff --git a/.circleci/config.yml b/.circleci/config.yml index c35a42449..c8b82bc85 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -350,27 +350,9 @@ jobs: # required and add the new dependencies, and the cache will be persisted. - dependency-cache-v1- - gh/install - - run: - name: Set IS_DRAFT environment variable - command: | - PR_NUMBER="${CIRCLE_PULL_REQUEST##*/}" - if [ -n "$PR_NUMBER" ] - then - echo "IS_DRAFT=$(gh pr view --json isDraft --jq '.isDraft' "$PR_NUMBER")" >> "$BASH_ENV" - source "$BASH_ENV" - else - echo "Not a PR; skipping" - fi - run: name: Install dependencies - command: | - if [[ $IS_DRAFT == 'true' ]] - then - # Use GitHub registry on draft PRs, allowing the use of preview builds - METAMASK_NPM_REGISTRY=https://npm.pkg.github.com yarn --immutable - else - yarn --immutable - fi + command: .circleci/scripts/install-dependencies.sh - save_cache: key: dependency-cache-v1-{{ checksum "yarn.lock" }} paths: diff --git a/.circleci/scripts/install-dependencies.sh b/.circleci/scripts/install-dependencies.sh new file mode 100755 index 000000000..78c68c549 --- /dev/null +++ b/.circleci/scripts/install-dependencies.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -e +set -u +set -o pipefail + +PR_NUMBER="${CIRCLE_PULL_REQUEST##*/}" +if [ -n "$PR_NUMBER" ] +then + IS_DRAFT="$(gh pr view --json isDraft --jq '.isDraft' "$PR_NUMBER")" +else + IS_DRAFT='false' +fi + +# Build query to see whether there are any "preview-like" packages in the manifest +# A "preview-like" package is a `@metamask`-scoped package with a prerelease version that has no period. +QUERY='.dependencies + .devDependencies' # Get list of all dependencies +QUERY+=' | with_entries( select(.key | startswith("@metamask") ) )' # filter to @metamask-scoped packages +QUERY+=' | to_entries[].value' # Get version ranges +QUERY+=' | select(test("^\\d+\\.\\d+\\.\\d+-[^.]+$"))' # Get pinned versions where the prerelease part has no "." + +# Use `-e` flag so that exit code indicates whether any matches were found +if jq -e "${QUERY}" < ./package.json +then + echo "Preview builds detected" + HAS_PREVIEW_BUILDS='true' +else + echo "No preview builds detected" + HAS_PREVIEW_BUILDS='false' +fi + +if [[ $IS_DRAFT == 'true' && $HAS_PREVIEW_BUILDS == 'true' ]] +then + # Use GitHub registry on draft PRs, allowing the use of preview builds + echo "Installing with preview builds" + METAMASK_NPM_REGISTRY=https://npm.pkg.github.com yarn --immutable +else + echo "Installing without preview builds" + yarn --immutable +fi