mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
68 lines
3.1 KiB
YAML
68 lines
3.1 KiB
YAML
# Mergify merge queue — WS3.4/D5 of the v3.8.49 quality/velocity master plan.
|
|
#
|
|
# WHY: ~85-100 active PR authors/month and 300+ PRs/week peaks, all merged by ONE
|
|
# identity. The manual merge-train validated batches by hand; this queue automates
|
|
# it with batching + automatic batch bisection (a red batch of N costs ~log2(N)
|
|
# revalidations instead of N). Mergify Open Source plan: free, unlimited, public repo.
|
|
#
|
|
# GOVERNANCE (non-negotiable, mirrors CLAUDE.md Hard Rules #21/#22 + the owner's
|
|
# pre-merge ⭐ gate):
|
|
# • A PR enters the queue ONLY via the `queue` label — applied by the owner (or a
|
|
# session acting for the owner) AFTER the pre-merge ⭐ report/decision. The label
|
|
# IS the merge approval; Mergify only executes it.
|
|
# • During a release-freeze (open issue labeled `release-freeze`), do NOT label PRs
|
|
# targeting the frozen branch — the freeze is a human-honored coordination signal
|
|
# the queue cannot see. Retarget to the active release/vX+1 first (Hard Rule #21).
|
|
# • Never label a PR another session is actively working (Hard Rule #22b).
|
|
# • Fallback path if Mergify misbehaves or the OSS plan changes: the manual
|
|
# merge-train runbook (docs/ops/MERGE_TRAIN.md) — remove labels, proceed by hand.
|
|
|
|
queue_rules:
|
|
- name: release
|
|
# Any current or future release branch — the reason GitHub's native queue was
|
|
# rejected (no wildcard support on personal-account repos).
|
|
queue_conditions:
|
|
- base~=^release/v\d+\.\d+\.\d+$
|
|
- label=queue
|
|
- -draft
|
|
- -conflict
|
|
# "Everything that ran is green, nothing still running, AND the always-on
|
|
# anchor check succeeded" — robust to the path-filtered fast-gates (docs-only
|
|
# PRs skip code jobs; matrix shard names vary) while never fail-open: a PR with
|
|
# zero checks cannot vacuously merge, because `Merge integrity` runs on EVERY
|
|
# non-draft PR (quality.yml) and must be an affirmative success. Review approval
|
|
# is intentionally NOT a condition here: the owner-applied `queue` label IS the
|
|
# approval in this repo's single-maintainer model (see governance header).
|
|
merge_conditions:
|
|
- "#check-failure=0"
|
|
- "#check-pending=0"
|
|
- "#check-success>=1"
|
|
- check-success=Merge integrity (changelog + generated skills)
|
|
# Batching: validate up to 10 queued PRs together (the manual train's sweet spot);
|
|
# don't hold a lone PR hostage waiting for siblings.
|
|
batch_size: 10
|
|
batch_max_wait_time: 5 min
|
|
# Squash keeps the one-commit-per-PR history the CHANGELOG reconciliation expects.
|
|
merge_method: squash
|
|
|
|
pull_request_rules:
|
|
# AUTO-ENQUEUE trigger — queue_conditions alone only define ELIGIBILITY in current
|
|
# Mergify semantics (without this rule the PR sits at "use @Mergifyio queue",
|
|
# observed live on PR #7175). The conditions mirror queue_conditions on purpose.
|
|
- name: queue on owner-applied label
|
|
conditions:
|
|
- base~=^release/v\d+\.\d+\.\d+$
|
|
- label=queue
|
|
- -draft
|
|
- -conflict
|
|
actions:
|
|
queue:
|
|
name: release
|
|
- name: clean up the queue label after merge
|
|
conditions:
|
|
- merged
|
|
actions:
|
|
label:
|
|
remove:
|
|
- queue
|