diff --git a/.circleci/config.yml b/.circleci/config.yml index 74815818582f..3836d5e4048e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -87,15 +87,15 @@ aliases: cat ${HOME}/project/.circleci/scripts/enable-vnc.sh >> ~/.bashrc fi - # Check if MMI Optional tests should run - - &check-mmi-optional - name: Check if MMI Optional tests should run + # Check if MMI tests should run + - &check-mmi-trigger + name: Check if MMI tests should run command: | - RUN_MMI_OPTIONAL=$(cat ./RUN_MMI_OPTIONAL) - if [[ "${RUN_MMI_OPTIONAL}" == "true" ]]; then - echo "Running MMI Optional tests" + source mmi_trigger.env + if [ "${run_mmi_tests}" == "true" ]; then + echo "Running MMI tests" else - echo "Skipping MMI Optional tests" + echo "Skipping MMI tests" circleci step halt fi @@ -114,7 +114,7 @@ workflows: - trigger-beta-build: requires: - prep-deps - - check-pr-tag + - check-mmi-trigger - prep-deps - get-changed-files-with-git-diff: filters: @@ -179,7 +179,7 @@ workflows: - prep-build-test-mmi-playwright: requires: - prep-deps - - check-pr-tag + - check-mmi-trigger - prep-build-storybook: requires: - prep-deps @@ -231,7 +231,7 @@ workflows: requires: - prep-build-test-mmi - get-changed-files-with-git-diff - - test-e2e-mmi-playwright - OPTIONAL: + - test-e2e-mmi-playwright: requires: - prep-build-test-mmi-playwright - test-e2e-chrome-rpc-mmi: @@ -421,39 +421,6 @@ jobs: name: Create GitHub Pull Request for version command: .circleci/scripts/release-create-release-pr.sh - check-pr-tag: - docker: - - image: cimg/base:stable - steps: - - run: - name: Check for MMI Team Tag - command: | - #!/bin/bash - - GH_LABEL=team-mmi - if [ -z "$CIRCLE_PULL_REQUESTS" ]; then - echo "Skipping tag check; this is not a PR." - echo "false" > ./RUN_MMI_OPTIONAL - exit 0 - fi - - echo $CIRCLE_PULL_REQUESTS | sed 's/,/\n/g' - - # See if any associated PRs have matching label - HAS_MATCHING_PR=$(echo $CIRCLE_PULL_REQUESTS \ - | sed -e 's#,#\n#g' -e 's#/github.com/#/api.github.com/repos/#g' -e 's#/pull/#/pulls/#g' \ - | xargs -n1 curl -s \ - | jq -s "map((.labels|map(select(.name==\"${GH_LABEL}\"))))|flatten|length > 0") - - echo "${GH_LABEL} tag presence: ${HAS_MATCHING_PR}" - - # assign the RUN_MMI_OPTIONAL variable - echo "${HAS_MATCHING_PR}" > ./RUN_MMI_OPTIONAL - - persist_to_workspace: - root: . - paths: - - RUN_MMI_OPTIONAL - prep-deps: executor: node-browsers-medium steps: @@ -839,7 +806,7 @@ jobs: - run: corepack enable - attach_workspace: at: . - - run: *check-mmi-optional + - run: *check-mmi-trigger - run: name: Build MMI extension for Playwright e2e command: | @@ -854,7 +821,6 @@ jobs: - persist_to_workspace: root: . paths: - - RUN_MMI_OPTIONAL - dist-test-mmi-playwright - builds-test-mmi-playwright - store_artifacts: @@ -1306,7 +1272,7 @@ jobs: - store_test_results: path: test/test-results/e2e - test-e2e-mmi-playwright - OPTIONAL: + test-e2e-mmi-playwright: executor: playwright parallelism: 2 steps: @@ -1314,7 +1280,7 @@ jobs: - run: corepack enable - attach_workspace: at: . - - run: *check-mmi-optional + - run: *check-mmi-trigger - run: name: Move test build to dist command: mv ./dist-test-mmi-playwright ./dist @@ -1743,3 +1709,18 @@ jobs: - run: name: All Tests Passed command: echo 'whew - everything passed!' + + check-mmi-trigger: + executor: node-browsers-medium + steps: + - checkout + - run: + name: Check for MMI Team Label or Reviewer + command: ./.circleci/scripts/check_mmi_trigger.sh + - store_artifacts: + path: mmi_trigger.env + destination: mmi_trigger.env + - persist_to_workspace: + root: . + paths: + - mmi_trigger.env diff --git a/.circleci/scripts/check_mmi_trigger.sh b/.circleci/scripts/check_mmi_trigger.sh new file mode 100755 index 000000000000..2de2f69044d4 --- /dev/null +++ b/.circleci/scripts/check_mmi_trigger.sh @@ -0,0 +1,60 @@ +#!/bin/bash +set -eo pipefail + +# Ensure required environment variables are set +if [ -z "$CIRCLE_PULL_REQUEST" ] || [ -z "$GITHUB_TOKEN" ]; then + echo "This appears to be a fork or required environment variables are not set." + echo "Skipping MMI tests." + echo "run_mmi_tests=false" > mmi_trigger.env + exit 0 +fi + +# Extract PR number from the pull request URL +PR_NUMBER=$(echo "$CIRCLE_PULL_REQUEST" | awk -F'/' '{print $NF}') + +# Define repository details +REPO_OWNER="$CIRCLE_PROJECT_USERNAME" +REPO_NAME=$(basename "$CIRCLE_REPOSITORY_URL" .git) + +# Fetch PR details using GitHub API +PR_DETAILS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ + "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/pulls/$PR_NUMBER") + +# Fetch submitted reviews +SUBMITTED_REVIEWS=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ + "https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/pulls/$PR_NUMBER/reviews") + +# Check for label 'team-mmi' +LABEL_EXISTS=$(jq -r '.labels[]? | select(.name == "team-mmi") | length > 0' <<< "$PR_DETAILS") + +# Check for individual reviewer 'mmi' +REVIEWER_REQUESTED=$(jq -r '.requested_reviewers[]? | select(.login == "mmi") | length > 0' <<< "$PR_DETAILS") + +# Check for team reviewer 'mmi' +TEAM_REQUESTED=$(jq -r '.requested_teams[]? | select(.slug == "mmi") | length > 0' <<< "$PR_DETAILS") + +# Check if 'mmi' submitted a review +REVIEWER_SUBMITTED=$(jq -r '.[]? | select(.user.login == "mmi") | length > 0' <<< "$SUBMITTED_REVIEWS") + +# Determine which condition was met and trigger tests if needed +if [[ "$LABEL_EXISTS" == "true" || "$REVIEWER_REQUESTED" == "true" || "$TEAM_REQUESTED" == "true" || "$REVIEWER_SUBMITTED" == "true" ]]; then + echo "run_mmi_tests=true" > mmi_trigger.env + + # Log exactly which condition was met + echo "Conditions met:" + if [[ "$LABEL_EXISTS" == "true" ]]; then + echo "- Label 'team-mmi' found." + fi + if [[ "$REVIEWER_REQUESTED" == "true" ]]; then + echo "- Reviewer 'mmi' requested." + fi + if [[ "$TEAM_REQUESTED" == "true" ]]; then + echo "- Team 'mmi' requested." + fi + if [[ "$REVIEWER_SUBMITTED" == "true" ]]; then + echo "- Reviewer 'mmi' submitted a review." + fi +else + echo "run_mmi_tests=false" > mmi_trigger.env + echo "Skipping MMI tests: Neither the 'team-mmi' label was found nor a reviewer from the 'MetaMask/mmi' team was assigned." +fi