Guide through releasing a project with tenzir-changelog (detect, stage, review, commit, publish, verify).
Guides through releasing a project with tenzir-changelog, handling versioning and publishing.
/plugin marketplace add tenzir/claude-plugins/plugin install tenzir-changelog-plugins-changelog@tenzir/claude-plugins[patch|minor|major]Look for unreleased changes.
Check <repo>/changelog/config.yaml for a modules field
In the target changelog directory:
<repo>/.../<module>/changelog/unreleased/<repo>/changelog/unreleased/Abort if none exist.
Invoke these skills:
changelog:managing-entriesprose:technical-writingBefore starting, verify:
If any check fails, abort and explain why. Do not attempt to fix issues.
Begin by identifying the project type by running
${CLAUDE_PLUGIN_ROOT}/scripts/detect-project-type.sh.
Only execute the project-specific sections, e.g., if the project type is
python, only read the instructions fenced within the respective XML tag:
Run the quality gates (all must pass):
uv run ruff checkuv run ruff format --checkuv run mypyuv run pytestuv buildFix any failures before continuing.
</project>Use $1 if provided. Otherwise, infer from unreleased entries:
If the bump type cannot be determined, abort and explain why.
Staging the release means reorganizing the changelog/ directory to reflect the latest release. This requires two additional inputs:
Title: Examine the release notes and synthesize a user-facing title that highlights the lead topic—the most important change from a user's perspective. For example, "User-Defined Functions" or "Kubernetes Support".
Intro: Create an intro file (e.g., .intro.md) summarizing the release
highlights based on entries in changelog/unreleased/. Example:
This release adds support for custom templates and improves validation performance. It also fixes several bugs related to YAML parsing.
Then execute staging the release:
uvx tenzir-changelog release create --patch|--minor|--major \
--title "Title" \
--intro-file .intro.md \
--yes
Remove the temporary intro file on success.
Display the generated release notes:
uvx tenzir-changelog release notes
Proceed with the generated notes. Do not ask for confirmation.
If the project contains files that maintain the authoritative project version, update them now using the bump type from step 2.
Example files that contain an authoritative version:
Run with the bump type from step 2:
uv version --bump patch|minor|major
This updates pyproject.toml and uv.lock.
Preview the release notes:
uvx tenzir-changelog release notes
Stage all changes, then publish (commits, creates git tag, pushes, and creates GitHub release):
git add -A
uvx tenzir-changelog release publish --commit --tag --yes
Confirm:
Watch CI until the Publish to PyPI workflow completes successfully.
</project>For module releases, adapt the above release steps as follows:
git add <module-root>/
<module-root> is the parent directory of module's changelog/plugins/cpp/changelog/, stage plugins/cpp/git commit -m "Release <module-name> <version>"
<module-name> is the module directory name (e.g., cpp, mylib)<version> is the direct output from uvx tenzir-changelog release version
that includes a v prefix/releasePrepare a new release by updating changelog, version, and documentation