name: Conventional PR Title # Squash-merge replaces the merge commit subject with the PR title, so # enforcing Conventional Commits at the PR-title level is what actually gates # the commits that land on the default branch. The local commit-msg hook # (.githooks/commit-msg) is a best-effort assist; this workflow is the gate. # # See https://www.conventionalcommits.org/en/v1.0.0/ on: pull_request: types: [opened, edited, reopened, synchronize, labeled, unlabeled] permissions: pull-requests: read jobs: lint-pr-title: name: Validate PR title runs-on: ubuntu-latest steps: - name: Check title against Conventional Commits uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: # Must mirror the type list in .githooks/commit-msg. types: | feat fix docs style refactor perf test build ci chore revert requireScope: false subjectPattern: ^(?![A-Z]).+$ subjectPatternError: | The subject "{subject}" must start with a lowercase character. # Allow merges/reverts that GitHub generates automatically. ignoreLabels: | ignore-semantic-pull-request