diff --git a/.github/workflows/pr-review-fix-scheduler.yml b/.github/workflows/pr-review-fix-scheduler.yml index 92ec0674..f59db584 100644 --- a/.github/workflows/pr-review-fix-scheduler.yml +++ b/.github/workflows/pr-review-fix-scheduler.yml @@ -88,7 +88,7 @@ on: concurrency: group: central-pr-review-fix-scheduler-${{ inputs.target_repository || vars.PR_REVIEW_FIX_TARGET_REPOSITORY || github.repository }} - cancel-in-progress: false + cancel-in-progress: true jobs: dispatch-review-fixes: diff --git a/.github/workflows/pr-review-merge-scheduler.yml b/.github/workflows/pr-review-merge-scheduler.yml index 3810c021..b11e2cd5 100644 --- a/.github/workflows/pr-review-merge-scheduler.yml +++ b/.github/workflows/pr-review-merge-scheduler.yml @@ -129,7 +129,14 @@ concurrency: jobs: scan-pr-queue: - if: github.event_name != 'workflow_run' || github.event.workflow_run.conclusion != 'cancelled' + # workflow_dispatch review runs do not reliably carry pull_requests metadata. + # Without this guard, one completed central review can wake a repo-wide scan. + if: >- + github.event_name != 'workflow_run' || + ( + github.event.workflow_run.conclusion != 'cancelled' && + github.event.workflow_run.pull_requests[0].number + ) runs-on: ubuntu-latest permissions: actions: write diff --git a/tests/test_required_workflow_queue_contract.py b/tests/test_required_workflow_queue_contract.py index 19e443e0..78e6d768 100644 --- a/tests/test_required_workflow_queue_contract.py +++ b/tests/test_required_workflow_queue_contract.py @@ -36,3 +36,16 @@ def test_cancelled_review_workflow_runs_do_not_spawn_more_queue_work() -> None: workflow = workflow_text(filename) assert "github.event.workflow_run.conclusion != 'cancelled'" in workflow + + +def test_unassociated_review_workflow_runs_do_not_scan_the_whole_pr_queue() -> None: + workflow = workflow_text("pr-review-merge-scheduler.yml") + + assert "github.event.workflow_run.pull_requests[0].number" in workflow + + +def test_fix_scheduler_cancels_superseded_cron_runs() -> None: + workflow = workflow_text("pr-review-fix-scheduler.yml") + + assert "central-pr-review-fix-scheduler-" in workflow + assert "cancel-in-progress: true" in workflow