Release Process
Versioning Policy
TriePack follows Semantic Versioning:
- MAJOR – incompatible API or binary format changes
- MINOR – new features, backward-compatible
- PATCH – bug fixes, no API changes
The version is defined in CMakeLists.txt via project(triepack VERSION x.y.z).
Release Checklist
Every dot release must update the three version-tracking files. Skipping any of these causes the releases page and changelog to fall out of sync.
- Update version in the top-level
CMakeLists.txt:project(triepack VERSION x.y.z LANGUAGES C CXX) - Update
docs/_config.ymlsite version:version: "x.y.z" - Update
CHANGELOG.md– add a new section at the top with the version, date, and summary of changes. Follow the Keep a Changelog format. - Update
docs/releases.md– add a matching entry at the top of the releases list. This is the public-facing release notes page on the docs site. - Run the full test suite including coverage:
cmake -B build -DBUILD_TESTS=ON -DBUILD_JSON=ON -DBUILD_EXAMPLES=ON cmake --build build ctest --test-dir build --output-on-failure - Run Python tests (if Python binding code was touched):
cd bindings/python && pip install -e ".[test]" && pytest -v - Run clang-format on any modified C/C++ files:
xcrun clang-format -i <modified-files> - Verify documentation builds cleanly:
cmake -B build -DBUILD_DOCS=ON cmake --build build --target docs - Commit the version bump, changelog, and releases page update together.
- Tag the release:
git tag -a vx.y.z -m "Release vx.y.z" - Push the tag:
git push origin main --tags
Files That Must Be Updated Per Release
| File | What to change |
|---|---|
CMakeLists.txt |
project(triepack VERSION x.y.z ...) |
docs/_config.yml |
version: "x.y.z" |
CHANGELOG.md |
New ## [x.y.z] - YYYY-MM-DD section at top |
docs/releases.md |
New ## vx.y.z -- YYYY-MM-DD section at top |
CI/CD Automation
The CI pipeline runs on every push and pull request:
- Build matrix: Linux (gcc, clang), macOS (AppleClang), 32-bit and 64-bit
- Test:
ctestwith--output-on-failure - Coverage: uploaded on tagged releases and main branch builds
- Docs: Doxygen HTML generated and deployed on tagged releases
When a version tag (v*) is pushed, the pipeline additionally:
- Creates a GitHub Release with auto-generated notes
- Attaches source tarballs
- Publishes Doxygen docs to GitHub Pages