fix(server): wake PR watches when remaining CI checks finish#23904
0 / 6 viewed6 files changedLine totals unavailable
apps/server/src/orchestration-v2/pullRequestWatch.ts · Earlier revision c762335d · right 87
Original diff
@@ -65,11 +65,26 @@ export function evaluatePullRequestWatch(
// A required job created and finished between two passes is never seen pending. Without
// required checks, any check counts, and advisory bots keep adding passed ones: no wake.
const gateGrew = required.length > 0 && gateNames.some((name) => !told.includes(name));
+ // Other checks still pending when required ones passed are owed one wake when all settle.
+ // They are kept with the told names until then, so later advisory churn never wakes.
+ const owed =
+ required.length > 0
+ ? detail.checks.filter((check) => check.required !== true && told.includes(check.name))
+ : [];
+ const settled =
+ failed.length === 0 && detail.checks.every((check) => check.status !== "pending");
+ let owedNow = passedNow && passed ? owed : [];
if (passedNow && (!passed || gateGrew)) {
changes.push({ kind: "checks-passed", count: gate.length, required: required.length > 0 });
+ owedNow = detail.checks.filter(
+ (check) => check.required !== true && check.status === "pending",
+ );
+ } else if (settled && owedNow.length > 0) {
+ changes.push({ kind: "checks-passed", count: detail.checks.length, required: false });
+ owedNow = [];
}
passed = passedNow;
- passedChecks = passedNow ? gateNames : [];
+ passedChecks = passedNow ? [...gateNames, ...owedNow.map((check) => check.name)] : [];