Skip to content

ci: enforce conventional commit format on PR titles to prevent release-please failures #805

@pszymkowiak

Description

@pszymkowiak

Problem

Release-please stopped creating releases after v0.31.0 because merge commits on master had non-conventional titles like Next Release or Release v0.31.0 — develop → master (#666). Release-please logs: commit could not be parsed: unexpected token.

This caused:

  • No stable release for weeks (stuck at 0.31.0)
  • Manual release needed for 0.33.0
  • Homebrew-core stuck at old version
  • User confusion about versions

Solution

Add a CI check that blocks merge if the PR title doesn't match conventional commit format:

^(feat|fix|chore|docs|ci|refactor|perf|test|build|style)(\(.+\))?!?: .+

Where to enforce

  • All PRs targeting master — must be feat:, fix:, chore:, etc.
  • All PRs targeting develop — same rule (so develop → master squash merges are already compliant)

Implementation

GitHub Action using amannn/action-semantic-pull-request or similar:

name: PR Title Check
on:
  pull_request:
    types: [opened, edited, synchronize]
    branches: [master, develop]

jobs:
  check-title:
    runs-on: ubuntu-latest
    steps:
      - uses: amannn/action-semantic-pull-request@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Also document

  • develop → master must be squash merged (not merge commit)
  • The squash title becomes the commit message on master
  • Release-please parses this commit message to determine version bump

Context

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions