From 5f092e4c2279519bdd7b5b7cbdb23fcee6e9b1c6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 00:31:39 +0000 Subject: [PATCH 1/6] Initial plan From c6878bdcb185f6fed934533f656b8c00d2080909 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 00:56:33 +0000 Subject: [PATCH 2/6] Add report-skip-reason step to pre_activation job to surface denial reasons in job summary (#bot-gated-pr-review-issue) Agent-Logs-Url: https://github.com/github/gh-aw/sessions/067ab295-8ff2-4434-9c93-bad0eb8fe31b Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ace-editor.lock.yml | 15 + .../agent-performance-analyzer.lock.yml | 14 + .../workflows/agent-persona-explorer.lock.yml | 14 + .github/workflows/ai-moderator.lock.yml | 16 ++ .github/workflows/archie.lock.yml | 15 + .github/workflows/auto-triage-issues.lock.yml | 15 + .github/workflows/brave.lock.yml | 15 + .../breaking-change-checker.lock.yml | 15 + .github/workflows/changeset.lock.yml | 14 + .github/workflows/ci-doctor.lock.yml | 14 + .github/workflows/cloclo.lock.yml | 15 + .../workflows/code-scanning-fixer.lock.yml | 15 + .github/workflows/code-simplifier.lock.yml | 15 + .github/workflows/craft.lock.yml | 15 + .../workflows/daily-cli-performance.lock.yml | 14 + .github/workflows/daily-file-diet.lock.yml | 15 + .../workflows/daily-issues-report.lock.yml | 14 + .../daily-observability-report.lock.yml | 14 + .../daily-rendering-scripts-verifier.lock.yml | 15 + .../daily-safe-output-optimizer.lock.yml | 15 + .github/workflows/daily-team-status.lock.yml | 12 + .../daily-testify-uber-super-expert.lock.yml | 15 + .github/workflows/dead-code-remover.lock.yml | 15 + .github/workflows/dependabot-burner.lock.yml | 14 + .github/workflows/dev-hawk.lock.yml | 14 + .github/workflows/dev.lock.yml | 14 + .github/workflows/firewall-escape.lock.yml | 14 + .github/workflows/grumpy-reviewer.lock.yml | 15 + .github/workflows/issue-monster.lock.yml | 17 ++ .github/workflows/mergefest.lock.yml | 15 + .github/workflows/metrics-collector.lock.yml | 14 + .github/workflows/pdf-summary.lock.yml | 15 + .github/workflows/plan.lock.yml | 15 + .github/workflows/poem-bot.lock.yml | 15 + .../workflows/pr-nitpick-reviewer.lock.yml | 15 + .github/workflows/q.lock.yml | 15 + .github/workflows/refiner.lock.yml | 14 + .github/workflows/release.lock.yml | 14 + .github/workflows/scout.lock.yml | 15 + .github/workflows/security-review.lock.yml | 15 + .../workflows/slide-deck-maintainer.lock.yml | 15 + .../workflows/smoke-agent-all-merged.lock.yml | 14 + .../workflows/smoke-agent-all-none.lock.yml | 14 + .../smoke-agent-public-approved.lock.yml | 14 + .../smoke-agent-public-none.lock.yml | 14 + .../smoke-agent-scoped-approved.lock.yml | 14 + .../workflows/smoke-call-workflow.lock.yml | 14 + .github/workflows/smoke-claude.lock.yml | 14 + .github/workflows/smoke-codex.lock.yml | 14 + .github/workflows/smoke-copilot-arm.lock.yml | 14 + .github/workflows/smoke-copilot.lock.yml | 14 + .../smoke-create-cross-repo-pr.lock.yml | 14 + .github/workflows/smoke-gemini.lock.yml | 14 + .github/workflows/smoke-multi-pr.lock.yml | 14 + .github/workflows/smoke-project.lock.yml | 14 + .../workflows/smoke-service-ports.lock.yml | 14 + .github/workflows/smoke-temporary-id.lock.yml | 14 + .github/workflows/smoke-test-tools.lock.yml | 14 + .../smoke-update-cross-repo-pr.lock.yml | 14 + .../smoke-workflow-call-with-inputs.lock.yml | 14 + .../workflows/smoke-workflow-call.lock.yml | 14 + .github/workflows/tidy.lock.yml | 15 + .../workflows/ubuntu-image-analyzer.lock.yml | 15 + .github/workflows/unbloat-docs.lock.yml | 15 + .github/workflows/update-astro.lock.yml | 15 + .github/workflows/workflow-generator.lock.yml | 15 + .../workflow-health-manager.lock.yml | 14 + .../setup/js/report_pre_activation_skip.cjs | 207 ++++++++++++++ .../js/report_pre_activation_skip.test.cjs | 261 ++++++++++++++++++ pkg/constants/job_constants.go | 4 + pkg/workflow/compiler_pre_activation_job.go | 83 ++++++ pkg/workflow/report_skip_reason_test.go | 193 +++++++++++++ .../basic-copilot.golden | 14 + .../with-imports.golden | 14 + 74 files changed, 1746 insertions(+) create mode 100644 actions/setup/js/report_pre_activation_skip.cjs create mode 100644 actions/setup/js/report_pre_activation_skip.test.cjs create mode 100644 pkg/workflow/report_skip_reason_test.go diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml index 0b7c12bf770..630f9160c75 100644 --- a/.github/workflows/ace-editor.lock.yml +++ b/.github/workflows/ace-editor.lock.yml @@ -665,4 +665,19 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index 80bdddd9b15..d1fb38a8f3a 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -1246,6 +1246,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index bc83b1d663b..5368804febb 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -1195,6 +1195,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index dabcbc9fe78..e91a826dddf 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -1030,6 +1030,22 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_bots.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }} + GH_AW_SKIP_ROLES_OK: ${{ steps.check_skip_roles.outputs.skip_roles_ok }} + GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.check_skip_roles.outputs.error_message }} + GH_AW_SKIP_BOTS_OK: ${{ steps.check_skip_bots.outputs.skip_bots_ok }} + GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.check_skip_bots.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index bb98e437372..c21ab76f97c 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -1224,6 +1224,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index c6570b914e2..f5acd578f72 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -1143,6 +1143,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index 362dcda6e9b..93e55db7ff0 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -1171,6 +1171,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index e9695536987..82a0f98418d 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -1123,6 +1123,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 62395e3ca7d..3d9a5e8ddf3 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -1022,6 +1022,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index ecf2549847a..b0aee2f768c 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -1333,6 +1333,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index 680bd2e1b78..bfa818081bd 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -1575,6 +1575,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 7e3fff7253c..83df666f586 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -1182,6 +1182,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 392624d9f86..1f38a4a50fe 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -1114,6 +1114,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 942245a48ee..1976aa20622 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -1177,6 +1177,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index e929b0954e3..69eae7f8012 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -1364,6 +1364,20 @@ jobs: } core.info(`has_changes=${hasChanges}`); core.setOutput('has_changes', hasChanges ? 'true' : 'false'); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index 6ea605d0fe7..feec34e8975 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -1209,6 +1209,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index 9e57bbaf849..fbe71a530ef 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -1237,6 +1237,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index 82d6b4787a7..d1dec8cbb75 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -1207,6 +1207,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index ee64722a9c6..24db89ddb27 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -1351,6 +1351,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index fc2cc3d77e2..c32043f22b6 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -1333,6 +1333,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 0db5f079d5a..3918919c58c 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -1117,6 +1117,18 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_stop_time.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_STOP_TIME_OK: ${{ steps.check_stop_time.outputs.stop_time_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index 3f651b55549..c5b07aa945b 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -1251,6 +1251,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 9759d38c63e..7d56e3c70a6 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -1155,6 +1155,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index eaf1d28fb2c..87f09d5d05d 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -1082,6 +1082,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index f89534ba151..f7158f532ce 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -1183,6 +1183,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index d4e5ca891fd..dcea0d56ee9 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -1306,6 +1306,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 63879bfbe21..9d963081b67 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -1209,6 +1209,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index 6222c6831ca..d9927e89dbc 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -1248,6 +1248,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 15cf5785e5f..261bc809479 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1868,6 +1868,23 @@ jobs: core.setOutput('issue_list', ''); core.setOutput('has_issues', 'false'); } + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }} + GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.check_skip_if_check_failing.outputs.skip_if_check_failing_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index ba8fa5e49ad..5385906cf43 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -1190,6 +1190,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml index 6f9c52d9f45..9e75bc66383 100644 --- a/.github/workflows/metrics-collector.lock.yml +++ b/.github/workflows/metrics-collector.lock.yml @@ -708,6 +708,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index 9fed2c74da7..b59a89ac4de 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -1265,6 +1265,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index f7fe52a6ef2..9ccb2dfff12 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -1192,6 +1192,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 2ab55c9bed9..787c59a5600 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -1554,6 +1554,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 9007284c234..76605d950f5 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -1262,6 +1262,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 8dedfe725d8..093263dbbd0 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -1426,6 +1426,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index a2e1c5a6588..e36e5447450 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -1145,6 +1145,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index a216e5b4a86..f4bc0f66b07 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -1244,6 +1244,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_tag: needs: diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index 4fbfd2e9d0e..cbc5becba5c 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -1460,6 +1460,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index 569476395db..d59bffb3b3d 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -1309,6 +1309,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index 2077d9832cf..a9cd29acb08 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -1229,6 +1229,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml index 7e3f36fbfac..927e9083ff9 100644 --- a/.github/workflows/smoke-agent-all-merged.lock.yml +++ b/.github/workflows/smoke-agent-all-merged.lock.yml @@ -1157,6 +1157,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml index 151a5e62986..8e9f1753cc0 100644 --- a/.github/workflows/smoke-agent-all-none.lock.yml +++ b/.github/workflows/smoke-agent-all-none.lock.yml @@ -1157,6 +1157,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml index 31080c20a78..0d7051e3a22 100644 --- a/.github/workflows/smoke-agent-public-approved.lock.yml +++ b/.github/workflows/smoke-agent-public-approved.lock.yml @@ -1190,6 +1190,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml index bcd34d3f38a..2f77a301ee7 100644 --- a/.github/workflows/smoke-agent-public-none.lock.yml +++ b/.github/workflows/smoke-agent-public-none.lock.yml @@ -1157,6 +1157,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index a79cdbd2473..921485e5bc0 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -1164,6 +1164,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index 8782b886e37..9d99160f58b 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -1130,6 +1130,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index b6eb329bc79..731e0138f27 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -2787,6 +2787,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index c71c051c9e2..a7cba19cc02 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -1798,6 +1798,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index 187fc9c6e2b..e5f545e03cb 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -2100,6 +2100,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index e51a00e1d99..c426980d750 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -2150,6 +2150,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index 5a01ce2c721..dedcf22cccd 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -1243,6 +1243,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 3984af1491f..6c6081c5788 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -1394,6 +1394,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index 4df115196d9..214ae14f38c 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -1224,6 +1224,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index f15e2db61a2..d29845f3778 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -1360,6 +1360,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index 65a60bf3772..232fb204930 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -1128,6 +1128,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 9244a29f04a..0a36b08697f 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -1207,6 +1207,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index 2e7fa86810d..41032eb12e7 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -1173,6 +1173,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index 0554980f743..c7a7108272d 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -1269,6 +1269,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml index d917e7a3e51..bb7ecb82654 100644 --- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml +++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml @@ -1143,6 +1143,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index 7577b542e74..782e7a3a6bf 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -1134,6 +1134,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 7ce28142b40..bf2a4f5d8c9 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -1245,6 +1245,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index b27e51ce437..303ce4387e5 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -1138,6 +1138,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 744e29f31c8..bc35c0b79ba 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -1589,6 +1589,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index bf3bf3e85d9..a817ce81a00 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -1164,6 +1164,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_no_match.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index b672bc117d6..6469486f90d 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -1183,6 +1183,21 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); safe_outputs: needs: diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index 957d78cc70b..12d0debcb90 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -1198,6 +1198,20 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); push_repo_memory: needs: diff --git a/actions/setup/js/report_pre_activation_skip.cjs b/actions/setup/js/report_pre_activation_skip.cjs new file mode 100644 index 00000000000..9ea48179a43 --- /dev/null +++ b/actions/setup/js/report_pre_activation_skip.cjs @@ -0,0 +1,207 @@ +// @ts-check +/// + +/** + * Reports why the workflow was not activated (skipped by pre-activation gate). + * Called from the pre_activation job with `if: always()` condition. + * Only writes to job summary when activation was denied by one or more checks. + * + * Environment variables (all optional — empty means "check was not configured"): + * GH_AW_IS_TEAM_MEMBER - "true"/"false" from check_membership step + * GH_AW_MEMBERSHIP_RESULT - result code from check_membership step + * GH_AW_MEMBERSHIP_ERROR_MESSAGE - human-readable error from check_membership step + * GH_AW_STOP_TIME_OK - "true"/"false" from check_stop_time step + * GH_AW_RATE_LIMIT_OK - "true"/"false" from check_rate_limit step + * GH_AW_SKIP_CHECK_OK - "true"/"false" from check_skip_if_match step + * GH_AW_SKIP_NO_MATCH_OK - "true"/"false" from check_skip_if_no_match step + * GH_AW_SKIP_IF_CHECK_FAILING_OK - "true"/"false" from check_skip_if_check_failing step + * GH_AW_SKIP_ROLES_OK - "true"/"false" from check_skip_roles step + * GH_AW_SKIP_ROLES_ERROR_MESSAGE - human-readable error from check_skip_roles step + * GH_AW_SKIP_BOTS_OK - "true"/"false" from check_skip_bots step + * GH_AW_SKIP_BOTS_ERROR_MESSAGE - human-readable error from check_skip_bots step + * GH_AW_COMMAND_POSITION_OK - "true"/"false" from check_command_position step + */ + +/** + * @typedef {{ check: string, message: string, result: string, remediation: string }} SkipReason + */ + +async function main() { + const reasons = collectSkipReasons(); + + if (reasons.length === 0) { + // All checks passed (or no checks were configured) — nothing to report. + core.info("✅ All pre-activation checks passed, no skip reason to report."); + return; + } + + core.info(`⏭️ Workflow activation denied by ${reasons.length} check(s). Writing skip reason to job summary...`); + await writeSkipSummary(reasons); +} + +/** + * Collects skip reasons from the environment variables set by each check step. + * A check is considered failing when its ok-output is exactly "false". + * An empty / undefined value means the check was not configured — skip it. + * + * @returns {SkipReason[]} + */ +function collectSkipReasons() { + /** @type {SkipReason[]} */ + const reasons = []; + + // Role / bot check (check_membership step) + const isTeamMember = process.env.GH_AW_IS_TEAM_MEMBER; + if (isTeamMember === "false") { + const result = process.env.GH_AW_MEMBERSHIP_RESULT || "insufficient_permissions"; + const errorMsg = process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE || "Actor does not have the required repository permissions."; + reasons.push({ + check: "Role / bot check", + message: errorMsg, + result, + remediation: buildMembershipRemediation(result), + }); + } + + // Stop-time check (check_stop_time step) + const stopTimeOk = process.env.GH_AW_STOP_TIME_OK; + if (stopTimeOk === "false") { + reasons.push({ + check: "Stop-time limit", + message: "The workflow is past its configured stop-time limit.", + result: "stop_time_exceeded", + remediation: "Update or remove `on.stop-time:` in the workflow frontmatter to extend the active window.", + }); + } + + // Rate-limit check (check_rate_limit step) + const rateLimitOk = process.env.GH_AW_RATE_LIMIT_OK; + if (rateLimitOk === "false") { + reasons.push({ + check: "Rate-limit check", + message: "The actor has exceeded the configured rate limit for this workflow.", + result: "rate_limit_exceeded", + remediation: "Adjust `on.rate-limit:` in the workflow frontmatter, or wait for the time window to expire.", + }); + } + + // Skip-if-match check (check_skip_if_match step) + const skipCheckOk = process.env.GH_AW_SKIP_CHECK_OK; + if (skipCheckOk === "false") { + reasons.push({ + check: "Skip-if-match check", + message: "The skip-if-match query matched, so the workflow was intentionally skipped.", + result: "skip_if_match", + remediation: "Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.", + }); + } + + // Skip-if-no-match check (check_skip_if_no_match step) + const skipNoMatchOk = process.env.GH_AW_SKIP_NO_MATCH_OK; + if (skipNoMatchOk === "false") { + reasons.push({ + check: "Skip-if-no-match check", + message: "The skip-if-no-match query returned no results, so the workflow was intentionally skipped.", + result: "skip_if_no_match", + remediation: "Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.", + }); + } + + // Skip-if-check-failing check (check_skip_if_check_failing step) + const skipIfCheckFailingOk = process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK; + if (skipIfCheckFailingOk === "false") { + reasons.push({ + check: "Skip-if-check-failing", + message: "A required check is currently failing, so the workflow was intentionally skipped.", + result: "skip_if_check_failing", + remediation: "Fix the failing check referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.", + }); + } + + // Skip-roles check (check_skip_roles step) + const skipRolesOk = process.env.GH_AW_SKIP_ROLES_OK; + if (skipRolesOk === "false") { + const errorMsg = process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE || "Actor has a role that is configured to skip this workflow."; + reasons.push({ + check: "Skip-roles check", + message: errorMsg, + result: "skip_roles", + remediation: "Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.", + }); + } + + // Skip-bots check (check_skip_bots step) + const skipBotsOk = process.env.GH_AW_SKIP_BOTS_OK; + if (skipBotsOk === "false") { + const errorMsg = process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE || "Actor is in the skip-bots list for this workflow."; + reasons.push({ + check: "Skip-bots check", + message: errorMsg, + result: "skip_bots", + remediation: "Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.", + }); + } + + // Command-position check (check_command_position step) + const commandPositionOk = process.env.GH_AW_COMMAND_POSITION_OK; + if (commandPositionOk === "false") { + reasons.push({ + check: "Command check", + message: "The required trigger command was not found in the expected position.", + result: "command_not_found", + remediation: "Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.", + }); + } + + return reasons; +} + +/** + * Returns a remediation hint tailored to the membership check result code. + * + * @param {string} result - The result code from check_membership.cjs + * @returns {string} + */ +function buildMembershipRemediation(result) { + switch (result) { + case "insufficient_permissions": + return ( + "The actor does not have the required repository permission. " + + "To allow a bot or GitHub App, add it to `on.bots:` in the workflow frontmatter. " + + "To change the required human-actor roles, update `on.roles:` in the workflow frontmatter." + ); + case "bot_not_active": + return "The bot is in the allowed list but is not installed or active on this repository. Install the GitHub App and try again."; + case "api_error": + return "The permission check failed with a GitHub API error. Check the pre_activation job log for details."; + case "config_error": + return "The workflow has a permission configuration error. Contact the repository administrator."; + default: + return "To allow a bot or GitHub App actor, add it to `on.bots:` in the workflow frontmatter. " + "To change the required roles for human actors, update `on.roles:` in the workflow frontmatter."; + } +} + +/** + * Writes the skip reasons to the GitHub Actions job summary. + * + * @param {SkipReason[]} reasons + */ +async function writeSkipSummary(reasons) { + const lines = []; + lines.push("## ⏭️ Workflow Activation Skipped\n"); + lines.push("This workflow run was not activated because one or more pre-activation checks denied execution.\n"); + + for (const reason of reasons) { + lines.push(`### ${reason.check}`); + lines.push(`> ${reason.message}\n`); + lines.push(`**Remediation:** ${reason.remediation}\n`); + } + + lines.push("---"); + lines.push("_This summary is generated by [gh-aw](https://github.com/github/gh-aw). See the `pre_activation` job log for full details._"); + + await core.summary.addRaw(lines.join("\n")).write(); + core.info("📝 Skip reason written to job summary."); +} + +module.exports = { main, collectSkipReasons, buildMembershipRemediation }; diff --git a/actions/setup/js/report_pre_activation_skip.test.cjs b/actions/setup/js/report_pre_activation_skip.test.cjs new file mode 100644 index 00000000000..fa1911b06c4 --- /dev/null +++ b/actions/setup/js/report_pre_activation_skip.test.cjs @@ -0,0 +1,261 @@ +import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; + +describe("report_pre_activation_skip.cjs", () => { + let mockCore; + + beforeEach(() => { + mockCore = { + info: vi.fn(), + warning: vi.fn(), + error: vi.fn(), + setFailed: vi.fn(), + setOutput: vi.fn(), + summary: { + addRaw: vi.fn().mockReturnThis(), + write: vi.fn().mockResolvedValue(undefined), + }, + }; + + global.core = mockCore; + + // Clear all relevant env vars + const vars = [ + "GH_AW_IS_TEAM_MEMBER", + "GH_AW_MEMBERSHIP_RESULT", + "GH_AW_MEMBERSHIP_ERROR_MESSAGE", + "GH_AW_STOP_TIME_OK", + "GH_AW_RATE_LIMIT_OK", + "GH_AW_SKIP_CHECK_OK", + "GH_AW_SKIP_NO_MATCH_OK", + "GH_AW_SKIP_IF_CHECK_FAILING_OK", + "GH_AW_SKIP_ROLES_OK", + "GH_AW_SKIP_ROLES_ERROR_MESSAGE", + "GH_AW_SKIP_BOTS_OK", + "GH_AW_SKIP_BOTS_ERROR_MESSAGE", + "GH_AW_COMMAND_POSITION_OK", + ]; + for (const v of vars) { + delete process.env[v]; + } + + vi.resetModules(); + }); + + afterEach(() => { + vi.clearAllMocks(); + delete global.core; + }); + + // ---- main() ---- + + it("should not write summary when all checks pass", async () => { + process.env.GH_AW_IS_TEAM_MEMBER = "true"; + process.env.GH_AW_STOP_TIME_OK = "true"; + process.env.GH_AW_RATE_LIMIT_OK = "true"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + expect(mockCore.summary.addRaw).not.toHaveBeenCalled(); + expect(mockCore.summary.write).not.toHaveBeenCalled(); + expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("All pre-activation checks passed")); + }); + + it("should not write summary when no check env vars are set (checks not configured)", async () => { + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + expect(mockCore.summary.addRaw).not.toHaveBeenCalled(); + }); + + it("should write summary when membership check fails", async () => { + process.env.GH_AW_IS_TEAM_MEMBER = "false"; + process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions"; + process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Access denied: User 'prd-to-prod-pipeline[bot]' is not authorized."; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1); + expect(mockCore.summary.write).toHaveBeenCalledTimes(1); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("⏭️ Workflow Activation Skipped"); + expect(summaryText).toContain("Role / bot check"); + expect(summaryText).toContain("prd-to-prod-pipeline[bot]"); + expect(summaryText).toContain("on.bots:"); + expect(summaryText).toContain("on.roles:"); + }); + + it("should write summary when stop-time check fails", async () => { + process.env.GH_AW_STOP_TIME_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1); + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Stop-time limit"); + expect(summaryText).toContain("on.stop-time:"); + }); + + it("should write summary when rate-limit check fails", async () => { + process.env.GH_AW_RATE_LIMIT_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Rate-limit check"); + expect(summaryText).toContain("on.rate-limit:"); + }); + + it("should write summary when skip-if-match check fails", async () => { + process.env.GH_AW_SKIP_CHECK_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Skip-if-match check"); + expect(summaryText).toContain("on.skip-if-match:"); + }); + + it("should write summary when skip-if-no-match check fails", async () => { + process.env.GH_AW_SKIP_NO_MATCH_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Skip-if-no-match check"); + expect(summaryText).toContain("on.skip-if-no-match:"); + }); + + it("should write summary when skip-if-check-failing check fails", async () => { + process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Skip-if-check-failing"); + expect(summaryText).toContain("on.skip-if-check-failing:"); + }); + + it("should write summary when skip-roles check fails with error message", async () => { + process.env.GH_AW_SKIP_ROLES_OK = "false"; + process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE = "Workflow skipped: User 'admin-user' has role 'admin'"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Skip-roles check"); + expect(summaryText).toContain("admin-user"); + expect(summaryText).toContain("on.skip-roles:"); + }); + + it("should write summary when skip-bots check fails with error message", async () => { + process.env.GH_AW_SKIP_BOTS_OK = "false"; + process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE = "Workflow skipped: User 'renovate[bot]' is in skip-bots"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Skip-bots check"); + expect(summaryText).toContain("renovate[bot]"); + expect(summaryText).toContain("on.skip-bots:"); + }); + + it("should write summary when command-position check fails", async () => { + process.env.GH_AW_COMMAND_POSITION_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Command check"); + expect(summaryText).toContain("on.command:"); + }); + + it("should write summary with multiple failures", async () => { + process.env.GH_AW_IS_TEAM_MEMBER = "false"; + process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions"; + process.env.GH_AW_STOP_TIME_OK = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("Role / bot check"); + expect(summaryText).toContain("Stop-time limit"); + }); + + it("should include a link to gh-aw in the summary footer", async () => { + process.env.GH_AW_IS_TEAM_MEMBER = "false"; + + const { main } = await import("./report_pre_activation_skip.cjs"); + await main(); + + const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; + expect(summaryText).toContain("gh-aw"); + expect(summaryText).toContain("pre_activation"); + }); + + // ---- collectSkipReasons() ---- + + it("should return empty array when no checks failed", async () => { + const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs"); + const reasons = collectSkipReasons(); + expect(reasons).toHaveLength(0); + }); + + it("should return one reason when membership check fails", async () => { + process.env.GH_AW_IS_TEAM_MEMBER = "false"; + process.env.GH_AW_MEMBERSHIP_RESULT = "bot_not_active"; + process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Bot is not active"; + + const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs"); + const reasons = collectSkipReasons(); + + expect(reasons).toHaveLength(1); + expect(reasons[0].check).toBe("Role / bot check"); + expect(reasons[0].result).toBe("bot_not_active"); + expect(reasons[0].message).toBe("Bot is not active"); + }); + + // ---- buildMembershipRemediation() ---- + + it("should return insufficient_permissions remediation mentioning on.bots and on.roles", async () => { + const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); + const hint = buildMembershipRemediation("insufficient_permissions"); + expect(hint).toContain("on.bots:"); + expect(hint).toContain("on.roles:"); + }); + + it("should return bot_not_active remediation about GitHub App installation", async () => { + const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); + const hint = buildMembershipRemediation("bot_not_active"); + expect(hint).toContain("Install the GitHub App"); + }); + + it("should return api_error remediation mentioning the job log", async () => { + const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); + const hint = buildMembershipRemediation("api_error"); + expect(hint).toContain("pre_activation"); + }); + + it("should return config_error remediation mentioning the administrator", async () => { + const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); + const hint = buildMembershipRemediation("config_error"); + expect(hint).toContain("administrator"); + }); + + it("should return default remediation for unknown result codes", async () => { + const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); + const hint = buildMembershipRemediation("unknown_result"); + expect(hint).toContain("on.bots:"); + }); +}); diff --git a/pkg/constants/job_constants.go b/pkg/constants/job_constants.go index 352aaa2da72..7d46e88be7e 100644 --- a/pkg/constants/job_constants.go +++ b/pkg/constants/job_constants.go @@ -159,6 +159,10 @@ const CheckSkipIfCheckFailingStepID StepID = "check_skip_if_check_failing" // emitted in the pre-activation job when on.github-app is configured alongside skip-if checks. const PreActivationAppTokenStepID StepID = "pre-activation-app-token" +// ReportSkipReasonStepID is the step ID for the report-skip-reason step in the pre-activation job. +// This step runs with if: always() and writes skip reasons to the job summary when activation is denied. +const ReportSkipReasonStepID StepID = "report-skip-reason" + // ParseMCPGatewayStepID is the step ID for the MCP gateway log parsing step in the agent job. // Its effective_tokens output is exposed as an agent job output so that the safe_outputs job // can pass the value as GH_AW_EFFECTIVE_TOKENS to the footer template renderer. diff --git a/pkg/workflow/compiler_pre_activation_job.go b/pkg/workflow/compiler_pre_activation_job.go index 80d1cf8fce9..b17527d6291 100644 --- a/pkg/workflow/compiler_pre_activation_job.go +++ b/pkg/workflow/compiler_pre_activation_job.go @@ -421,6 +421,13 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec jobIfCondition = data.If } + // Add report-skip-reason step to surface denial reasons in the job summary when activation + // is denied. Only added when there are actual blocking conditions (not for on.steps-only + // pre-activation where activated is unconditionally true). + if len(conditions) > 0 { + steps = append(steps, c.generateReportSkipStep(needsPermissionCheck, data)) + } + // In script mode, explicitly add a cleanup step (mirrors post.js in dev/release/action mode). if c.actionMode.IsScript() { steps = append(steps, c.generateScriptModeCleanupStep()) @@ -439,6 +446,82 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec return job, nil } +// generateReportSkipStep generates the "Report skip reason" step for the pre-activation job. +// The step runs with if: always() and writes skip reasons to the GitHub Actions job summary +// when one or more pre-activation checks deny activation, so operators can see the denial +// reason directly from the PR / workflow run surface without opening raw job logs. +// +// Only env vars for checks that are actually configured are emitted, keeping the YAML minimal +// and avoiding actionlint warnings about references to unconfigured step outputs. +func (c *Compiler) generateReportSkipStep(needsPermissionCheck bool, data *WorkflowData) string { + var step strings.Builder + + step.WriteString(" - name: Report skip reason\n") + step.WriteString(fmt.Sprintf(" id: %s\n", constants.ReportSkipReasonStepID)) + step.WriteString(" if: always()\n") + step.WriteString(fmt.Sprintf(" uses: %s\n", GetActionPin("actions/github-script"))) + step.WriteString(" env:\n") + + if needsPermissionCheck { + step.WriteString(fmt.Sprintf(" GH_AW_IS_TEAM_MEMBER: ${{ steps.%s.outputs.%s }}\n", + constants.CheckMembershipStepID, constants.IsTeamMemberOutput)) + step.WriteString(fmt.Sprintf(" GH_AW_MEMBERSHIP_RESULT: ${{ steps.%s.outputs.result }}\n", + constants.CheckMembershipStepID)) + step.WriteString(fmt.Sprintf(" GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n", + constants.CheckMembershipStepID)) + } + + if data.StopTime != "" { + step.WriteString(fmt.Sprintf(" GH_AW_STOP_TIME_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckStopTimeStepID, constants.StopTimeOkOutput)) + } + + if data.RateLimit != nil { + step.WriteString(fmt.Sprintf(" GH_AW_RATE_LIMIT_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckRateLimitStepID, constants.RateLimitOkOutput)) + } + + if data.SkipIfMatch != nil { + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_CHECK_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckSkipIfMatchStepID, constants.SkipCheckOkOutput)) + } + + if data.SkipIfNoMatch != nil { + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_NO_MATCH_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckSkipIfNoMatchStepID, constants.SkipNoMatchCheckOkOutput)) + } + + if data.SkipIfCheckFailing != nil { + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckSkipIfCheckFailingStepID, constants.SkipIfCheckFailingOkOutput)) + } + + if len(data.SkipRoles) > 0 { + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_ROLES_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckSkipRolesStepID, constants.SkipRolesOkOutput)) + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n", + constants.CheckSkipRolesStepID)) + } + + if len(data.SkipBots) > 0 { + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_BOTS_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckSkipBotsStepID, constants.SkipBotsOkOutput)) + step.WriteString(fmt.Sprintf(" GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n", + constants.CheckSkipBotsStepID)) + } + + if len(data.Command) > 0 { + step.WriteString(fmt.Sprintf(" GH_AW_COMMAND_POSITION_OK: ${{ steps.%s.outputs.%s }}\n", + constants.CheckCommandPositionStepID, constants.CommandPositionOkOutput)) + } + + step.WriteString(" with:\n") + step.WriteString(" script: |\n") + step.WriteString(generateGitHubScriptWithRequire("report_pre_activation_skip.cjs")) + + return step.String() +} + // extractPreActivationCustomFields extracts custom steps and outputs from jobs.pre-activation field in frontmatter. // It validates that only steps and outputs fields are present, and errors on any other fields. // If both jobs.pre-activation and jobs.pre_activation are defined, imports from both. diff --git a/pkg/workflow/report_skip_reason_test.go b/pkg/workflow/report_skip_reason_test.go new file mode 100644 index 00000000000..543377eb390 --- /dev/null +++ b/pkg/workflow/report_skip_reason_test.go @@ -0,0 +1,193 @@ +//go:build !integration + +package workflow + +import ( + "os" + "path/filepath" + "testing" + + "github.com/github/gh-aw/pkg/stringutil" + "github.com/github/gh-aw/pkg/testutil" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// TestReportSkipReasonStep tests that the report-skip-reason step is generated correctly +// in the pre-activation job whenever blocking conditions are present, so that operators +// can see the denial reason from the PR / workflow-run surface without opening raw logs. +func TestReportSkipReasonStep(t *testing.T) { + tmpDir := testutil.TempDir(t, "report-skip-reason-test") + compiler := NewCompiler() + + t.Run("report_skip_reason_present_with_membership_check", func(t *testing.T) { + workflowContent := `--- +on: + pull_request: + types: [opened] + roles: [admin, maintainer, write] +engine: copilot +--- + +# PR Review Workflow + +Review pull requests. +` + workflowFile := filepath.Join(tmpDir, "membership-workflow.md") + err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) + require.NoError(t, err, "Failed to write workflow file") + + err = compiler.CompileWorkflow(workflowFile) + require.NoError(t, err, "Compilation failed") + + lockFile := stringutil.MarkdownToLockFile(workflowFile) + lockContent, err := os.ReadFile(lockFile) + require.NoError(t, err, "Failed to read lock file") + + lockContentStr := string(lockContent) + + // Verify the report-skip-reason step is present + assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") + assert.Contains(t, lockContentStr, "Report skip reason", "Expected Report skip reason step name") + + // Verify the step has always() condition + assert.Contains(t, lockContentStr, "if: always()", "Expected always() condition on report-skip-reason step") + + // Verify membership check env vars are passed + assert.Contains(t, lockContentStr, "GH_AW_IS_TEAM_MEMBER:", "Expected GH_AW_IS_TEAM_MEMBER env var") + assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_RESULT:", "Expected GH_AW_MEMBERSHIP_RESULT env var") + assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_ERROR_MESSAGE:", "Expected GH_AW_MEMBERSHIP_ERROR_MESSAGE env var") + + // Verify the script calls report_pre_activation_skip.cjs + assert.Contains(t, lockContentStr, "report_pre_activation_skip.cjs", "Expected report_pre_activation_skip.cjs in script") + }) + + t.Run("report_skip_reason_present_with_stop_time", func(t *testing.T) { + workflowContent := `--- +on: + workflow_dispatch: null + stop-after: "+48h" + roles: [admin, maintainer] +engine: copilot +--- + +# Stop-Time Workflow + +This workflow has a stop-after configuration. +` + workflowFile := filepath.Join(tmpDir, "stop-time-workflow.md") + err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) + require.NoError(t, err, "Failed to write workflow file") + + err = compiler.CompileWorkflow(workflowFile) + require.NoError(t, err, "Compilation failed") + + lockFile := stringutil.MarkdownToLockFile(workflowFile) + lockContent, err := os.ReadFile(lockFile) + require.NoError(t, err, "Failed to read lock file") + + lockContentStr := string(lockContent) + + assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") + assert.Contains(t, lockContentStr, "GH_AW_STOP_TIME_OK:", "Expected GH_AW_STOP_TIME_OK env var") + }) + + t.Run("report_skip_reason_present_with_skip_bots", func(t *testing.T) { + workflowContent := `--- +on: + issues: + types: [opened] + skip-bots: [renovate, dependabot] +engine: copilot +--- + +# Skip-Bots Workflow + +This workflow skips bot actors. +` + workflowFile := filepath.Join(tmpDir, "skip-bots-workflow.md") + err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) + require.NoError(t, err, "Failed to write workflow file") + + err = compiler.CompileWorkflow(workflowFile) + require.NoError(t, err, "Compilation failed") + + lockFile := stringutil.MarkdownToLockFile(workflowFile) + lockContent, err := os.ReadFile(lockFile) + require.NoError(t, err, "Failed to read lock file") + + lockContentStr := string(lockContent) + + assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") + assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_OK:", "Expected GH_AW_SKIP_BOTS_OK env var") + assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_ERROR_MESSAGE:", "Expected GH_AW_SKIP_BOTS_ERROR_MESSAGE env var") + }) + + t.Run("report_skip_reason_present_with_skip_roles", func(t *testing.T) { + workflowContent := `--- +on: + pull_request: + types: [opened] + skip-roles: [admin] +engine: copilot +--- + +# Skip-Roles Workflow + +This workflow skips admin actors. +` + workflowFile := filepath.Join(tmpDir, "skip-roles-workflow.md") + err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) + require.NoError(t, err, "Failed to write workflow file") + + err = compiler.CompileWorkflow(workflowFile) + require.NoError(t, err, "Compilation failed") + + lockFile := stringutil.MarkdownToLockFile(workflowFile) + lockContent, err := os.ReadFile(lockFile) + require.NoError(t, err, "Failed to read lock file") + + lockContentStr := string(lockContent) + + assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") + assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_OK:", "Expected GH_AW_SKIP_ROLES_OK env var") + assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_ERROR_MESSAGE:", "Expected GH_AW_SKIP_ROLES_ERROR_MESSAGE env var") + }) + + t.Run("report_skip_reason_not_present_without_conditions", func(t *testing.T) { + // When activation is unconditionally true (roles: all + only on.steps), there are no + // blocking conditions so the report-skip-reason step should NOT be generated. + workflowContent := `--- +on: + pull_request: + types: [opened] + roles: all + steps: + - name: Custom gate + id: custom_gate + run: echo "gate_result=ok" >> $GITHUB_OUTPUT +engine: copilot +if: needs.pre_activation.outputs.custom_gate_result == 'ok' +--- + +# On-Steps-Only Workflow + +Uses on.steps to gate activation with no blocking conditions. +` + workflowFile := filepath.Join(tmpDir, "on-steps-only-workflow.md") + err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) + require.NoError(t, err, "Failed to write workflow file") + + err = compiler.CompileWorkflow(workflowFile) + require.NoError(t, err, "Compilation failed") + + lockFile := stringutil.MarkdownToLockFile(workflowFile) + lockContent, err := os.ReadFile(lockFile) + require.NoError(t, err, "Failed to read lock file") + + lockContentStr := string(lockContent) + + // No blocking conditions → no report-skip-reason step + assert.NotContains(t, lockContentStr, "report-skip-reason", "report-skip-reason step should not appear for on.steps-only workflows") + }) +} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden index 532e57b74dc..2595a853cbb 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden @@ -553,4 +553,18 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden index 5ef0558e180..c4f6dd21af7 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden @@ -554,4 +554,18 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); + - name: Report skip reason + id: report-skip-reason + if: always() + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 + env: + GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} + GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} + GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} + with: + script: | + const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); + setupGlobals(core, github, context, exec, io); + const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); + await main(); From 1c92d23755164d6052c65ea13702cd126d103930 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 01:32:25 +0000 Subject: [PATCH 3/6] Integrate skip reason summary into existing check scripts instead of a separate step Agent-Logs-Url: https://github.com/github/gh-aw/sessions/483d2eeb-3b22-4f64-883c-a0c08a888fc0 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/ace-editor.lock.yml | 15 - .../agent-performance-analyzer.lock.yml | 14 - .../workflows/agent-persona-explorer.lock.yml | 14 - .github/workflows/ai-moderator.lock.yml | 16 -- .github/workflows/archie.lock.yml | 15 - .github/workflows/auto-triage-issues.lock.yml | 15 - .github/workflows/brave.lock.yml | 15 - .../breaking-change-checker.lock.yml | 15 - .github/workflows/changeset.lock.yml | 14 - .github/workflows/ci-doctor.lock.yml | 14 - .github/workflows/cloclo.lock.yml | 15 - .../workflows/code-scanning-fixer.lock.yml | 15 - .github/workflows/code-simplifier.lock.yml | 15 - .github/workflows/craft.lock.yml | 15 - .../workflows/daily-cli-performance.lock.yml | 14 - .github/workflows/daily-file-diet.lock.yml | 15 - .../workflows/daily-issues-report.lock.yml | 14 - .../daily-observability-report.lock.yml | 14 - .../daily-rendering-scripts-verifier.lock.yml | 15 - .../daily-safe-output-optimizer.lock.yml | 15 - .github/workflows/daily-team-status.lock.yml | 12 - .../daily-testify-uber-super-expert.lock.yml | 15 - .github/workflows/dead-code-remover.lock.yml | 15 - .github/workflows/dependabot-burner.lock.yml | 14 - .github/workflows/dev-hawk.lock.yml | 14 - .github/workflows/dev.lock.yml | 14 - .github/workflows/firewall-escape.lock.yml | 14 - .github/workflows/grumpy-reviewer.lock.yml | 15 - .github/workflows/issue-monster.lock.yml | 17 -- .github/workflows/mergefest.lock.yml | 15 - .github/workflows/metrics-collector.lock.yml | 14 - .github/workflows/pdf-summary.lock.yml | 15 - .github/workflows/plan.lock.yml | 15 - .github/workflows/poem-bot.lock.yml | 15 - .../workflows/pr-nitpick-reviewer.lock.yml | 15 - .github/workflows/q.lock.yml | 15 - .github/workflows/refiner.lock.yml | 14 - .github/workflows/release.lock.yml | 14 - .github/workflows/scout.lock.yml | 15 - .github/workflows/security-review.lock.yml | 15 - .../workflows/slide-deck-maintainer.lock.yml | 15 - .../workflows/smoke-agent-all-merged.lock.yml | 14 - .../workflows/smoke-agent-all-none.lock.yml | 14 - .../smoke-agent-public-approved.lock.yml | 14 - .../smoke-agent-public-none.lock.yml | 14 - .../smoke-agent-scoped-approved.lock.yml | 14 - .../workflows/smoke-call-workflow.lock.yml | 14 - .github/workflows/smoke-claude.lock.yml | 14 - .github/workflows/smoke-codex.lock.yml | 14 - .github/workflows/smoke-copilot-arm.lock.yml | 14 - .github/workflows/smoke-copilot.lock.yml | 14 - .../smoke-create-cross-repo-pr.lock.yml | 14 - .github/workflows/smoke-gemini.lock.yml | 14 - .github/workflows/smoke-multi-pr.lock.yml | 14 - .github/workflows/smoke-project.lock.yml | 14 - .../workflows/smoke-service-ports.lock.yml | 14 - .github/workflows/smoke-temporary-id.lock.yml | 14 - .github/workflows/smoke-test-tools.lock.yml | 14 - .../smoke-update-cross-repo-pr.lock.yml | 14 - .../smoke-workflow-call-with-inputs.lock.yml | 14 - .../workflows/smoke-workflow-call.lock.yml | 14 - .github/workflows/tidy.lock.yml | 15 - .../workflows/ubuntu-image-analyzer.lock.yml | 15 - .github/workflows/unbloat-docs.lock.yml | 15 - .github/workflows/update-astro.lock.yml | 15 - .github/workflows/workflow-generator.lock.yml | 15 - .../workflow-health-manager.lock.yml | 14 - actions/setup/js/check_command_position.cjs | 11 + actions/setup/js/check_membership.cjs | 30 +- actions/setup/js/check_skip_bots.cjs | 14 +- actions/setup/js/check_skip_bots.test.cjs | 4 + .../setup/js/check_skip_if_check_failing.cjs | 11 + .../js/check_skip_if_check_failing.test.cjs | 4 + actions/setup/js/check_skip_if_match.cjs | 11 + actions/setup/js/check_skip_if_no_match.cjs | 11 + .../setup/js/check_skip_if_no_match.test.cjs | 4 + actions/setup/js/check_skip_roles.cjs | 14 +- actions/setup/js/check_stop_time.cjs | 11 + .../setup/js/report_pre_activation_skip.cjs | 207 -------------- .../js/report_pre_activation_skip.test.cjs | 261 ------------------ pkg/constants/job_constants.go | 4 - pkg/workflow/compiler_pre_activation_job.go | 81 ------ pkg/workflow/report_skip_reason_test.go | 193 ------------- .../basic-copilot.golden | 14 - .../with-imports.golden | 14 - 85 files changed, 116 insertions(+), 1753 deletions(-) delete mode 100644 actions/setup/js/report_pre_activation_skip.cjs delete mode 100644 actions/setup/js/report_pre_activation_skip.test.cjs delete mode 100644 pkg/workflow/report_skip_reason_test.go diff --git a/.github/workflows/ace-editor.lock.yml b/.github/workflows/ace-editor.lock.yml index 630f9160c75..0b7c12bf770 100644 --- a/.github/workflows/ace-editor.lock.yml +++ b/.github/workflows/ace-editor.lock.yml @@ -665,19 +665,4 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml index d1fb38a8f3a..80bdddd9b15 100644 --- a/.github/workflows/agent-performance-analyzer.lock.yml +++ b/.github/workflows/agent-performance-analyzer.lock.yml @@ -1246,20 +1246,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/.github/workflows/agent-persona-explorer.lock.yml b/.github/workflows/agent-persona-explorer.lock.yml index 5368804febb..bc83b1d663b 100644 --- a/.github/workflows/agent-persona-explorer.lock.yml +++ b/.github/workflows/agent-persona-explorer.lock.yml @@ -1195,20 +1195,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/ai-moderator.lock.yml b/.github/workflows/ai-moderator.lock.yml index e91a826dddf..dabcbc9fe78 100644 --- a/.github/workflows/ai-moderator.lock.yml +++ b/.github/workflows/ai-moderator.lock.yml @@ -1030,22 +1030,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_bots.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }} - GH_AW_SKIP_ROLES_OK: ${{ steps.check_skip_roles.outputs.skip_roles_ok }} - GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.check_skip_roles.outputs.error_message }} - GH_AW_SKIP_BOTS_OK: ${{ steps.check_skip_bots.outputs.skip_bots_ok }} - GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.check_skip_bots.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml index c21ab76f97c..bb98e437372 100644 --- a/.github/workflows/archie.lock.yml +++ b/.github/workflows/archie.lock.yml @@ -1224,21 +1224,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/auto-triage-issues.lock.yml b/.github/workflows/auto-triage-issues.lock.yml index f5acd578f72..c6570b914e2 100644 --- a/.github/workflows/auto-triage-issues.lock.yml +++ b/.github/workflows/auto-triage-issues.lock.yml @@ -1143,21 +1143,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index 93e55db7ff0..362dcda6e9b 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -1171,21 +1171,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml index 82a0f98418d..e9695536987 100644 --- a/.github/workflows/breaking-change-checker.lock.yml +++ b/.github/workflows/breaking-change-checker.lock.yml @@ -1123,21 +1123,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml index 3d9a5e8ddf3..62395e3ca7d 100644 --- a/.github/workflows/changeset.lock.yml +++ b/.github/workflows/changeset.lock.yml @@ -1022,20 +1022,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index b0aee2f768c..ecf2549847a 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -1333,20 +1333,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml index bfa818081bd..680bd2e1b78 100644 --- a/.github/workflows/cloclo.lock.yml +++ b/.github/workflows/cloclo.lock.yml @@ -1575,21 +1575,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml index 83df666f586..7e3fff7253c 100644 --- a/.github/workflows/code-scanning-fixer.lock.yml +++ b/.github/workflows/code-scanning-fixer.lock.yml @@ -1182,21 +1182,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml index 1f38a4a50fe..392624d9f86 100644 --- a/.github/workflows/code-simplifier.lock.yml +++ b/.github/workflows/code-simplifier.lock.yml @@ -1114,21 +1114,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml index 1976aa20622..942245a48ee 100644 --- a/.github/workflows/craft.lock.yml +++ b/.github/workflows/craft.lock.yml @@ -1177,21 +1177,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml index 69eae7f8012..e929b0954e3 100644 --- a/.github/workflows/daily-cli-performance.lock.yml +++ b/.github/workflows/daily-cli-performance.lock.yml @@ -1364,20 +1364,6 @@ jobs: } core.info(`has_changes=${hasChanges}`); core.setOutput('has_changes', hasChanges ? 'true' : 'false'); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml index feec34e8975..6ea605d0fe7 100644 --- a/.github/workflows/daily-file-diet.lock.yml +++ b/.github/workflows/daily-file-diet.lock.yml @@ -1209,21 +1209,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-issues-report.lock.yml b/.github/workflows/daily-issues-report.lock.yml index fbe71a530ef..9e57bbaf849 100644 --- a/.github/workflows/daily-issues-report.lock.yml +++ b/.github/workflows/daily-issues-report.lock.yml @@ -1237,20 +1237,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-observability-report.lock.yml b/.github/workflows/daily-observability-report.lock.yml index d1dec8cbb75..82d6b4787a7 100644 --- a/.github/workflows/daily-observability-report.lock.yml +++ b/.github/workflows/daily-observability-report.lock.yml @@ -1207,20 +1207,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml index 24db89ddb27..ee64722a9c6 100644 --- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml +++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml @@ -1351,21 +1351,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml index c32043f22b6..fc2cc3d77e2 100644 --- a/.github/workflows/daily-safe-output-optimizer.lock.yml +++ b/.github/workflows/daily-safe-output-optimizer.lock.yml @@ -1333,21 +1333,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml index 3918919c58c..0db5f079d5a 100644 --- a/.github/workflows/daily-team-status.lock.yml +++ b/.github/workflows/daily-team-status.lock.yml @@ -1117,18 +1117,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_stop_time.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_STOP_TIME_OK: ${{ steps.check_stop_time.outputs.stop_time_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml index c5b07aa945b..3f651b55549 100644 --- a/.github/workflows/daily-testify-uber-super-expert.lock.yml +++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml @@ -1251,21 +1251,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/.github/workflows/dead-code-remover.lock.yml b/.github/workflows/dead-code-remover.lock.yml index 7d56e3c70a6..9759d38c63e 100644 --- a/.github/workflows/dead-code-remover.lock.yml +++ b/.github/workflows/dead-code-remover.lock.yml @@ -1155,21 +1155,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml index 87f09d5d05d..eaf1d28fb2c 100644 --- a/.github/workflows/dependabot-burner.lock.yml +++ b/.github/workflows/dependabot-burner.lock.yml @@ -1082,20 +1082,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml index f7158f532ce..f89534ba151 100644 --- a/.github/workflows/dev-hawk.lock.yml +++ b/.github/workflows/dev-hawk.lock.yml @@ -1183,20 +1183,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index dcea0d56ee9..d4e5ca891fd 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -1306,20 +1306,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/firewall-escape.lock.yml b/.github/workflows/firewall-escape.lock.yml index 9d963081b67..63879bfbe21 100644 --- a/.github/workflows/firewall-escape.lock.yml +++ b/.github/workflows/firewall-escape.lock.yml @@ -1209,20 +1209,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/.github/workflows/grumpy-reviewer.lock.yml b/.github/workflows/grumpy-reviewer.lock.yml index d9927e89dbc..6222c6831ca 100644 --- a/.github/workflows/grumpy-reviewer.lock.yml +++ b/.github/workflows/grumpy-reviewer.lock.yml @@ -1248,21 +1248,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml index 261bc809479..15cf5785e5f 100644 --- a/.github/workflows/issue-monster.lock.yml +++ b/.github/workflows/issue-monster.lock.yml @@ -1868,23 +1868,6 @@ jobs: core.setOutput('issue_list', ''); core.setOutput('has_issues', 'false'); } - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }} - GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.check_skip_if_check_failing.outputs.skip_if_check_failing_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml index 5385906cf43..ba8fa5e49ad 100644 --- a/.github/workflows/mergefest.lock.yml +++ b/.github/workflows/mergefest.lock.yml @@ -1190,21 +1190,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/metrics-collector.lock.yml b/.github/workflows/metrics-collector.lock.yml index 9e75bc66383..6f9c52d9f45 100644 --- a/.github/workflows/metrics-collector.lock.yml +++ b/.github/workflows/metrics-collector.lock.yml @@ -708,20 +708,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index b59a89ac4de..9fed2c74da7 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -1265,21 +1265,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index 9ccb2dfff12..f7fe52a6ef2 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -1192,21 +1192,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 787c59a5600..2ab55c9bed9 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -1554,21 +1554,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/pr-nitpick-reviewer.lock.yml b/.github/workflows/pr-nitpick-reviewer.lock.yml index 76605d950f5..9007284c234 100644 --- a/.github/workflows/pr-nitpick-reviewer.lock.yml +++ b/.github/workflows/pr-nitpick-reviewer.lock.yml @@ -1262,21 +1262,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index 093263dbbd0..8dedfe725d8 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -1426,21 +1426,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml index e36e5447450..a2e1c5a6588 100644 --- a/.github/workflows/refiner.lock.yml +++ b/.github/workflows/refiner.lock.yml @@ -1145,20 +1145,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/release.lock.yml b/.github/workflows/release.lock.yml index f4bc0f66b07..a216e5b4a86 100644 --- a/.github/workflows/release.lock.yml +++ b/.github/workflows/release.lock.yml @@ -1244,20 +1244,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_tag: needs: diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index cbc5becba5c..4fbfd2e9d0e 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -1460,21 +1460,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/security-review.lock.yml b/.github/workflows/security-review.lock.yml index d59bffb3b3d..569476395db 100644 --- a/.github/workflows/security-review.lock.yml +++ b/.github/workflows/security-review.lock.yml @@ -1309,21 +1309,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml index a9cd29acb08..2077d9832cf 100644 --- a/.github/workflows/slide-deck-maintainer.lock.yml +++ b/.github/workflows/slide-deck-maintainer.lock.yml @@ -1229,21 +1229,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-all-merged.lock.yml b/.github/workflows/smoke-agent-all-merged.lock.yml index 927e9083ff9..7e3f36fbfac 100644 --- a/.github/workflows/smoke-agent-all-merged.lock.yml +++ b/.github/workflows/smoke-agent-all-merged.lock.yml @@ -1157,20 +1157,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-all-none.lock.yml b/.github/workflows/smoke-agent-all-none.lock.yml index 8e9f1753cc0..151a5e62986 100644 --- a/.github/workflows/smoke-agent-all-none.lock.yml +++ b/.github/workflows/smoke-agent-all-none.lock.yml @@ -1157,20 +1157,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-public-approved.lock.yml b/.github/workflows/smoke-agent-public-approved.lock.yml index 0d7051e3a22..31080c20a78 100644 --- a/.github/workflows/smoke-agent-public-approved.lock.yml +++ b/.github/workflows/smoke-agent-public-approved.lock.yml @@ -1190,20 +1190,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-public-none.lock.yml b/.github/workflows/smoke-agent-public-none.lock.yml index 2f77a301ee7..bcd34d3f38a 100644 --- a/.github/workflows/smoke-agent-public-none.lock.yml +++ b/.github/workflows/smoke-agent-public-none.lock.yml @@ -1157,20 +1157,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-agent-scoped-approved.lock.yml b/.github/workflows/smoke-agent-scoped-approved.lock.yml index 921485e5bc0..a79cdbd2473 100644 --- a/.github/workflows/smoke-agent-scoped-approved.lock.yml +++ b/.github/workflows/smoke-agent-scoped-approved.lock.yml @@ -1164,20 +1164,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-call-workflow.lock.yml b/.github/workflows/smoke-call-workflow.lock.yml index 9d99160f58b..8782b886e37 100644 --- a/.github/workflows/smoke-call-workflow.lock.yml +++ b/.github/workflows/smoke-call-workflow.lock.yml @@ -1130,20 +1130,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index 731e0138f27..b6eb329bc79 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -2787,20 +2787,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index a7cba19cc02..c71c051c9e2 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -1798,20 +1798,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml index e5f545e03cb..187fc9c6e2b 100644 --- a/.github/workflows/smoke-copilot-arm.lock.yml +++ b/.github/workflows/smoke-copilot-arm.lock.yml @@ -2100,20 +2100,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index c426980d750..e51a00e1d99 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -2150,20 +2150,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-create-cross-repo-pr.lock.yml b/.github/workflows/smoke-create-cross-repo-pr.lock.yml index dedcf22cccd..5a01ce2c721 100644 --- a/.github/workflows/smoke-create-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-create-cross-repo-pr.lock.yml @@ -1243,20 +1243,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml index 6c6081c5788..3984af1491f 100644 --- a/.github/workflows/smoke-gemini.lock.yml +++ b/.github/workflows/smoke-gemini.lock.yml @@ -1394,20 +1394,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml index 214ae14f38c..4df115196d9 100644 --- a/.github/workflows/smoke-multi-pr.lock.yml +++ b/.github/workflows/smoke-multi-pr.lock.yml @@ -1224,20 +1224,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml index d29845f3778..f15e2db61a2 100644 --- a/.github/workflows/smoke-project.lock.yml +++ b/.github/workflows/smoke-project.lock.yml @@ -1360,20 +1360,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-service-ports.lock.yml b/.github/workflows/smoke-service-ports.lock.yml index 232fb204930..65a60bf3772 100644 --- a/.github/workflows/smoke-service-ports.lock.yml +++ b/.github/workflows/smoke-service-ports.lock.yml @@ -1128,20 +1128,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml index 0a36b08697f..9244a29f04a 100644 --- a/.github/workflows/smoke-temporary-id.lock.yml +++ b/.github/workflows/smoke-temporary-id.lock.yml @@ -1207,20 +1207,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml index 41032eb12e7..2e7fa86810d 100644 --- a/.github/workflows/smoke-test-tools.lock.yml +++ b/.github/workflows/smoke-test-tools.lock.yml @@ -1173,20 +1173,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-update-cross-repo-pr.lock.yml b/.github/workflows/smoke-update-cross-repo-pr.lock.yml index c7a7108272d..0554980f743 100644 --- a/.github/workflows/smoke-update-cross-repo-pr.lock.yml +++ b/.github/workflows/smoke-update-cross-repo-pr.lock.yml @@ -1269,20 +1269,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml index bb7ecb82654..d917e7a3e51 100644 --- a/.github/workflows/smoke-workflow-call-with-inputs.lock.yml +++ b/.github/workflows/smoke-workflow-call-with-inputs.lock.yml @@ -1143,20 +1143,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml index 782e7a3a6bf..7577b542e74 100644 --- a/.github/workflows/smoke-workflow-call.lock.yml +++ b/.github/workflows/smoke-workflow-call.lock.yml @@ -1134,20 +1134,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index bf2a4f5d8c9..7ce28142b40 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -1245,21 +1245,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml index 303ce4387e5..b27e51ce437 100644 --- a/.github/workflows/ubuntu-image-analyzer.lock.yml +++ b/.github/workflows/ubuntu-image-analyzer.lock.yml @@ -1138,21 +1138,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_CHECK_OK: ${{ steps.check_skip_if_match.outputs.skip_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index bc35c0b79ba..744e29f31c8 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -1589,21 +1589,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_command_position.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_COMMAND_POSITION_OK: ${{ steps.check_command_position.outputs.command_position_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/update-astro.lock.yml b/.github/workflows/update-astro.lock.yml index a817ce81a00..bf3bf3e85d9 100644 --- a/.github/workflows/update-astro.lock.yml +++ b/.github/workflows/update-astro.lock.yml @@ -1164,21 +1164,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_skip_if_no_match.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_SKIP_NO_MATCH_OK: ${{ steps.check_skip_if_no_match.outputs.skip_no_match_check_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/workflow-generator.lock.yml b/.github/workflows/workflow-generator.lock.yml index 6469486f90d..b672bc117d6 100644 --- a/.github/workflows/workflow-generator.lock.yml +++ b/.github/workflows/workflow-generator.lock.yml @@ -1183,21 +1183,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_rate_limit.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - GH_AW_RATE_LIMIT_OK: ${{ steps.check_rate_limit.outputs.rate_limit_ok }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); safe_outputs: needs: diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml index 12d0debcb90..957d78cc70b 100644 --- a/.github/workflows/workflow-health-manager.lock.yml +++ b/.github/workflows/workflow-health-manager.lock.yml @@ -1198,20 +1198,6 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); push_repo_memory: needs: diff --git a/actions/setup/js/check_command_position.cjs b/actions/setup/js/check_command_position.cjs index 5c8b6ef04a1..9808564194d 100644 --- a/actions/setup/js/check_command_position.cjs +++ b/actions/setup/js/check_command_position.cjs @@ -100,6 +100,17 @@ async function main() { core.warning(`⚠️ None of the commands [${expectedCommands}] matched the first word (found: '${firstWord}'). Workflow will be skipped.`); core.setOutput("command_position_ok", "false"); core.setOutput("matched_command", ""); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + `> The trigger comment did not start with a required command. Expected one of: ${expectedCommands}. Found: \`${firstWord}\`.\n`, + "**Remediation:** Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); } } catch (error) { core.setFailed(`${ERR_API}: ${getErrorMessage(error)}`); diff --git a/actions/setup/js/check_membership.cjs b/actions/setup/js/check_membership.cjs index 85427cf7082..e922f2c58fb 100644 --- a/actions/setup/js/check_membership.cjs +++ b/actions/setup/js/check_membership.cjs @@ -3,6 +3,17 @@ const { parseRequiredPermissions, parseAllowedBots, checkRepositoryPermission, checkBotStatus, isAllowedBot } = require("./check_permissions_utils.cjs"); +/** + * Writes a denial reason to the GitHub Actions job summary. + * + * @param {string} message - The denial message from the check + * @param {string} remediation - Remediation hint for the operator + */ +async function writeDenialSummary(message, remediation) { + const lines = ["## ⏭️ Workflow Activation Skipped\n", "> " + message + "\n", "**Remediation:** " + remediation + "\n", "---", "_See the `pre_activation` job log for full details._"]; + await core.summary.addRaw(lines.join("\n")).write(); +} + async function main() { const { eventName } = context; const actor = context.actor; @@ -46,6 +57,7 @@ async function main() { core.setOutput("is_team_member", "false"); core.setOutput("result", "config_error"); core.setOutput("error_message", "Configuration error: Required permissions not specified"); + await writeDenialSummary("Configuration error: Required permissions not specified.", "Contact the repository administrator to fix the workflow frontmatter configuration."); return; } @@ -76,11 +88,13 @@ async function main() { core.setOutput("user_permission", "bot"); return; } else if (botStatus.isBot && !botStatus.isActive) { + const errorMessage = `Access denied: Bot '${actor}' is not active/installed on this repository`; core.warning(`Bot '${actor}' is in the allowed list but not active/installed on ${owner}/${repo}`); core.setOutput("is_team_member", "false"); core.setOutput("result", "bot_not_active"); core.setOutput("user_permission", result.permission ?? "bot"); - core.setOutput("error_message", `Access denied: Bot '${actor}' is not active/installed on this repository`); + core.setOutput("error_message", errorMessage); + await writeDenialSummary(errorMessage, "The bot is in the allowed list but is not installed or active on this repository. Install the GitHub App and try again."); return; } else { core.info(`Actor '${actor}' is in allowed bots list but bot status check failed`); @@ -90,18 +104,20 @@ async function main() { // Not authorized by role or bot if (result.error) { + const errorMessage = `Repository permission check failed: ${result.error}`; core.setOutput("is_team_member", "false"); core.setOutput("result", "api_error"); - core.setOutput("error_message", `Repository permission check failed: ${result.error}`); + core.setOutput("error_message", errorMessage); + await writeDenialSummary(errorMessage, "The permission check failed with a GitHub API error. Check the `pre_activation` job log for details."); } else { + const errorMessage = + `Access denied: User '${actor}' is not authorized. Required permissions: ${requiredPermissions.join(", ")}. ` + + `To allow this user to run the workflow, add their role to the frontmatter. Example: roles: [${requiredPermissions.join(", ")}, ${result.permission}]`; core.setOutput("is_team_member", "false"); core.setOutput("result", "insufficient_permissions"); core.setOutput("user_permission", result.permission); - core.setOutput( - "error_message", - `Access denied: User '${actor}' is not authorized. Required permissions: ${requiredPermissions.join(", ")}. ` + - `To allow this user to run the workflow, add their role to the frontmatter. Example: roles: [${requiredPermissions.join(", ")}, ${result.permission}]` - ); + core.setOutput("error_message", errorMessage); + await writeDenialSummary(errorMessage, `To allow a bot or GitHub App actor, add it to \`on.bots:\` in the workflow frontmatter. ` + `To change the required roles for human actors, update \`on.roles:\` in the workflow frontmatter.`); } } } diff --git a/actions/setup/js/check_skip_bots.cjs b/actions/setup/js/check_skip_bots.cjs index 3dc528beb5c..875267d879e 100644 --- a/actions/setup/js/check_skip_bots.cjs +++ b/actions/setup/js/check_skip_bots.cjs @@ -48,10 +48,22 @@ async function main() { if (isSkipped) { // User is in skip-bots, skip the workflow + const errorMessage = `Workflow skipped: User '${actor}' is in skip-bots: [${skipBots.join(", ")}]`; core.info(`❌ User '${actor}' is in skip-bots [${skipBots.join(", ")}]. Workflow will be skipped.`); core.setOutput("skip_bots_ok", "false"); core.setOutput("result", "skipped"); - core.setOutput("error_message", `Workflow skipped: User '${actor}' is in skip-bots: [${skipBots.join(", ")}]`); + core.setOutput("error_message", errorMessage); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + "> " + errorMessage + "\n", + "**Remediation:** Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); } else { // User is NOT in skip-bots, allow workflow to proceed core.info(`✅ User '${actor}' is NOT in skip-bots [${skipBots.join(", ")}]. Workflow will proceed.`); diff --git a/actions/setup/js/check_skip_bots.test.cjs b/actions/setup/js/check_skip_bots.test.cjs index 765e07279f1..151392f5bd3 100644 --- a/actions/setup/js/check_skip_bots.test.cjs +++ b/actions/setup/js/check_skip_bots.test.cjs @@ -12,6 +12,10 @@ describe("check_skip_bots.cjs", () => { error: vi.fn(), setFailed: vi.fn(), setOutput: vi.fn(), + summary: { + addRaw: vi.fn().mockReturnThis(), + write: vi.fn().mockResolvedValue(undefined), + }, }; mockContext = { diff --git a/actions/setup/js/check_skip_if_check_failing.cjs b/actions/setup/js/check_skip_if_check_failing.cjs index fff1ebd93b7..12d0174b4e2 100644 --- a/actions/setup/js/check_skip_if_check_failing.cjs +++ b/actions/setup/js/check_skip_if_check_failing.cjs @@ -206,6 +206,17 @@ async function main() { const names = failingChecks.map(r => (r.status === "completed" ? `${r.name} (${r.conclusion})` : `${r.name} (${r.status})`)).join(", "); core.warning(`⚠️ Failing CI checks detected on "${ref}": ${names}. Workflow execution will be prevented by activation job.`); core.setOutput("skip_if_check_failing_ok", "false"); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + `> Failing CI checks detected on \`${ref}\`: ${names}.\n`, + "**Remediation:** Fix the failing check(s) referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); return; } diff --git a/actions/setup/js/check_skip_if_check_failing.test.cjs b/actions/setup/js/check_skip_if_check_failing.test.cjs index a1e8e303115..e60ca5fe0e7 100644 --- a/actions/setup/js/check_skip_if_check_failing.test.cjs +++ b/actions/setup/js/check_skip_if_check_failing.test.cjs @@ -12,6 +12,10 @@ describe("check_skip_if_check_failing.cjs", () => { error: vi.fn(), setFailed: vi.fn(), setOutput: vi.fn(), + summary: { + addRaw: vi.fn().mockReturnThis(), + write: vi.fn().mockResolvedValue(undefined), + }, }; mockGithub = { diff --git a/actions/setup/js/check_skip_if_match.cjs b/actions/setup/js/check_skip_if_match.cjs index 074605cfca7..fc633e6d8cb 100644 --- a/actions/setup/js/check_skip_if_match.cjs +++ b/actions/setup/js/check_skip_if_match.cjs @@ -42,6 +42,17 @@ async function main() { if (totalCount >= maxMatches) { core.warning(`🔍 Skip condition matched (${totalCount} items found, threshold: ${maxMatches}). Workflow execution will be prevented by activation job.`); core.setOutput("skip_check_ok", "false"); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + `> Skip-if-match query matched: ${totalCount} item(s) found (threshold: ${maxMatches}).\n`, + "**Remediation:** Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); return; } diff --git a/actions/setup/js/check_skip_if_no_match.cjs b/actions/setup/js/check_skip_if_no_match.cjs index 8d089068322..0fef0aee65b 100644 --- a/actions/setup/js/check_skip_if_no_match.cjs +++ b/actions/setup/js/check_skip_if_no_match.cjs @@ -42,6 +42,17 @@ async function main() { if (totalCount < minMatches) { core.warning(`🔍 Skip condition matched (${totalCount} items found, minimum required: ${minMatches}). Workflow execution will be prevented by activation job.`); core.setOutput("skip_no_match_check_ok", "false"); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + `> Skip-if-no-match query returned too few results: ${totalCount} item(s) found (minimum required: ${minMatches}).\n`, + "**Remediation:** Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); return; } diff --git a/actions/setup/js/check_skip_if_no_match.test.cjs b/actions/setup/js/check_skip_if_no_match.test.cjs index 8d89d7bfbe6..5642a48f17a 100644 --- a/actions/setup/js/check_skip_if_no_match.test.cjs +++ b/actions/setup/js/check_skip_if_no_match.test.cjs @@ -19,6 +19,10 @@ describe("check_skip_if_no_match", () => { warnings: [], errors: [], outputs: {}, + summary: { + addRaw: () => mockCore.summary, + write: async () => {}, + }, }; mockCore.info = msg => { diff --git a/actions/setup/js/check_skip_roles.cjs b/actions/setup/js/check_skip_roles.cjs index d62c8b2377a..42e0feaebb3 100644 --- a/actions/setup/js/check_skip_roles.cjs +++ b/actions/setup/js/check_skip_roles.cjs @@ -44,11 +44,23 @@ async function main() { if (result.authorized) { // User has one of the skip-roles, skip the workflow + const errorMessage = `Workflow skipped: User '${actor}' has role '${result.permission}' which is in skip-roles: [${skipRoles.join(", ")}]`; core.info(`❌ User '${actor}' has role '${result.permission}' which is in skip-roles [${skipRoles.join(", ")}]. Workflow will be skipped.`); core.setOutput("skip_roles_ok", "false"); core.setOutput("result", "skipped"); core.setOutput("user_permission", result.permission); - core.setOutput("error_message", `Workflow skipped: User '${actor}' has role '${result.permission}' which is in skip-roles: [${skipRoles.join(", ")}]`); + core.setOutput("error_message", errorMessage); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + "> " + errorMessage + "\n", + "**Remediation:** Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); } else { // User does NOT have any of the skip-roles, allow workflow to proceed core.info(`✅ User '${actor}' has role '${result.permission}' which is NOT in skip-roles [${skipRoles.join(", ")}]. Workflow will proceed.`); diff --git a/actions/setup/js/check_stop_time.cjs b/actions/setup/js/check_stop_time.cjs index 6addb4c2162..726c24f2b6e 100644 --- a/actions/setup/js/check_stop_time.cjs +++ b/actions/setup/js/check_stop_time.cjs @@ -33,6 +33,17 @@ async function main() { if (currentTime >= stopTimeDate) { core.warning(`⏰ Stop time reached. Workflow execution will be prevented by activation job.`); core.setOutput("stop_time_ok", "false"); + await core.summary + .addRaw( + [ + "## ⏭️ Workflow Activation Skipped\n", + `> Workflow '${workflowName}' has passed its configured stop-time (${stopTimeDate.toISOString()}).\n`, + "**Remediation:** Update or remove `on.stop-after:` in the workflow frontmatter to extend the active window.\n", + "---", + "_See the `pre_activation` job log for full details._", + ].join("\n") + ) + .write(); return; } diff --git a/actions/setup/js/report_pre_activation_skip.cjs b/actions/setup/js/report_pre_activation_skip.cjs deleted file mode 100644 index 9ea48179a43..00000000000 --- a/actions/setup/js/report_pre_activation_skip.cjs +++ /dev/null @@ -1,207 +0,0 @@ -// @ts-check -/// - -/** - * Reports why the workflow was not activated (skipped by pre-activation gate). - * Called from the pre_activation job with `if: always()` condition. - * Only writes to job summary when activation was denied by one or more checks. - * - * Environment variables (all optional — empty means "check was not configured"): - * GH_AW_IS_TEAM_MEMBER - "true"/"false" from check_membership step - * GH_AW_MEMBERSHIP_RESULT - result code from check_membership step - * GH_AW_MEMBERSHIP_ERROR_MESSAGE - human-readable error from check_membership step - * GH_AW_STOP_TIME_OK - "true"/"false" from check_stop_time step - * GH_AW_RATE_LIMIT_OK - "true"/"false" from check_rate_limit step - * GH_AW_SKIP_CHECK_OK - "true"/"false" from check_skip_if_match step - * GH_AW_SKIP_NO_MATCH_OK - "true"/"false" from check_skip_if_no_match step - * GH_AW_SKIP_IF_CHECK_FAILING_OK - "true"/"false" from check_skip_if_check_failing step - * GH_AW_SKIP_ROLES_OK - "true"/"false" from check_skip_roles step - * GH_AW_SKIP_ROLES_ERROR_MESSAGE - human-readable error from check_skip_roles step - * GH_AW_SKIP_BOTS_OK - "true"/"false" from check_skip_bots step - * GH_AW_SKIP_BOTS_ERROR_MESSAGE - human-readable error from check_skip_bots step - * GH_AW_COMMAND_POSITION_OK - "true"/"false" from check_command_position step - */ - -/** - * @typedef {{ check: string, message: string, result: string, remediation: string }} SkipReason - */ - -async function main() { - const reasons = collectSkipReasons(); - - if (reasons.length === 0) { - // All checks passed (or no checks were configured) — nothing to report. - core.info("✅ All pre-activation checks passed, no skip reason to report."); - return; - } - - core.info(`⏭️ Workflow activation denied by ${reasons.length} check(s). Writing skip reason to job summary...`); - await writeSkipSummary(reasons); -} - -/** - * Collects skip reasons from the environment variables set by each check step. - * A check is considered failing when its ok-output is exactly "false". - * An empty / undefined value means the check was not configured — skip it. - * - * @returns {SkipReason[]} - */ -function collectSkipReasons() { - /** @type {SkipReason[]} */ - const reasons = []; - - // Role / bot check (check_membership step) - const isTeamMember = process.env.GH_AW_IS_TEAM_MEMBER; - if (isTeamMember === "false") { - const result = process.env.GH_AW_MEMBERSHIP_RESULT || "insufficient_permissions"; - const errorMsg = process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE || "Actor does not have the required repository permissions."; - reasons.push({ - check: "Role / bot check", - message: errorMsg, - result, - remediation: buildMembershipRemediation(result), - }); - } - - // Stop-time check (check_stop_time step) - const stopTimeOk = process.env.GH_AW_STOP_TIME_OK; - if (stopTimeOk === "false") { - reasons.push({ - check: "Stop-time limit", - message: "The workflow is past its configured stop-time limit.", - result: "stop_time_exceeded", - remediation: "Update or remove `on.stop-time:` in the workflow frontmatter to extend the active window.", - }); - } - - // Rate-limit check (check_rate_limit step) - const rateLimitOk = process.env.GH_AW_RATE_LIMIT_OK; - if (rateLimitOk === "false") { - reasons.push({ - check: "Rate-limit check", - message: "The actor has exceeded the configured rate limit for this workflow.", - result: "rate_limit_exceeded", - remediation: "Adjust `on.rate-limit:` in the workflow frontmatter, or wait for the time window to expire.", - }); - } - - // Skip-if-match check (check_skip_if_match step) - const skipCheckOk = process.env.GH_AW_SKIP_CHECK_OK; - if (skipCheckOk === "false") { - reasons.push({ - check: "Skip-if-match check", - message: "The skip-if-match query matched, so the workflow was intentionally skipped.", - result: "skip_if_match", - remediation: "Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.", - }); - } - - // Skip-if-no-match check (check_skip_if_no_match step) - const skipNoMatchOk = process.env.GH_AW_SKIP_NO_MATCH_OK; - if (skipNoMatchOk === "false") { - reasons.push({ - check: "Skip-if-no-match check", - message: "The skip-if-no-match query returned no results, so the workflow was intentionally skipped.", - result: "skip_if_no_match", - remediation: "Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.", - }); - } - - // Skip-if-check-failing check (check_skip_if_check_failing step) - const skipIfCheckFailingOk = process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK; - if (skipIfCheckFailingOk === "false") { - reasons.push({ - check: "Skip-if-check-failing", - message: "A required check is currently failing, so the workflow was intentionally skipped.", - result: "skip_if_check_failing", - remediation: "Fix the failing check referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.", - }); - } - - // Skip-roles check (check_skip_roles step) - const skipRolesOk = process.env.GH_AW_SKIP_ROLES_OK; - if (skipRolesOk === "false") { - const errorMsg = process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE || "Actor has a role that is configured to skip this workflow."; - reasons.push({ - check: "Skip-roles check", - message: errorMsg, - result: "skip_roles", - remediation: "Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.", - }); - } - - // Skip-bots check (check_skip_bots step) - const skipBotsOk = process.env.GH_AW_SKIP_BOTS_OK; - if (skipBotsOk === "false") { - const errorMsg = process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE || "Actor is in the skip-bots list for this workflow."; - reasons.push({ - check: "Skip-bots check", - message: errorMsg, - result: "skip_bots", - remediation: "Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.", - }); - } - - // Command-position check (check_command_position step) - const commandPositionOk = process.env.GH_AW_COMMAND_POSITION_OK; - if (commandPositionOk === "false") { - reasons.push({ - check: "Command check", - message: "The required trigger command was not found in the expected position.", - result: "command_not_found", - remediation: "Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.", - }); - } - - return reasons; -} - -/** - * Returns a remediation hint tailored to the membership check result code. - * - * @param {string} result - The result code from check_membership.cjs - * @returns {string} - */ -function buildMembershipRemediation(result) { - switch (result) { - case "insufficient_permissions": - return ( - "The actor does not have the required repository permission. " + - "To allow a bot or GitHub App, add it to `on.bots:` in the workflow frontmatter. " + - "To change the required human-actor roles, update `on.roles:` in the workflow frontmatter." - ); - case "bot_not_active": - return "The bot is in the allowed list but is not installed or active on this repository. Install the GitHub App and try again."; - case "api_error": - return "The permission check failed with a GitHub API error. Check the pre_activation job log for details."; - case "config_error": - return "The workflow has a permission configuration error. Contact the repository administrator."; - default: - return "To allow a bot or GitHub App actor, add it to `on.bots:` in the workflow frontmatter. " + "To change the required roles for human actors, update `on.roles:` in the workflow frontmatter."; - } -} - -/** - * Writes the skip reasons to the GitHub Actions job summary. - * - * @param {SkipReason[]} reasons - */ -async function writeSkipSummary(reasons) { - const lines = []; - lines.push("## ⏭️ Workflow Activation Skipped\n"); - lines.push("This workflow run was not activated because one or more pre-activation checks denied execution.\n"); - - for (const reason of reasons) { - lines.push(`### ${reason.check}`); - lines.push(`> ${reason.message}\n`); - lines.push(`**Remediation:** ${reason.remediation}\n`); - } - - lines.push("---"); - lines.push("_This summary is generated by [gh-aw](https://github.com/github/gh-aw). See the `pre_activation` job log for full details._"); - - await core.summary.addRaw(lines.join("\n")).write(); - core.info("📝 Skip reason written to job summary."); -} - -module.exports = { main, collectSkipReasons, buildMembershipRemediation }; diff --git a/actions/setup/js/report_pre_activation_skip.test.cjs b/actions/setup/js/report_pre_activation_skip.test.cjs deleted file mode 100644 index fa1911b06c4..00000000000 --- a/actions/setup/js/report_pre_activation_skip.test.cjs +++ /dev/null @@ -1,261 +0,0 @@ -import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; - -describe("report_pre_activation_skip.cjs", () => { - let mockCore; - - beforeEach(() => { - mockCore = { - info: vi.fn(), - warning: vi.fn(), - error: vi.fn(), - setFailed: vi.fn(), - setOutput: vi.fn(), - summary: { - addRaw: vi.fn().mockReturnThis(), - write: vi.fn().mockResolvedValue(undefined), - }, - }; - - global.core = mockCore; - - // Clear all relevant env vars - const vars = [ - "GH_AW_IS_TEAM_MEMBER", - "GH_AW_MEMBERSHIP_RESULT", - "GH_AW_MEMBERSHIP_ERROR_MESSAGE", - "GH_AW_STOP_TIME_OK", - "GH_AW_RATE_LIMIT_OK", - "GH_AW_SKIP_CHECK_OK", - "GH_AW_SKIP_NO_MATCH_OK", - "GH_AW_SKIP_IF_CHECK_FAILING_OK", - "GH_AW_SKIP_ROLES_OK", - "GH_AW_SKIP_ROLES_ERROR_MESSAGE", - "GH_AW_SKIP_BOTS_OK", - "GH_AW_SKIP_BOTS_ERROR_MESSAGE", - "GH_AW_COMMAND_POSITION_OK", - ]; - for (const v of vars) { - delete process.env[v]; - } - - vi.resetModules(); - }); - - afterEach(() => { - vi.clearAllMocks(); - delete global.core; - }); - - // ---- main() ---- - - it("should not write summary when all checks pass", async () => { - process.env.GH_AW_IS_TEAM_MEMBER = "true"; - process.env.GH_AW_STOP_TIME_OK = "true"; - process.env.GH_AW_RATE_LIMIT_OK = "true"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - expect(mockCore.summary.addRaw).not.toHaveBeenCalled(); - expect(mockCore.summary.write).not.toHaveBeenCalled(); - expect(mockCore.info).toHaveBeenCalledWith(expect.stringContaining("All pre-activation checks passed")); - }); - - it("should not write summary when no check env vars are set (checks not configured)", async () => { - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - expect(mockCore.summary.addRaw).not.toHaveBeenCalled(); - }); - - it("should write summary when membership check fails", async () => { - process.env.GH_AW_IS_TEAM_MEMBER = "false"; - process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions"; - process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Access denied: User 'prd-to-prod-pipeline[bot]' is not authorized."; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1); - expect(mockCore.summary.write).toHaveBeenCalledTimes(1); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("⏭️ Workflow Activation Skipped"); - expect(summaryText).toContain("Role / bot check"); - expect(summaryText).toContain("prd-to-prod-pipeline[bot]"); - expect(summaryText).toContain("on.bots:"); - expect(summaryText).toContain("on.roles:"); - }); - - it("should write summary when stop-time check fails", async () => { - process.env.GH_AW_STOP_TIME_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - expect(mockCore.summary.addRaw).toHaveBeenCalledTimes(1); - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Stop-time limit"); - expect(summaryText).toContain("on.stop-time:"); - }); - - it("should write summary when rate-limit check fails", async () => { - process.env.GH_AW_RATE_LIMIT_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Rate-limit check"); - expect(summaryText).toContain("on.rate-limit:"); - }); - - it("should write summary when skip-if-match check fails", async () => { - process.env.GH_AW_SKIP_CHECK_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Skip-if-match check"); - expect(summaryText).toContain("on.skip-if-match:"); - }); - - it("should write summary when skip-if-no-match check fails", async () => { - process.env.GH_AW_SKIP_NO_MATCH_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Skip-if-no-match check"); - expect(summaryText).toContain("on.skip-if-no-match:"); - }); - - it("should write summary when skip-if-check-failing check fails", async () => { - process.env.GH_AW_SKIP_IF_CHECK_FAILING_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Skip-if-check-failing"); - expect(summaryText).toContain("on.skip-if-check-failing:"); - }); - - it("should write summary when skip-roles check fails with error message", async () => { - process.env.GH_AW_SKIP_ROLES_OK = "false"; - process.env.GH_AW_SKIP_ROLES_ERROR_MESSAGE = "Workflow skipped: User 'admin-user' has role 'admin'"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Skip-roles check"); - expect(summaryText).toContain("admin-user"); - expect(summaryText).toContain("on.skip-roles:"); - }); - - it("should write summary when skip-bots check fails with error message", async () => { - process.env.GH_AW_SKIP_BOTS_OK = "false"; - process.env.GH_AW_SKIP_BOTS_ERROR_MESSAGE = "Workflow skipped: User 'renovate[bot]' is in skip-bots"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Skip-bots check"); - expect(summaryText).toContain("renovate[bot]"); - expect(summaryText).toContain("on.skip-bots:"); - }); - - it("should write summary when command-position check fails", async () => { - process.env.GH_AW_COMMAND_POSITION_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Command check"); - expect(summaryText).toContain("on.command:"); - }); - - it("should write summary with multiple failures", async () => { - process.env.GH_AW_IS_TEAM_MEMBER = "false"; - process.env.GH_AW_MEMBERSHIP_RESULT = "insufficient_permissions"; - process.env.GH_AW_STOP_TIME_OK = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("Role / bot check"); - expect(summaryText).toContain("Stop-time limit"); - }); - - it("should include a link to gh-aw in the summary footer", async () => { - process.env.GH_AW_IS_TEAM_MEMBER = "false"; - - const { main } = await import("./report_pre_activation_skip.cjs"); - await main(); - - const summaryText = mockCore.summary.addRaw.mock.calls[0][0]; - expect(summaryText).toContain("gh-aw"); - expect(summaryText).toContain("pre_activation"); - }); - - // ---- collectSkipReasons() ---- - - it("should return empty array when no checks failed", async () => { - const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs"); - const reasons = collectSkipReasons(); - expect(reasons).toHaveLength(0); - }); - - it("should return one reason when membership check fails", async () => { - process.env.GH_AW_IS_TEAM_MEMBER = "false"; - process.env.GH_AW_MEMBERSHIP_RESULT = "bot_not_active"; - process.env.GH_AW_MEMBERSHIP_ERROR_MESSAGE = "Bot is not active"; - - const { collectSkipReasons } = await import("./report_pre_activation_skip.cjs"); - const reasons = collectSkipReasons(); - - expect(reasons).toHaveLength(1); - expect(reasons[0].check).toBe("Role / bot check"); - expect(reasons[0].result).toBe("bot_not_active"); - expect(reasons[0].message).toBe("Bot is not active"); - }); - - // ---- buildMembershipRemediation() ---- - - it("should return insufficient_permissions remediation mentioning on.bots and on.roles", async () => { - const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); - const hint = buildMembershipRemediation("insufficient_permissions"); - expect(hint).toContain("on.bots:"); - expect(hint).toContain("on.roles:"); - }); - - it("should return bot_not_active remediation about GitHub App installation", async () => { - const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); - const hint = buildMembershipRemediation("bot_not_active"); - expect(hint).toContain("Install the GitHub App"); - }); - - it("should return api_error remediation mentioning the job log", async () => { - const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); - const hint = buildMembershipRemediation("api_error"); - expect(hint).toContain("pre_activation"); - }); - - it("should return config_error remediation mentioning the administrator", async () => { - const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); - const hint = buildMembershipRemediation("config_error"); - expect(hint).toContain("administrator"); - }); - - it("should return default remediation for unknown result codes", async () => { - const { buildMembershipRemediation } = await import("./report_pre_activation_skip.cjs"); - const hint = buildMembershipRemediation("unknown_result"); - expect(hint).toContain("on.bots:"); - }); -}); diff --git a/pkg/constants/job_constants.go b/pkg/constants/job_constants.go index 7d46e88be7e..352aaa2da72 100644 --- a/pkg/constants/job_constants.go +++ b/pkg/constants/job_constants.go @@ -159,10 +159,6 @@ const CheckSkipIfCheckFailingStepID StepID = "check_skip_if_check_failing" // emitted in the pre-activation job when on.github-app is configured alongside skip-if checks. const PreActivationAppTokenStepID StepID = "pre-activation-app-token" -// ReportSkipReasonStepID is the step ID for the report-skip-reason step in the pre-activation job. -// This step runs with if: always() and writes skip reasons to the job summary when activation is denied. -const ReportSkipReasonStepID StepID = "report-skip-reason" - // ParseMCPGatewayStepID is the step ID for the MCP gateway log parsing step in the agent job. // Its effective_tokens output is exposed as an agent job output so that the safe_outputs job // can pass the value as GH_AW_EFFECTIVE_TOKENS to the footer template renderer. diff --git a/pkg/workflow/compiler_pre_activation_job.go b/pkg/workflow/compiler_pre_activation_job.go index b17527d6291..51069ef63bb 100644 --- a/pkg/workflow/compiler_pre_activation_job.go +++ b/pkg/workflow/compiler_pre_activation_job.go @@ -421,13 +421,6 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec jobIfCondition = data.If } - // Add report-skip-reason step to surface denial reasons in the job summary when activation - // is denied. Only added when there are actual blocking conditions (not for on.steps-only - // pre-activation where activated is unconditionally true). - if len(conditions) > 0 { - steps = append(steps, c.generateReportSkipStep(needsPermissionCheck, data)) - } - // In script mode, explicitly add a cleanup step (mirrors post.js in dev/release/action mode). if c.actionMode.IsScript() { steps = append(steps, c.generateScriptModeCleanupStep()) @@ -448,80 +441,6 @@ func (c *Compiler) buildPreActivationJob(data *WorkflowData, needsPermissionChec // generateReportSkipStep generates the "Report skip reason" step for the pre-activation job. // The step runs with if: always() and writes skip reasons to the GitHub Actions job summary -// when one or more pre-activation checks deny activation, so operators can see the denial -// reason directly from the PR / workflow run surface without opening raw job logs. -// -// Only env vars for checks that are actually configured are emitted, keeping the YAML minimal -// and avoiding actionlint warnings about references to unconfigured step outputs. -func (c *Compiler) generateReportSkipStep(needsPermissionCheck bool, data *WorkflowData) string { - var step strings.Builder - - step.WriteString(" - name: Report skip reason\n") - step.WriteString(fmt.Sprintf(" id: %s\n", constants.ReportSkipReasonStepID)) - step.WriteString(" if: always()\n") - step.WriteString(fmt.Sprintf(" uses: %s\n", GetActionPin("actions/github-script"))) - step.WriteString(" env:\n") - - if needsPermissionCheck { - step.WriteString(fmt.Sprintf(" GH_AW_IS_TEAM_MEMBER: ${{ steps.%s.outputs.%s }}\n", - constants.CheckMembershipStepID, constants.IsTeamMemberOutput)) - step.WriteString(fmt.Sprintf(" GH_AW_MEMBERSHIP_RESULT: ${{ steps.%s.outputs.result }}\n", - constants.CheckMembershipStepID)) - step.WriteString(fmt.Sprintf(" GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n", - constants.CheckMembershipStepID)) - } - - if data.StopTime != "" { - step.WriteString(fmt.Sprintf(" GH_AW_STOP_TIME_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckStopTimeStepID, constants.StopTimeOkOutput)) - } - - if data.RateLimit != nil { - step.WriteString(fmt.Sprintf(" GH_AW_RATE_LIMIT_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckRateLimitStepID, constants.RateLimitOkOutput)) - } - - if data.SkipIfMatch != nil { - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_CHECK_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckSkipIfMatchStepID, constants.SkipCheckOkOutput)) - } - - if data.SkipIfNoMatch != nil { - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_NO_MATCH_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckSkipIfNoMatchStepID, constants.SkipNoMatchCheckOkOutput)) - } - - if data.SkipIfCheckFailing != nil { - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_IF_CHECK_FAILING_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckSkipIfCheckFailingStepID, constants.SkipIfCheckFailingOkOutput)) - } - - if len(data.SkipRoles) > 0 { - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_ROLES_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckSkipRolesStepID, constants.SkipRolesOkOutput)) - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_ROLES_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n", - constants.CheckSkipRolesStepID)) - } - - if len(data.SkipBots) > 0 { - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_BOTS_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckSkipBotsStepID, constants.SkipBotsOkOutput)) - step.WriteString(fmt.Sprintf(" GH_AW_SKIP_BOTS_ERROR_MESSAGE: ${{ steps.%s.outputs.error_message }}\n", - constants.CheckSkipBotsStepID)) - } - - if len(data.Command) > 0 { - step.WriteString(fmt.Sprintf(" GH_AW_COMMAND_POSITION_OK: ${{ steps.%s.outputs.%s }}\n", - constants.CheckCommandPositionStepID, constants.CommandPositionOkOutput)) - } - - step.WriteString(" with:\n") - step.WriteString(" script: |\n") - step.WriteString(generateGitHubScriptWithRequire("report_pre_activation_skip.cjs")) - - return step.String() -} - // extractPreActivationCustomFields extracts custom steps and outputs from jobs.pre-activation field in frontmatter. // It validates that only steps and outputs fields are present, and errors on any other fields. // If both jobs.pre-activation and jobs.pre_activation are defined, imports from both. diff --git a/pkg/workflow/report_skip_reason_test.go b/pkg/workflow/report_skip_reason_test.go deleted file mode 100644 index 543377eb390..00000000000 --- a/pkg/workflow/report_skip_reason_test.go +++ /dev/null @@ -1,193 +0,0 @@ -//go:build !integration - -package workflow - -import ( - "os" - "path/filepath" - "testing" - - "github.com/github/gh-aw/pkg/stringutil" - "github.com/github/gh-aw/pkg/testutil" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// TestReportSkipReasonStep tests that the report-skip-reason step is generated correctly -// in the pre-activation job whenever blocking conditions are present, so that operators -// can see the denial reason from the PR / workflow-run surface without opening raw logs. -func TestReportSkipReasonStep(t *testing.T) { - tmpDir := testutil.TempDir(t, "report-skip-reason-test") - compiler := NewCompiler() - - t.Run("report_skip_reason_present_with_membership_check", func(t *testing.T) { - workflowContent := `--- -on: - pull_request: - types: [opened] - roles: [admin, maintainer, write] -engine: copilot ---- - -# PR Review Workflow - -Review pull requests. -` - workflowFile := filepath.Join(tmpDir, "membership-workflow.md") - err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) - require.NoError(t, err, "Failed to write workflow file") - - err = compiler.CompileWorkflow(workflowFile) - require.NoError(t, err, "Compilation failed") - - lockFile := stringutil.MarkdownToLockFile(workflowFile) - lockContent, err := os.ReadFile(lockFile) - require.NoError(t, err, "Failed to read lock file") - - lockContentStr := string(lockContent) - - // Verify the report-skip-reason step is present - assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") - assert.Contains(t, lockContentStr, "Report skip reason", "Expected Report skip reason step name") - - // Verify the step has always() condition - assert.Contains(t, lockContentStr, "if: always()", "Expected always() condition on report-skip-reason step") - - // Verify membership check env vars are passed - assert.Contains(t, lockContentStr, "GH_AW_IS_TEAM_MEMBER:", "Expected GH_AW_IS_TEAM_MEMBER env var") - assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_RESULT:", "Expected GH_AW_MEMBERSHIP_RESULT env var") - assert.Contains(t, lockContentStr, "GH_AW_MEMBERSHIP_ERROR_MESSAGE:", "Expected GH_AW_MEMBERSHIP_ERROR_MESSAGE env var") - - // Verify the script calls report_pre_activation_skip.cjs - assert.Contains(t, lockContentStr, "report_pre_activation_skip.cjs", "Expected report_pre_activation_skip.cjs in script") - }) - - t.Run("report_skip_reason_present_with_stop_time", func(t *testing.T) { - workflowContent := `--- -on: - workflow_dispatch: null - stop-after: "+48h" - roles: [admin, maintainer] -engine: copilot ---- - -# Stop-Time Workflow - -This workflow has a stop-after configuration. -` - workflowFile := filepath.Join(tmpDir, "stop-time-workflow.md") - err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) - require.NoError(t, err, "Failed to write workflow file") - - err = compiler.CompileWorkflow(workflowFile) - require.NoError(t, err, "Compilation failed") - - lockFile := stringutil.MarkdownToLockFile(workflowFile) - lockContent, err := os.ReadFile(lockFile) - require.NoError(t, err, "Failed to read lock file") - - lockContentStr := string(lockContent) - - assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") - assert.Contains(t, lockContentStr, "GH_AW_STOP_TIME_OK:", "Expected GH_AW_STOP_TIME_OK env var") - }) - - t.Run("report_skip_reason_present_with_skip_bots", func(t *testing.T) { - workflowContent := `--- -on: - issues: - types: [opened] - skip-bots: [renovate, dependabot] -engine: copilot ---- - -# Skip-Bots Workflow - -This workflow skips bot actors. -` - workflowFile := filepath.Join(tmpDir, "skip-bots-workflow.md") - err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) - require.NoError(t, err, "Failed to write workflow file") - - err = compiler.CompileWorkflow(workflowFile) - require.NoError(t, err, "Compilation failed") - - lockFile := stringutil.MarkdownToLockFile(workflowFile) - lockContent, err := os.ReadFile(lockFile) - require.NoError(t, err, "Failed to read lock file") - - lockContentStr := string(lockContent) - - assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") - assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_OK:", "Expected GH_AW_SKIP_BOTS_OK env var") - assert.Contains(t, lockContentStr, "GH_AW_SKIP_BOTS_ERROR_MESSAGE:", "Expected GH_AW_SKIP_BOTS_ERROR_MESSAGE env var") - }) - - t.Run("report_skip_reason_present_with_skip_roles", func(t *testing.T) { - workflowContent := `--- -on: - pull_request: - types: [opened] - skip-roles: [admin] -engine: copilot ---- - -# Skip-Roles Workflow - -This workflow skips admin actors. -` - workflowFile := filepath.Join(tmpDir, "skip-roles-workflow.md") - err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) - require.NoError(t, err, "Failed to write workflow file") - - err = compiler.CompileWorkflow(workflowFile) - require.NoError(t, err, "Compilation failed") - - lockFile := stringutil.MarkdownToLockFile(workflowFile) - lockContent, err := os.ReadFile(lockFile) - require.NoError(t, err, "Failed to read lock file") - - lockContentStr := string(lockContent) - - assert.Contains(t, lockContentStr, "id: report-skip-reason", "Expected report-skip-reason step ID") - assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_OK:", "Expected GH_AW_SKIP_ROLES_OK env var") - assert.Contains(t, lockContentStr, "GH_AW_SKIP_ROLES_ERROR_MESSAGE:", "Expected GH_AW_SKIP_ROLES_ERROR_MESSAGE env var") - }) - - t.Run("report_skip_reason_not_present_without_conditions", func(t *testing.T) { - // When activation is unconditionally true (roles: all + only on.steps), there are no - // blocking conditions so the report-skip-reason step should NOT be generated. - workflowContent := `--- -on: - pull_request: - types: [opened] - roles: all - steps: - - name: Custom gate - id: custom_gate - run: echo "gate_result=ok" >> $GITHUB_OUTPUT -engine: copilot -if: needs.pre_activation.outputs.custom_gate_result == 'ok' ---- - -# On-Steps-Only Workflow - -Uses on.steps to gate activation with no blocking conditions. -` - workflowFile := filepath.Join(tmpDir, "on-steps-only-workflow.md") - err := os.WriteFile(workflowFile, []byte(workflowContent), 0644) - require.NoError(t, err, "Failed to write workflow file") - - err = compiler.CompileWorkflow(workflowFile) - require.NoError(t, err, "Compilation failed") - - lockFile := stringutil.MarkdownToLockFile(workflowFile) - lockContent, err := os.ReadFile(lockFile) - require.NoError(t, err, "Failed to read lock file") - - lockContentStr := string(lockContent) - - // No blocking conditions → no report-skip-reason step - assert.NotContains(t, lockContentStr, "report-skip-reason", "report-skip-reason step should not appear for on.steps-only workflows") - }) -} diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden index 2595a853cbb..532e57b74dc 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden @@ -553,18 +553,4 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); diff --git a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden index c4f6dd21af7..5ef0558e180 100644 --- a/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden +++ b/pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden @@ -554,18 +554,4 @@ jobs: setupGlobals(core, github, context, exec, io); const { main } = require('${{ runner.temp }}/gh-aw/actions/check_membership.cjs'); await main(); - - name: Report skip reason - id: report-skip-reason - if: always() - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 - env: - GH_AW_IS_TEAM_MEMBER: ${{ steps.check_membership.outputs.is_team_member }} - GH_AW_MEMBERSHIP_RESULT: ${{ steps.check_membership.outputs.result }} - GH_AW_MEMBERSHIP_ERROR_MESSAGE: ${{ steps.check_membership.outputs.error_message }} - with: - script: | - const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs'); - setupGlobals(core, github, context, exec, io); - const { main } = require('${{ runner.temp }}/gh-aw/actions/report_pre_activation_skip.cjs'); - await main(); From 516fff6f95859b85cbd6931bc80670b03221dfce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 01:36:35 +0000 Subject: [PATCH 4/6] Use template literals in denial summary helpers (style fix) Agent-Logs-Url: https://github.com/github/gh-aw/sessions/483d2eeb-3b22-4f64-883c-a0c08a888fc0 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/check_membership.cjs | 2 +- actions/setup/js/check_skip_bots.cjs | 2 +- actions/setup/js/check_skip_roles.cjs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/actions/setup/js/check_membership.cjs b/actions/setup/js/check_membership.cjs index e922f2c58fb..cfeeb4f37fb 100644 --- a/actions/setup/js/check_membership.cjs +++ b/actions/setup/js/check_membership.cjs @@ -10,7 +10,7 @@ const { parseRequiredPermissions, parseAllowedBots, checkRepositoryPermission, c * @param {string} remediation - Remediation hint for the operator */ async function writeDenialSummary(message, remediation) { - const lines = ["## ⏭️ Workflow Activation Skipped\n", "> " + message + "\n", "**Remediation:** " + remediation + "\n", "---", "_See the `pre_activation` job log for full details._"]; + const lines = ["## ⏭️ Workflow Activation Skipped\n", `> ${message}\n`, `**Remediation:** ${remediation}\n`, "---", "_See the `pre_activation` job log for full details._"]; await core.summary.addRaw(lines.join("\n")).write(); } diff --git a/actions/setup/js/check_skip_bots.cjs b/actions/setup/js/check_skip_bots.cjs index 875267d879e..0b575ae7df9 100644 --- a/actions/setup/js/check_skip_bots.cjs +++ b/actions/setup/js/check_skip_bots.cjs @@ -57,7 +57,7 @@ async function main() { .addRaw( [ "## ⏭️ Workflow Activation Skipped\n", - "> " + errorMessage + "\n", + `> ${errorMessage}\n`, "**Remediation:** Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.\n", "---", "_See the `pre_activation` job log for full details._", diff --git a/actions/setup/js/check_skip_roles.cjs b/actions/setup/js/check_skip_roles.cjs index 42e0feaebb3..82700fac9a0 100644 --- a/actions/setup/js/check_skip_roles.cjs +++ b/actions/setup/js/check_skip_roles.cjs @@ -54,7 +54,7 @@ async function main() { .addRaw( [ "## ⏭️ Workflow Activation Skipped\n", - "> " + errorMessage + "\n", + `> ${errorMessage}\n`, "**Remediation:** Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.\n", "---", "_See the `pre_activation` job log for full details._", From 83b808e95780efcf066bfbc498584ed1873cb71d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 01:51:40 +0000 Subject: [PATCH 5/6] Use markdown template and renderTemplateFromFile for denial summaries Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c1738814-b8e8-4593-88d9-cf889cb728c3 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/check_command_position.cjs | 16 ++-- actions/setup/js/check_membership.cjs | 12 +-- actions/setup/js/check_membership.test.cjs | 7 ++ actions/setup/js/check_skip_bots.cjs | 14 +-- .../setup/js/check_skip_if_check_failing.cjs | 13 +-- actions/setup/js/check_skip_if_match.cjs | 13 +-- actions/setup/js/check_skip_if_no_match.cjs | 13 +-- actions/setup/js/check_skip_roles.cjs | 13 +-- actions/setup/js/check_skip_roles.test.cjs | 7 ++ actions/setup/js/check_stop_time.cjs | 13 +-- actions/setup/js/pre_activation_summary.cjs | 35 ++++++++ .../setup/js/pre_activation_summary.test.cjs | 85 +++++++++++++++++++ actions/setup/md/pre_activation_skip.md | 9 ++ 13 files changed, 162 insertions(+), 88 deletions(-) create mode 100644 actions/setup/js/pre_activation_summary.cjs create mode 100644 actions/setup/js/pre_activation_summary.test.cjs create mode 100644 actions/setup/md/pre_activation_skip.md diff --git a/actions/setup/js/check_command_position.cjs b/actions/setup/js/check_command_position.cjs index 9808564194d..349ccf1f114 100644 --- a/actions/setup/js/check_command_position.cjs +++ b/actions/setup/js/check_command_position.cjs @@ -2,6 +2,7 @@ /// const { ERR_API, ERR_CONFIG, ERR_VALIDATION } = require("./error_codes.cjs"); +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); /** * Check if command is the first word in the triggering text @@ -100,17 +101,10 @@ async function main() { core.warning(`⚠️ None of the commands [${expectedCommands}] matched the first word (found: '${firstWord}'). Workflow will be skipped.`); core.setOutput("command_position_ok", "false"); core.setOutput("matched_command", ""); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> The trigger comment did not start with a required command. Expected one of: ${expectedCommands}. Found: \`${firstWord}\`.\n`, - "**Remediation:** Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary( + `The trigger comment did not start with a required command. Expected one of: ${expectedCommands}. Found: \`${firstWord}\`.`, + "Make sure the trigger comment starts with the required command defined in `on.command:` in the workflow frontmatter." + ); } } catch (error) { core.setFailed(`${ERR_API}: ${getErrorMessage(error)}`); diff --git a/actions/setup/js/check_membership.cjs b/actions/setup/js/check_membership.cjs index cfeeb4f37fb..712f3606c04 100644 --- a/actions/setup/js/check_membership.cjs +++ b/actions/setup/js/check_membership.cjs @@ -2,17 +2,7 @@ /// const { parseRequiredPermissions, parseAllowedBots, checkRepositoryPermission, checkBotStatus, isAllowedBot } = require("./check_permissions_utils.cjs"); - -/** - * Writes a denial reason to the GitHub Actions job summary. - * - * @param {string} message - The denial message from the check - * @param {string} remediation - Remediation hint for the operator - */ -async function writeDenialSummary(message, remediation) { - const lines = ["## ⏭️ Workflow Activation Skipped\n", `> ${message}\n`, `**Remediation:** ${remediation}\n`, "---", "_See the `pre_activation` job log for full details._"]; - await core.summary.addRaw(lines.join("\n")).write(); -} +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); async function main() { const { eventName } = context; diff --git a/actions/setup/js/check_membership.test.cjs b/actions/setup/js/check_membership.test.cjs index adb04b06098..3432f24162a 100644 --- a/actions/setup/js/check_membership.test.cjs +++ b/actions/setup/js/check_membership.test.cjs @@ -86,6 +86,13 @@ describe("check_membership.cjs", () => { utilsFunction(mockCore, mockGithub, mockContext, process, mockModule, moduleExports, mockRequire); return mockModule.exports; } + if (modulePath === "./pre_activation_summary.cjs") { + return { + writeDenialSummary: async (reason, remediation) => { + await mockCore.summary.addRaw(`${reason}\n${remediation}`).write(); + }, + }; + } throw new Error(`Module not found: ${modulePath}`); }; diff --git a/actions/setup/js/check_skip_bots.cjs b/actions/setup/js/check_skip_bots.cjs index 0b575ae7df9..78c53294c59 100644 --- a/actions/setup/js/check_skip_bots.cjs +++ b/actions/setup/js/check_skip_bots.cjs @@ -1,6 +1,8 @@ // @ts-check /// +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); + /** * Check if the workflow should be skipped based on bot/user identity * Reads skip-bots from GH_AW_SKIP_BOTS environment variable @@ -53,17 +55,7 @@ async function main() { core.setOutput("skip_bots_ok", "false"); core.setOutput("result", "skipped"); core.setOutput("error_message", errorMessage); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> ${errorMessage}\n`, - "**Remediation:** Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary(errorMessage, "Update `on.skip-bots:` in the workflow frontmatter to change which bots are excluded."); } else { // User is NOT in skip-bots, allow workflow to proceed core.info(`✅ User '${actor}' is NOT in skip-bots [${skipBots.join(", ")}]. Workflow will proceed.`); diff --git a/actions/setup/js/check_skip_if_check_failing.cjs b/actions/setup/js/check_skip_if_check_failing.cjs index 12d0174b4e2..97d0ff5475c 100644 --- a/actions/setup/js/check_skip_if_check_failing.cjs +++ b/actions/setup/js/check_skip_if_check_failing.cjs @@ -4,6 +4,7 @@ const { getErrorMessage, isRateLimitError } = require("./error_helpers.cjs"); const { ERR_API } = require("./error_codes.cjs"); const { getBaseBranch } = require("./get_base_branch.cjs"); +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); /** * Determines the ref to check for CI status. @@ -206,17 +207,7 @@ async function main() { const names = failingChecks.map(r => (r.status === "completed" ? `${r.name} (${r.conclusion})` : `${r.name} (${r.status})`)).join(", "); core.warning(`⚠️ Failing CI checks detected on "${ref}": ${names}. Workflow execution will be prevented by activation job.`); core.setOutput("skip_if_check_failing_ok", "false"); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> Failing CI checks detected on \`${ref}\`: ${names}.\n`, - "**Remediation:** Fix the failing check(s) referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary(`Failing CI checks detected on \`${ref}\`: ${names}.`, "Fix the failing check(s) referenced in `on.skip-if-check-failing:`, or update the frontmatter configuration."); return; } diff --git a/actions/setup/js/check_skip_if_match.cjs b/actions/setup/js/check_skip_if_match.cjs index fc633e6d8cb..fc379c91e7a 100644 --- a/actions/setup/js/check_skip_if_match.cjs +++ b/actions/setup/js/check_skip_if_match.cjs @@ -4,6 +4,7 @@ const { getErrorMessage } = require("./error_helpers.cjs"); const { ERR_API, ERR_CONFIG } = require("./error_codes.cjs"); const { buildSearchQuery } = require("./check_skip_if_helpers.cjs"); +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); async function main() { const { GH_AW_SKIP_QUERY: skipQuery, GH_AW_WORKFLOW_NAME: workflowName, GH_AW_SKIP_MAX_MATCHES: maxMatchesStr = "1", GH_AW_SKIP_SCOPE: skipScope } = process.env; @@ -42,17 +43,7 @@ async function main() { if (totalCount >= maxMatches) { core.warning(`🔍 Skip condition matched (${totalCount} items found, threshold: ${maxMatches}). Workflow execution will be prevented by activation job.`); core.setOutput("skip_check_ok", "false"); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> Skip-if-match query matched: ${totalCount} item(s) found (threshold: ${maxMatches}).\n`, - "**Remediation:** Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary(`Skip-if-match query matched: ${totalCount} item(s) found (threshold: ${maxMatches}).`, "Update `on.skip-if-match:` in the workflow frontmatter if this skip was unexpected."); return; } diff --git a/actions/setup/js/check_skip_if_no_match.cjs b/actions/setup/js/check_skip_if_no_match.cjs index 0fef0aee65b..b3edfef7803 100644 --- a/actions/setup/js/check_skip_if_no_match.cjs +++ b/actions/setup/js/check_skip_if_no_match.cjs @@ -4,6 +4,7 @@ const { getErrorMessage } = require("./error_helpers.cjs"); const { ERR_API, ERR_CONFIG } = require("./error_codes.cjs"); const { buildSearchQuery } = require("./check_skip_if_helpers.cjs"); +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); async function main() { const { GH_AW_SKIP_QUERY: skipQuery, GH_AW_WORKFLOW_NAME: workflowName, GH_AW_SKIP_MIN_MATCHES: minMatchesStr = "1", GH_AW_SKIP_SCOPE: skipScope } = process.env; @@ -42,17 +43,7 @@ async function main() { if (totalCount < minMatches) { core.warning(`🔍 Skip condition matched (${totalCount} items found, minimum required: ${minMatches}). Workflow execution will be prevented by activation job.`); core.setOutput("skip_no_match_check_ok", "false"); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> Skip-if-no-match query returned too few results: ${totalCount} item(s) found (minimum required: ${minMatches}).\n`, - "**Remediation:** Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary(`Skip-if-no-match query returned too few results: ${totalCount} item(s) found (minimum required: ${minMatches}).`, "Update `on.skip-if-no-match:` in the workflow frontmatter if this skip was unexpected."); return; } diff --git a/actions/setup/js/check_skip_roles.cjs b/actions/setup/js/check_skip_roles.cjs index 82700fac9a0..78256087b27 100644 --- a/actions/setup/js/check_skip_roles.cjs +++ b/actions/setup/js/check_skip_roles.cjs @@ -2,6 +2,7 @@ /// const { checkRepositoryPermission } = require("./check_permissions_utils.cjs"); +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); /** * Check if the workflow should be skipped based on user's role @@ -50,17 +51,7 @@ async function main() { core.setOutput("result", "skipped"); core.setOutput("user_permission", result.permission); core.setOutput("error_message", errorMessage); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> ${errorMessage}\n`, - "**Remediation:** Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary(errorMessage, "Update `on.skip-roles:` in the workflow frontmatter to change which roles are excluded."); } else { // User does NOT have any of the skip-roles, allow workflow to proceed core.info(`✅ User '${actor}' has role '${result.permission}' which is NOT in skip-roles [${skipRoles.join(", ")}]. Workflow will proceed.`); diff --git a/actions/setup/js/check_skip_roles.test.cjs b/actions/setup/js/check_skip_roles.test.cjs index d7911e67239..4453890f499 100644 --- a/actions/setup/js/check_skip_roles.test.cjs +++ b/actions/setup/js/check_skip_roles.test.cjs @@ -84,6 +84,13 @@ describe("check_skip_roles.cjs", () => { utilsFunction(mockCore, mockGithub, mockContext, process, mockModule, moduleExports, mockRequire); return mockModule.exports; } + if (modulePath === "./pre_activation_summary.cjs") { + return { + writeDenialSummary: async (reason, remediation) => { + await mockCore.summary.addRaw(`${reason}\n${remediation}`).write(); + }, + }; + } throw new Error(`Module not found: ${modulePath}`); }; diff --git a/actions/setup/js/check_stop_time.cjs b/actions/setup/js/check_stop_time.cjs index 726c24f2b6e..fc3ca7304ba 100644 --- a/actions/setup/js/check_stop_time.cjs +++ b/actions/setup/js/check_stop_time.cjs @@ -2,6 +2,7 @@ /// const { ERR_CONFIG, ERR_VALIDATION } = require("./error_codes.cjs"); +const { writeDenialSummary } = require("./pre_activation_summary.cjs"); async function main() { const stopTime = process.env.GH_AW_STOP_TIME; const workflowName = process.env.GH_AW_WORKFLOW_NAME; @@ -33,17 +34,7 @@ async function main() { if (currentTime >= stopTimeDate) { core.warning(`⏰ Stop time reached. Workflow execution will be prevented by activation job.`); core.setOutput("stop_time_ok", "false"); - await core.summary - .addRaw( - [ - "## ⏭️ Workflow Activation Skipped\n", - `> Workflow '${workflowName}' has passed its configured stop-time (${stopTimeDate.toISOString()}).\n`, - "**Remediation:** Update or remove `on.stop-after:` in the workflow frontmatter to extend the active window.\n", - "---", - "_See the `pre_activation` job log for full details._", - ].join("\n") - ) - .write(); + await writeDenialSummary(`Workflow '${workflowName}' has passed its configured stop-time (${stopTimeDate.toISOString()}).`, "Update or remove `on.stop-after:` in the workflow frontmatter to extend the active window."); return; } diff --git a/actions/setup/js/pre_activation_summary.cjs b/actions/setup/js/pre_activation_summary.cjs new file mode 100644 index 00000000000..6f8834cfeb4 --- /dev/null +++ b/actions/setup/js/pre_activation_summary.cjs @@ -0,0 +1,35 @@ +// @ts-check +/// + +const path = require("path"); +const { renderTemplateFromFile } = require("./messages_core.cjs"); + +/** + * Writes a pre-activation skip denial summary to the GitHub Actions job summary. + * Uses the pre_activation_skip.md template from the prompts directory when available, + * falling back to a hardcoded format when the template cannot be loaded (e.g. in tests). + * + * @param {string} reason - The denial reason message + * @param {string} remediation - Remediation hint for the operator + */ +async function writeDenialSummary(reason, remediation) { + let content; + + const runnerTemp = process.env.RUNNER_TEMP; + if (runnerTemp) { + const templatePath = path.join(runnerTemp, "gh-aw", "prompts", "pre_activation_skip.md"); + try { + content = renderTemplateFromFile(templatePath, { reason, remediation }); + } catch { + // Template file not available; fall back to hardcoded format below + } + } + + if (!content) { + content = `## ⏭️ Workflow Activation Skipped\n\n> ${reason}\n\n**Remediation:** ${remediation}\n\n---\n_See the \`pre_activation\` job log for full details._`; + } + + await core.summary.addRaw(content).write(); +} + +module.exports = { writeDenialSummary }; diff --git a/actions/setup/js/pre_activation_summary.test.cjs b/actions/setup/js/pre_activation_summary.test.cjs new file mode 100644 index 00000000000..2d558b26fbc --- /dev/null +++ b/actions/setup/js/pre_activation_summary.test.cjs @@ -0,0 +1,85 @@ +// @ts-check +import { describe, it, expect, beforeEach, afterEach, vi } from "vitest"; +import fs from "fs"; +import os from "os"; +import path from "path"; + +describe("pre_activation_summary.cjs", () => { + let mockCore; + let originalRunnerTemp; + + beforeEach(() => { + mockCore = { + info: vi.fn(), + warning: vi.fn(), + summary: { + addRaw: vi.fn().mockReturnThis(), + write: vi.fn().mockResolvedValue(undefined), + }, + }; + global.core = mockCore; + originalRunnerTemp = process.env.RUNNER_TEMP; + vi.resetModules(); + }); + + afterEach(() => { + if (originalRunnerTemp !== undefined) { + process.env.RUNNER_TEMP = originalRunnerTemp; + } else { + delete process.env.RUNNER_TEMP; + } + delete global.core; + vi.clearAllMocks(); + }); + + describe("writeDenialSummary", () => { + it("uses the markdown template when template file exists", async () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-test-")); + const promptsDir = path.join(tmpDir, "gh-aw", "prompts"); + fs.mkdirSync(promptsDir, { recursive: true }); + fs.writeFileSync(path.join(promptsDir, "pre_activation_skip.md"), "## Skipped\n\n> {reason}\n\n**Fix:** {remediation}\n", "utf8"); + + process.env.RUNNER_TEMP = tmpDir; + + try { + const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now()); + await writeDenialSummary("Denied: insufficient perms", "Update frontmatter roles"); + + expect(mockCore.summary.addRaw).toHaveBeenCalledWith("## Skipped\n\n> Denied: insufficient perms\n\n**Fix:** Update frontmatter roles\n"); + expect(mockCore.summary.write).toHaveBeenCalled(); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); + + it("falls back to hardcoded format when RUNNER_TEMP is not set", async () => { + delete process.env.RUNNER_TEMP; + + const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now()); + await writeDenialSummary("Bot not authorized", "Add bot to on.bots:"); + + const rawCall = mockCore.summary.addRaw.mock.calls[0][0]; + expect(rawCall).toContain("Bot not authorized"); + expect(rawCall).toContain("Add bot to on.bots:"); + expect(mockCore.summary.write).toHaveBeenCalled(); + }); + + it("falls back to hardcoded format when template file does not exist", async () => { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "gh-aw-test-")); + process.env.RUNNER_TEMP = tmpDir; + // No template file created + + try { + const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now()); + await writeDenialSummary("Stop time exceeded", "Update on.stop-after:"); + + const rawCall = mockCore.summary.addRaw.mock.calls[0][0]; + expect(rawCall).toContain("Stop time exceeded"); + expect(rawCall).toContain("Update on.stop-after:"); + expect(mockCore.summary.write).toHaveBeenCalled(); + } finally { + fs.rmSync(tmpDir, { recursive: true, force: true }); + } + }); + }); +}); diff --git a/actions/setup/md/pre_activation_skip.md b/actions/setup/md/pre_activation_skip.md new file mode 100644 index 00000000000..7a7e4a1c863 --- /dev/null +++ b/actions/setup/md/pre_activation_skip.md @@ -0,0 +1,9 @@ +## ⏭️ Workflow Activation Skipped + +> {reason} + +**Remediation:** {remediation} + +--- + +_See the `pre_activation` job log for full details._ From aebc5d63400fe92c7f671fb3f7dfa8e56082194a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 6 Apr 2026 01:53:25 +0000 Subject: [PATCH 6/6] Log unexpected template errors and remove Date.now() cache-busting in test Agent-Logs-Url: https://github.com/github/gh-aw/sessions/c1738814-b8e8-4593-88d9-cf889cb728c3 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- actions/setup/js/pre_activation_summary.cjs | 7 +++++-- actions/setup/js/pre_activation_summary.test.cjs | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/actions/setup/js/pre_activation_summary.cjs b/actions/setup/js/pre_activation_summary.cjs index 6f8834cfeb4..951940b2b56 100644 --- a/actions/setup/js/pre_activation_summary.cjs +++ b/actions/setup/js/pre_activation_summary.cjs @@ -20,8 +20,11 @@ async function writeDenialSummary(reason, remediation) { const templatePath = path.join(runnerTemp, "gh-aw", "prompts", "pre_activation_skip.md"); try { content = renderTemplateFromFile(templatePath, { reason, remediation }); - } catch { - // Template file not available; fall back to hardcoded format below + } catch (err) { + // Log unexpected errors but still fall through to the hardcoded fallback + if (err && typeof err === "object" && "code" in err && err.code !== "ENOENT") { + core.warning(`pre_activation_summary: could not read template ${templatePath}: ${err instanceof Error ? err.message : String(err)}`); + } } } diff --git a/actions/setup/js/pre_activation_summary.test.cjs b/actions/setup/js/pre_activation_summary.test.cjs index 2d558b26fbc..f751fc329a9 100644 --- a/actions/setup/js/pre_activation_summary.test.cjs +++ b/actions/setup/js/pre_activation_summary.test.cjs @@ -42,7 +42,7 @@ describe("pre_activation_summary.cjs", () => { process.env.RUNNER_TEMP = tmpDir; try { - const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now()); + const { writeDenialSummary } = await import("./pre_activation_summary.cjs"); await writeDenialSummary("Denied: insufficient perms", "Update frontmatter roles"); expect(mockCore.summary.addRaw).toHaveBeenCalledWith("## Skipped\n\n> Denied: insufficient perms\n\n**Fix:** Update frontmatter roles\n"); @@ -55,7 +55,7 @@ describe("pre_activation_summary.cjs", () => { it("falls back to hardcoded format when RUNNER_TEMP is not set", async () => { delete process.env.RUNNER_TEMP; - const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now()); + const { writeDenialSummary } = await import("./pre_activation_summary.cjs"); await writeDenialSummary("Bot not authorized", "Add bot to on.bots:"); const rawCall = mockCore.summary.addRaw.mock.calls[0][0]; @@ -70,7 +70,7 @@ describe("pre_activation_summary.cjs", () => { // No template file created try { - const { writeDenialSummary } = await import("./pre_activation_summary.cjs?" + Date.now()); + const { writeDenialSummary } = await import("./pre_activation_summary.cjs"); await writeDenialSummary("Stop time exceeded", "Update on.stop-after:"); const rawCall = mockCore.summary.addRaw.mock.calls[0][0];