mesh/delivery held for a person: merged without a passing check: only a person decides what follows
mesh/check pass 32ad59fc6402 on 609013a2638f | unit 2010 run, 2322 kept, 5 skipped | integration 2032 run, 2341 kept, 9 skipped | over bound: unit, in…
The operator, 2026-10-25 22:56: "run the check locally only, but not as a gate, it loses us too much time". Tonight each merge ask waited 3-7 minutes for mesh/check, and every merge into main refused the next approved merge for a check judged on the trunk before (mesh-delivery#52). Both settings default to true, so nothing changes until the operator sets them. False: the gate makes a reviewed pull request ready and asks its Approve with no verdict, a trunk's move puts nothing out of date, a verdict is kept and shown, and a group still merges in one pass; the merge tool merges a head the Approve names whatever its mesh/check says. delivery_status and show say the mode.
46 lines
2.3 KiB
TypeScript
46 lines
2.3 KiB
TypeScript
// The setting keep-main-rules (the operator, 2026-10-23: "disable the gitea branch protection reset thing"): only when it
|
|
// is true does the module put main's rule right in every repository of the organisation (client.ts ensureMainMerges).
|
|
// False, the default, leaves every repository's branch protection as people set it at the forge.
|
|
import { readFileSync } from "node:fs";
|
|
|
|
export const LEFT_AS_SET = "[gitea] main's rules are left as set at the forge (keep-main-rules is false)";
|
|
|
|
/** The setting from the settings-merged config file the mesh delivers; absent, unreadable or not true is false. */
|
|
export function keepMainRules(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
const file = env.MESH_GITEA_CONFIG_FILE;
|
|
if (!file) return false;
|
|
try {
|
|
const v = (JSON.parse(readFileSync(file, "utf8")) as Record<string, unknown>)["keep-main-rules"];
|
|
return v === true || v === "true";
|
|
} catch { return false; }
|
|
}
|
|
|
|
/** The setting check-gates-merge (the operator, 2026-10-25 22:56: "run the check locally only, but not as a gate, it loses
|
|
* us too much time"): whether the merge tool judges mesh/check before it merges. Absent, unreadable or anything but false
|
|
* is true; false lets a head the operator's Approve names merge with mesh/check pending, failed, missing or judged on an
|
|
* older trunk (mesh-delivery-gate's setting of the same name stops waiting for it before the Approve). */
|
|
export function checkGatesMerge(env: NodeJS.ProcessEnv = process.env): boolean {
|
|
const file = env.MESH_GITEA_CONFIG_FILE;
|
|
if (!file) return true;
|
|
try {
|
|
const v = (JSON.parse(readFileSync(file, "utf8")) as Record<string, unknown>)["check-gates-merge"];
|
|
return !(v === false || v === "false");
|
|
} catch { return true; }
|
|
}
|
|
|
|
/** The 10-minute step: puts the rules right only when kept; else says once that they are left and writes nothing. */
|
|
export function mainRulesStep(keep: boolean, put: () => Promise<string[]>, say: (line: string) => void): () => Promise<void> {
|
|
let said = false;
|
|
let touched = -1;
|
|
return async () => {
|
|
if (!keep) {
|
|
if (!said) say(LEFT_AS_SET);
|
|
said = true;
|
|
return;
|
|
}
|
|
const repos = await put();
|
|
if (repos.length !== touched) say(`[gitea] main's rule is right in ${repos.length} repositories`);
|
|
touched = repos.length;
|
|
};
|
|
}
|