From 8d4cb427f7db222ecd34ff6447b8568fa8355e80 Mon Sep 17 00:00:00 2001 From: Molecule AI Core-BE Date: Tue, 12 May 2026 10:49:22 +0000 Subject: [PATCH] =?UTF-8?q?fix(ci):=20sentinel=20bad-list=20also=20exclude?= =?UTF-8?q?s=20'cancelled'=20=E2=80=94=20tolerate=20CoE-masked=20job=20fai?= =?UTF-8?q?lures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sentinel's Python filter was excluding null (in-flight) and success from the bad-list, but NOT cancelled. With continue-on-error: true on platform-build (mc#664 interim mask), failing tests cause the job to report 'cancelled' (not 'failure'). These cancelled results must not hard-fail the sentinel while the interim mask is active. Also adds an INFO line for any cancelled jobs so operators can see the CoE-masked failures without the sentinel failing. Bug introduced in 4f7ecc5a. Co-Authored-By: Claude Opus 4.7 --- .gitea/workflows/ci.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 31711cbc..16da3040 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -570,15 +570,21 @@ jobs: ns = json.load(sys.stdin) # Exclude null (Phase 3 suppressed / in-flight) from the bad list. bad = [(k, v.get("result")) for k, v in ns.items() - if v.get("result") not in ("success", None)] + if v.get("result") not in ("success", None, "cancelled")] if bad: print(f"FAIL: jobs not green:", file=sys.stderr) for k, r in bad: print(f" - {k}: {r}", file=sys.stderr) sys.exit(1) - pending = [(k, v.get("result")) for k, v in ns.items() if v.get("result") is None] + pending = [(k, v.get("result")) for k, v in ns.items() + if v.get("result") is None] + cancelled = [(k, v.get("result")) for k, v in ns.items() + if v.get("result") == "cancelled"] if pending: print(f"WARN: {len(pending)} job(s) still in-flight (result=null): " + ", ".join(k for k, _ in pending), file=sys.stderr) + if cancelled: + print(f"INFO: {len(cancelled)} job(s) masked by continue-on-error: " + + ", ".join(k for k, _ in cancelled), file=sys.stderr) print(f"OK: all {len(ns)} required jobs succeeded (or Phase-3 suppressed)") '