The check gate (internal/control/mr.go:808-829) requires that the head carry
statuses and that all of them are green. It does not check for a specific set of
job names — an absence of statuses is refused with "requires green checks and
none were reported".
Path filters (#169) can produce exactly that absence. A repository where every
job carries a paths or paths-ignore rule that excludes the change queues no
builds, sets no ci/<job> statuses, and the merge request then cannot be merged
at all. A docs-only change is the obvious case, which is unfortunate given docs
changes are what path filters were added for.
krz/gitbay is safe by construction — build carries no paths-ignore, so a
status is always reported — and require_checks is off here anyway. Neither is
something another deployment can be assumed to have arranged.
Options, roughly in order of preference:
- Treat a job that a filter excluded as satisfied rather than absent: record a
ci/<job>status ofsuccesswith a message naming the filter. Honest, and it keepsCombinedStatusmeaningful. - Let the gate pass when no job was applicable, distinguishing "filtered out" from "never ran". Needs the gate to know why nothing is there.
- Document it and leave it, requiring operators to keep one unconditional job. Cheapest, and the least likely to be read in time.
Ref #169.
referenced in commit 9a2a62e575 by cmc: ci: derive a diff base from the merge base on a branch's first push
2026-09-05 07:00 UTC