Files
lazysecrets.nvim/.gitea/workflows/pr-title.yml
T
kebandClaude Opus 5.5 794d8cc08b
CI / StyLua (pull_request) Successful in 5s
CI / Smoke test (Neovim 0.11.7) (pull_request) Successful in 5s
PR title / Conventional title (pull_request) Successful in 2s
CI / Smoke test (Neovim 0.12.5) (pull_request) Successful in 5s
ci: check pull request titles
Pull requests are squash-merged, so the title becomes the commit on main. A conventional type keeps main's history usable for release notes later.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-12 21:52:27 +02:00

41 lines
1.4 KiB
YAML

name: PR title
# Pull requests are squash-merged, so the title becomes the commit on main:
# it must start with a conventional commit type, so that release notes can
# be written from main's history (git-cliff, as lazysecrets does). Brackets
# and a missing space are fine too.
#
# feat: SOPS and .env files in git repos
# fix(search): ctrl+r with empty results loads the scope
# feat!: rename config keys (! marks a breaking change)
# [feat] install with a one-liner
# [fix]: hide values on blur
# docs:split the README
on:
pull_request:
branches: [main]
types: [opened, edited, reopened, synchronize]
jobs:
title:
name: Conventional title
runs-on: ubuntu-latest
steps:
- name: Check the title
env:
TITLE: ${{ github.event.pull_request.title }}
run: |
types='feat|fix|perf|refactor|docs|test|ci|chore|build|style|revert'
scope='(\([a-z0-9._/-]+\))?'
if [[ "$TITLE" =~ ^\[($types)$scope!?\]!?:?[[:space:]]*(.*)$ ]] ||
[[ "$TITLE" =~ ^($types)$scope!?:[[:space:]]*(.*)$ ]]; then
what="${BASH_REMATCH[3]}"
fi
if [[ "${what:-}" =~ [^[:space:]] ]]; then
echo "ok: $TITLE"
else
echo "::error::The title should start with a type, like \"feat: what changed\" or \"[feat] what changed\"; types: ${types//|/, }. Got: $TITLE"
exit 1
fi