Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Require a linked issue when a change request opens

0789f22ea633bf995417893c0052abb6a36d5520 · Keenan Nemetz · 9d ago · parent 1265ea55

Require a linked issue when a change request opens

Add a per-repository policy for teams that want every proposed update to trace back to an issue. The browser marks Closes as required, and the pre-receive hook applies the same rule to requests added through the CLI or a hand-written metadata commit. Existing requests stay editable and landable.

forge/access/acl.go +11

@@ -79,6 +79,11 @@ type ACL struct {
79 79 // them before merging. A repository with no workflows is unaffected, because
80 80 // there is nothing to run.
81 81 ChecksRequired *bool `json:"checks_required,omitempty"`
82 // RequireLinkedIssue makes opening a new change request require at least one
83 // linked issue in its closes list. It is about how a team files work, not who
84 // may write: existing requests keep their history and can still be edited,
85 // approved, and landed after the setting is turned on.
86 RequireLinkedIssue bool `json:"require_linked_issue,omitempty"`
82 87 // Runners are the accounts whose CI results count as checks here. It is an
83 88 // allowlist rather than a role because it answers a different question from
84 89 // read/write: not "may this account touch the repository" but "may this
@@ -182,6 +187,12 @@ func (a *ACL) RequiresChecks() bool {
182 187 return *a.ChecksRequired
183 188 }
184 189
190 // RequiresLinkedIssue reports whether new change requests must name at least
191 // one issue they close.
192 func (a *ACL) RequiresLinkedIssue() bool {
193 return a != nil && a.RequireLinkedIssue
194 }
195
185 196 // RequiredApprovals resolves the nil-means-default rule.
186 197 func (a *ACL) RequiredApprovals() int {
187 198 if a.ApprovalsRequired == nil {