Commit d0cfea951a

d0cfea951af65c20682f35a5b7541311aa354c06

parent: 2c05bd72c8

Verified · cmc

cmc <hello@cleberg.net> · 2026-09-04 17:15 UTC

Parity, API, Admin: issue and MR search, draft merge requests, the event list, runner -jobs

Layout: unified · split

API.org +25 −3
@@ -128,9 +128,31 @@ gitbay webhook remove <id>
128128
129129** Events
130130
131=push= (data: ref, old, new, forced, deleted), =issue.created=,
132=issue.commented=, =issue.closed=, =issue.open=, =mr.created=,
133=mr.merged= (data: number, sha), =repo.imported= (data: from).
131Every event this forge records, and so every name =--events= may take.
132The server holds the same list as =control.EventKinds=, and a test
133fails if the code emits something not listed or lists something it never
134emits — so this is the whole set, not a sample. =webhook add= refuses a
135name that is not one of them, since a subscription to a typo would
136silently never fire.
137
138- repository: =push= (ref, old, new, forced, deleted), =repo.archived=,
139 =repo.unarchived=, =repo.imported= (from)
140- issues: =issue.created=, =issue.edited=, =issue.commented=,
141 =issue.closed=, =issue.open=, =issue.labeled= (labels),
142 =issue.assigned= (assignees), =issue.milestoned= (milestone)
143- merge requests: =mr.created=, =mr.edited=, =mr.commented=,
144 =mr.reviewed= (verdict), =mr.draft= (draft), =mr.retargeted= (from,
145 to), =mr.milestoned= (milestone), =mr.merged= (number, sha),
146 =mr.closed=
147- releases: =release.created= (tag), =release.deleted= (tag)
148- CI: =status=, =build.success=, =build.failure=, =build.cancelled=
149
150Every payload carries =number= where it names an issue or merge request.
151
152There is deliberately no =repo.deleted=. Both =events.repo_id= and
153=webhooks.repo_id= cascade from =repos=, so recording one would delete
154it — and every webhook that could have received it — in the same
155statement. A repository's deletion is visible in the audit log.
134156
135157** Delivery
136158
Admin.org +11 −1
@@ -328,7 +328,17 @@ rm /tmp/ci-bootstrap /tmp/ci-bootstrap.pub
328328gitbay-runner -remote git@127.0.0.1 -workdir /var/lib/gitbay-runner/work
329329#+end_src
330330
331=admin runners= shows which account each runner polls as; an admin key
331=-jobs N= runs N builds at once. Claiming is one transaction that
332selects and updates, and each build works in its own =build-<id>=
333directory, so workers do not collide; idle polls are staggered across
334the interval so N of them do not wake together. The drop-in's weights
335below are per service, not per build, so raising =-jobs= divides them
336rather than multiplying the host's load.
337
338=admin runners= shows which account each runner polls as, and what each
339is scoped to. A runner with no scope claims builds for *any*
340repository, which on an instance with open registration means running a
341stranger's steps; scope one with =-repos owner/name=. An admin key
332342still works for the protocol during a rotation. A merge request head
333343from a fork is built in the target repository as untrusted: the claim
334344carries no secrets. Same-repository heads were built by their branch
Parity.org +21 −5
@@ -40,6 +40,8 @@ browser-only and the iOS build screen unable to say more than the log.
4040| merge (all strategies) | yes | yes | yes |
4141| close | yes | yes | yes |
4242| create | yes | yes | yes |
43| draft, ready | yes | yes | no |
44| search title and body | yes | yes | no |
4345| create from a fork | yes | no | yes |
4446| retarget | yes | yes | no |
4547| milestone | yes | yes | yes |
@@ -63,6 +65,16 @@ refused while anything is stacked on the merge request, since it would
6365rewrite the commits the stack builds on. The iOS client renders the
6466retarget but has no stack view yet.
6567
68A draft merge request is open but not asking: it does not merge, and it
69does not appear in anyone's review queue. Draft is a flag rather than a
70fifth state, so every =state = 'open'= rule still means what it did.
71Batched review and range-diff (krz/gitbay#111) are not built.
72
73Nothing asks a *particular* person for a review. The review queue is
74computed from involvement — what you own, are granted, or reach through
75an org or team — so a collaborator with write access who has not touched
76a thread hears nothing until they do (krz/gitbay#145).
77
6678Creating from a fork works anywhere the source can be typed as
6779=owner/name:branch=; only the web lacks it. Retargeting moves an open
6880merge request onto another branch of the same repository and stales the
@@ -74,6 +86,7 @@ reviews, since an approval was of the diff against the old branch.
7486|---------------------+-----+-----+-----|
7587| read, list, filter | yes | yes | yes |
7688| filter by label, assignee, author, milestone | yes | yes | no |
89| search title and body | yes | yes | no |
7790| create | yes | yes | yes |
7891| comment | yes | yes | yes |
7992| edit title and body | yes | yes | yes |
@@ -183,11 +196,14 @@ now render the way the reference does. go-org is not yet on the corpus.
183196| command reference | yes | no | n/a |
184197
185198=explore= is the listing without a query; =repo search= is the one with.
186=search= is both plus issue and merge request titles, over everything
187the caller can read; the web serves it at =/search= with a field in the
188rail, and an anonymous visitor gets the public rows from the same query.
189Titles only — body search wants FTS5 and belongs with krz/gitbay#114.
190=repo grep= remains the per-repository file-contents search.
199=search= is both plus the title and body of every issue and merge
200request the caller can read, over FTS5; the web serves it at =/search=
201with a field in the rail, and an anonymous visitor gets the public rows
202from the same query. =issue list --search= and =mr list --search= narrow
203one repository. What someone types is quoted term by term, so an FTS5
204operator — =c++=, =AND=, a lone quote — is a word to match and never a
205syntax error. =repo grep= remains the per-repository file-contents
206search.
191207
192208About text renders as markdown or org-mode per the =about_format= it
193209was stored with. The iOS =Profile= decoder lists its keys explicitly,