ci.gatekeeper: Ignore overlapping regular runs

A linked ci-devel run and regular CI can report the same required job names.

The existing newest-run rule can therefore select regular results based only on run timing.

Ignore regular CI and self-hosted runs replaced by validated ci-devel while retaining every non-overlapping required workflow.

Generated-By: GitHub Copilot
Signed-off-by: Aurélien Bombo <abombo@microsoft.com>
This commit is contained in:
Aurélien Bombo
2026-07-24 15:34:18 -05:00
parent 46ae792ff2
commit 5aeae8ebe0

View File

@@ -43,6 +43,10 @@ _GH_RUN_URL_RE = re.compile(
rf"{re.escape(_GH_WEB_URL)}/actions/runs/(\d+)"
)
_CI_DEVEL_WORKFLOW_PATH = ".github/workflows/ci-devel.yaml"
_CI_DEVEL_OVERLAPPING_WORKFLOWS = {
".github/workflows/ci-on-push.yaml",
".github/workflows/static-checks-self-hosted.yaml",
}
_GH_SUMMARY_URL = (
f"{os.environ.get('GITHUB_SERVER_URL')}/"
f"{os.environ.get('GITHUB_REPOSITORY')}/actions/runs/"
@@ -277,6 +281,11 @@ class Checker:
f"check_workflow_runs_status_{attempt}",
{"head_sha": self.latest_commit_sha})
def should_ignore_workflow_run(self, run):
"""Whether a regular run overlaps the selected ci-devel run"""
return (self.ci_devel_run is not None and
run.get("path") in _CI_DEVEL_OVERLAPPING_WORKFLOWS)
def check_workflow_runs_status(self, attempt, workflow_runs=None):
"""
Checks if all required jobs passed
@@ -286,6 +295,10 @@ class Checker:
if workflow_runs is None:
workflow_runs = self.get_workflow_runs(attempt)
for run in workflow_runs:
if self.should_ignore_workflow_run(run):
print(f"Ignoring overlapping workflow run {run['html_url']}",
file=sys.stderr)
continue
jobs = self.get_jobs_for_workflow_run(run["id"])
for job in jobs:
self.record(run["name"], job)