0007 Trunk-based development, Conventional Commits and automated releases¶
- Status: accepted
- Date: 2026-09-22
Context and problem statement¶
The project needs a branching model, a commit convention and a release mechanism that scale from a single maintainer to outside contributors without manual bookkeeping.
Decision drivers¶
mainmust always be releasable.- Changelog and version numbers should be derived, not typed.
- Contributors should be able to follow the rules from a single page.
Considered options¶
- Git Flow with long-lived
developand release branches. - Trunk-based development with short-lived branches, squash merges, Conventional Commits and Release Please.
Decision outcome¶
Option 2.
- Branching: short-lived feature branches off
main, pull requests required, squash merge, branch protection with required CI checks. - Commits: Conventional Commits with scopes
core,io,cli,app,docs,build,ci. The squash-merged pull request title is the commit message. - Versioning: Semantic Versioning. Before 1.0,
featbumps the minor version andfixbumps the patch version. - Releases: Release Please maintains a release pull request from the commit history. Merging it creates the tag and GitHub release; the release workflow then builds and attaches the packages for every platform.
Git Flow was rejected as unnecessary ceremony for a project without parallel maintenance lines.
Consequences¶
- The version lives in
CMakeLists.txtandvcpkg.json, both updated by Release Please. - Repository settings must allow Actions to create pull requests.
- Hotfixes are ordinary pull requests to
mainfollowed by a release.