1.8 KiB
DEVX-179: auto-merge must never select [skip ci] squash titles
Problem
PR #351 squash-merged as DEVX-178: chore: update badge URLs to commit 4422c70b [skip ci]. extract_conventional_msg picked a commit subject
carrying [skip ci] — a master badge commit surfaced in the PR's commit
list after force-push/amend rewrote branch history. The resulting merge
commit suppressed the post-merge push run: no release, no publish, no
wiki sync, no Vikunja close.
PR #352 shows the secondary defect: two ci: commits on the branch and
the older one won the tie, so the squash title described a throwaway
retrigger commit instead of the real change.
Approach
REQ-1: Subjects containing [skip ci], [ci skip], or [skip actions]
(case-insensitive) are ineligible merge titles. They are excluded before
priority scoring, so a badge/chore/[skip ci] commit can never suppress
the post-merge pipeline again.
REQ-2: Equal-priority ties resolve to the newest commit in the returned list (Gitea returns PR commits newest-first; iterate in returned order and keep the first best candidate).
Test Plan
test_auto_merge.py: commits[ci retrigger, badge-chore-skipci]→ thecisubject wins; commits[older-ci, newer-ci]→ newest wins; all commits[skip ci]→ falls back to newest non-skipped subject.make pytest-cov(100% gate),make lint-all.
Deploy Plan
Merge as fix: → post-merge cuts a release that also ships DEVX-178's
PLAYBOOK_ROLE_MAP entry.
Rollback Plan
Revert the squash commit; extract behavior returns to the previous (unhardened) selection.
Acceptance Criteria
- REQ-1:
[skip ci]/[ci skip]/[skip actions]subjects are never selected. - REQ-2: Equal-priority ties pick the newest commit.
- Unit tests cover both; 100% coverage maintained.