fix: filter out schedule/deploy workflow runs in CI checks

_latest_main_ci_run() was using event != pull_request which still
matched deploy.yml schedule runs when their prettyref == "main",
blocking the loop from picking up new issues.

_latest_ci_run_for_branch() had the same issue: the else branch matched
any non-pull_request event including schedule runs.

Both functions now explicitly filter for event == "push" only.

Tests updated: rename _latest_ci_run → _latest_main_ci_run, mock
_open_issue_prs to prevent real API calls in unit tests, and update
_find_pr_for_branch side_effect to reflect the upstream post-merge
PR-still-open verification check.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Thomas SharedInbox
2026-05-24 14:08:13 +02:00
co-authored by Claude Sonnet 4.6
parent 37eca207c6
commit 77e581299d
2 changed files with 55 additions and 16 deletions
+4 -4
View File
@@ -146,16 +146,16 @@ def _ready_issues() -> list[dict]:
def _latest_main_ci_run() -> dict | None:
"""Return the latest CI run on the main branch (excludes PR runs).
"""Return the latest CI run on the main branch (excludes PR and schedule runs).
Using the global latest run (limit=1) is wrong: a passing or failing run
on a PR branch could mask the true state of main. We filter to non-PR
on a PR branch could mask the true state of main. We filter to push
events on the 'main' prettyref so section-3 logic only reacts to main.
"""
data = _tea_get(f"repos/{REPO}/actions/runs?limit=20")
runs = (data or {}).get("workflow_runs", [])
for run in runs:
if run.get("event") != "pull_request" and run.get("prettyref") == "main":
if run.get("event") == "push" and run.get("prettyref") == "main":
return run
return None
@@ -177,7 +177,7 @@ def _latest_ci_run_for_branch(branch: str) -> dict | None:
return run
except (json.JSONDecodeError, AttributeError):
pass
else:
elif run.get("event") == "push":
if run.get("prettyref") == branch:
return run
return None