@@ -953,113 +953,41 @@ jobs:
953953 fi
954954 fi
955955
956- all-jobs-pass :
957- name : All jobs pass
958- runs-on : ${{ inputs.runner_provider == 'namespace' && 'namespace-profile-metamask-ci-linux' || 'ubuntu-latest' }}
959- if : ${{ !cancelled() }}
960- needs :
961- [
962- check-diff,
963- dedupe,
964- scripts,
965- unit-tests,
966- component-view-tests,
967- check-workflows,
968- js-bundle-size-check,
969- sonar-cloud-quality-gate-status,
970- ]
971- outputs :
972- ALL_JOBS_PASSED : ${{ steps.jobs-passed-status.outputs.ALL_JOBS_PASSED }}
973- steps :
974- - name : Set jobs passed status
975- id : jobs-passed-status
976- env :
977- NEEDS_CONTEXT : ${{ toJSON(needs) }}
978- EVENT_NAME : ${{ github.event_name }}
979- IS_FORK : ${{ github.event.pull_request.head.repo.fork }}
980- run : |
981- # Check results of all required jobs dynamically
982- # On merge_group events, "skipped" is acceptable (some jobs intentionally skip)
983- # On fork PRs, "skipped" is acceptable (secret-dependent jobs are intentionally skipped)
984- # On other events (push to main), all jobs must succeed
985-
986- FAILED="false"
987-
988- while read -r job_name result; do
989- if [[ "$result" == "failure" ]] || [[ "$result" == "cancelled" ]]; then
990- echo "::error::Job '$job_name' failed with result: $result"
991- FAILED="true"
992- elif [[ "$result" == "skipped" ]]; then
993- if [[ "$EVENT_NAME" == "merge_group" ]] || [[ "$IS_FORK" == "true" ]]; then
994- echo "Job '$job_name' was skipped (OK for merge_group events and fork PRs)"
995- else
996- echo "::error::Job '$job_name' was unexpectedly skipped on $EVENT_NAME event"
997- FAILED="true"
998- fi
999- else
1000- echo "Job '$job_name' passed"
1001- fi
1002- done < <(echo "$NEEDS_CONTEXT" | jq -r 'to_entries[] | "\(.key) \(.value.result)"')
1003-
1004- if [[ "$FAILED" == "true" ]]; then
1005- echo "Some required jobs failed"
1006- exit 1
1007- fi
1008-
1009- echo "ALL_JOBS_PASSED=true" >> "$GITHUB_OUTPUT"
1010-
1011956 check-all-jobs-pass :
1012957 name : Check all jobs pass
1013- if : ${{ !cancelled() }}
958+ # Run the aggregate gate even when optional dependencies are skipped.
959+ # The composite action decides which skipped jobs are acceptable.
960+ if : ${{ always() && !cancelled() }}
1014961 runs-on : ${{ inputs.runner_provider == 'namespace' && 'namespace-profile-metamask-ci-linux' || 'ubuntu-latest' }}
1015962 needs :
1016963 - get_requirements
1017- - all-jobs-pass
964+ - check-diff
965+ - dedupe
966+ - scripts
967+ - unit-tests
968+ - component-view-tests
969+ - check-workflows
970+ - js-bundle-size-check
971+ - sonar-cloud-quality-gate-status
1018972 - build-android-apks
1019973 - build-ios-apps
1020974 - e2e-smoke-tests-android
1021975 - e2e-smoke-tests-ios
1022- env :
1023- SKIPPED : ${{ needs.get_requirements.outputs.skip_everything == 'true' }}
1024976 steps :
1025- - name : Block merge while pr-not-ready-for-e2e label is applied
1026- if : ${{ needs.get_requirements.outputs.block_merge_for_e2e_readiness == 'true' }}
1027- run : |
1028- echo "::error::The 'pr-not-ready-for-e2e' label is still applied. Remove it to trigger E2E tests before merging."
1029- exit 1
1030- - run : |
1031- # If the merge queue was skipped, consider all jobs as passed
1032- if [[ "$SKIPPED" == "true" ]]; then
1033- echo "Merge queue skipped, considering all jobs as passed"
1034- exit 0
1035- fi
1036-
1037- # Check if all non-E2E jobs passed
1038- if [[ "${{ needs.all-jobs-pass.outputs.ALL_JOBS_PASSED }}" != "true" ]]; then
1039- echo "Non-E2E jobs failed"
1040- exit 1
1041- fi
1042-
1043- # Check E2E build + smoke results only if E2E should have run.
1044- # 'skipped' is acceptable — covers merge_group, fork PRs, ignorable-only changes,
1045- # platform-only PRs, and AI selection returning zero tags.
1046- # 'failure'/'cancelled' on any of build or smoke must block merge.
1047- if [[ "${{ needs.get_requirements.outputs.skip_e2e }}" != "true" ]]; then
1048- for entry in \
1049- "build-android-apks:${{ needs.build-android-apks.result }}" \
1050- "e2e-smoke-tests-android:${{ needs.e2e-smoke-tests-android.result }}" \
1051- "build-ios-apps:${{ needs.build-ios-apps.result }}" \
1052- "e2e-smoke-tests-ios:${{ needs.e2e-smoke-tests-ios.result }}"; do
1053- name="${entry%%:*}"
1054- result="${entry#*:}"
1055- if [[ "$result" == "failure" ]] || [[ "$result" == "cancelled" ]]; then
1056- echo "::error::Required E2E job '$name' did not succeed (result: $result)"
1057- exit 1
1058- fi
1059- done
1060- fi
977+ - uses : actions/checkout@v6
978+ with :
979+ fetch-depth : 1
980+ sparse-checkout : |
981+ .github/actions/ci-status-gate
1061982
1062- echo "All required jobs passed"
983+ - name : Evaluate CI status
984+ uses : ./.github/actions/ci-status-gate
985+ with :
986+ needs-json : ${{ toJSON(needs) }}
987+ requirement-context-json : ${{ toJSON(needs.get_requirements.outputs) }}
988+ e2e-job-regex : ' ^(build-android-apks|build-ios-apps|e2e-smoke-tests-android|e2e-smoke-tests-ios)$'
989+ event-name : ${{ github.event_name }}
990+ is-fork : ${{ github.event.pull_request.head.repo.fork == true }}
1063991
1064992 log-merge-group-failure :
1065993 name : Log merge group failure
0 commit comments