diff --git a/.github/workflows/repository-reconciliation.yml b/.github/workflows/repository-reconciliation.yml index ba9297f11..dd74881cf 100644 --- a/.github/workflows/repository-reconciliation.yml +++ b/.github/workflows/repository-reconciliation.yml @@ -25,9 +25,13 @@ jobs: const owner = context.repo.owner; const repo = context.repo.repo; const repoFullName = `${owner}/${repo}`; + const escapedRepoFullName = repoFullName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const now = Date.now(); const staleAfterMs = 14 * 24 * 60 * 60 * 1000; - const closingPattern = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)/gi; + const closingPattern = new RegExp( + `(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\\s+(?:${escapedRepoFullName})?#(\\d+)`, + "gi" + ); const pulls = await github.paginate(github.rest.pulls.list, { owner, repo, state: "open", per_page: 100 diff --git a/tests/unit/test_repository_reconciliation_workflow.py b/tests/unit/test_repository_reconciliation_workflow.py index d7142f691..b5d1c2b71 100644 --- a/tests/unit/test_repository_reconciliation_workflow.py +++ b/tests/unit/test_repository_reconciliation_workflow.py @@ -67,6 +67,19 @@ def test_reconciliation_workflow_validates_issue_numbers_via_api() -> None: assert "404" in script +def test_reconciliation_workflow_accepts_same_repo_qualified_closing_refs() -> None: + """Canonical issue detection must accept `Closes owner/repo#123` for this repo.""" + script = _get_script(_load_workflow()) + assert "escapedRepoFullName" in script, ( + "Closing-reference parsing should escape the current repo name so fully qualified" + " same-repo references are accepted." + ) + assert "repoFullName" in script, ( + "Closing-reference parsing should derive the fully qualified repo prefix from" + " the current workflow repository context." + ) + + def test_reconciliation_workflow_restricts_active_heads_to_same_repo() -> None: """activeHeads must only include branches from the same repository, not forks.""" script = _get_script(_load_workflow())