Main takes no push and only mesh-tools merges, set by setup and guarded (issue 948, ADR 0398 §2)
This commit is contained in:
@@ -32,6 +32,7 @@ export function summarised(p: BranchProtection) {
|
||||
required_statuses: p.enable_status_check ? (p.status_check_contexts ?? []) : [],
|
||||
required_approvals: p.required_approvals ?? 0,
|
||||
admin_may_override: !(p.block_admin_merge_override ?? false),
|
||||
merge_whitelist: p.enable_merge_whitelist ? (p.merge_whitelist_usernames ?? []) : null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -411,7 +412,7 @@ function allGiteaTools(gitea: GiteaClient, admin?: () => GiteaAdmin): ToolDefini
|
||||
},
|
||||
{
|
||||
name: "gitea_branch_protection_set",
|
||||
description: "Only ever stronger (novox/hq ADR 0266): a change that drops a required status, lets a person push directly or lets an administrator merge past a status is refused — that is the operator's, at the forge. Make a branch require commit statuses before a pull request merges into it — the mesh's merge check sets `mesh/merge-gate` (the module graph's gate) and `mesh/repo-check` (the repository's own tests). Edits the branch's rule (its required statuses replaced by these, everything else kept unless given) or creates one, which refuses direct pushes unless push=true. Answers the rule before and after.",
|
||||
description: "Only ever stronger (novox/hq ADR 0266): a change that drops a required status, lets a person push directly or lets an administrator merge past a status is refused, and on main so is a change that drops the merge whitelist (only mesh-tools merges there) or widens it (novox/hq ADR 0398 §2, issue 948) — that is the operator's, at the forge. Make a branch require commit statuses before a pull request merges into it — the mesh's merge check sets `mesh/merge-gate` (the module graph's gate) and `mesh/repo-check` (the repository's own tests). Edits the branch's rule (its required statuses replaced by these, everything else kept unless given) or creates one, which refuses direct pushes unless push=true. Answers the rule before and after.",
|
||||
input: {
|
||||
owner: { type: "string", description: "the repository owner" },
|
||||
repo: { type: "string", description: "the repository name" },
|
||||
@@ -433,7 +434,7 @@ function allGiteaTools(gitea: GiteaClient, admin?: () => GiteaAdmin): ToolDefini
|
||||
};
|
||||
const covering = before ? [] : (await gitea.branchProtections(owner, repo))
|
||||
.filter((r) => ruleCovers(String(r.rule_name ?? r.branch_name ?? ""), branch));
|
||||
const weakens = judgeProtectionChange(before, want, covering);
|
||||
const weakens = judgeProtectionChange(before, want, covering, branch);
|
||||
if (weakens) throw new Refused(weakens);
|
||||
const { created, rule } = await gitea.setBranchProtection(owner, repo, branch, want);
|
||||
return { branch, created, before: before ? summarised(before) : null, after: summarised(rule) };
|
||||
|
||||
Reference in New Issue
Block a user