summaryrefslogtreecommitdiff
path: root/.github/mergify.yml
blob: 1cb5bb739150ca38426284d21d97e9ee894ac262 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# yaml-language-server: $schema=https://docs.mergify.com/mergify-configuration-schema.json
extends: mergify
merge_protections_settings:
  reporting_method: check-runs

pull_request_rules:
  - name: Flag product T-ID format violation in PR title or commit messages
    description: >
      Product-repo convention: the PR title AND every commit's first line must
      match a `T<digits>:`, `NOS-<digits>:` or legacy `VD-<digits>:` task key
      followed by text (optional `scope: ` prefix). NOS is the renamed VD Jira
      project (2026-07). The title is always checked; the per-commit check is
      exempted when a maintainer applies the `legacy` label — an escape hatch for
      grandfathered PRs whose commit history cannot be rewritten (repos that
      squash-merge AND block force-push, e.g. vyos.vyos enforces
      `non_fast_forward` on ~ALL branches with zero bypass). New PRs are still
      nudged toward the convention; `legacy` is the deliberate,
      maintainer-controlled opt-out. Relocated from the central config (T8966) so
      the convention is opt-in per product repo. Name is intentionally distinct
      from any central rule name so this stays additive (not an `extends:`
      override). Legacy-label escape added 2026-06-08 (T8966).
    conditions:
      - '-closed'
      - '-merged'
      - '-author~=\[bot\]$'
      - 'author!=copilot-swe-agent'
      - 'author!=vyosbot'
      - or:
          - '-title~=^(([a-zA-Z0-9\-_.]+:[ ])?)(T[0-9]+|NOS-[0-9]+|VD-[0-9]+):[ ]+[^\s]+.*'
          - and:
              - 'label!=legacy'
              - 'commits[*].commit_message~=^(?!(([a-zA-Z0-9\-_.]+:[ ])?)(T[0-9]+|NOS-[0-9]+|VD-[0-9]+):[ ]+[^\s]+).*'
    actions:
      label:
        toggle:
          - invalid-task-id