Release Process¶
This document describes the versioning strategy and release process for this dotfiles repository.
Current Version¶
Version: 1.6.0 (as of 2026-02-04)
The current version is tracked in the ROADMAP.md and CHANGELOG.md files.
Versioning Strategy¶
This project follows Semantic Versioning 2.0.0:
- Major (X.y.z): Breaking changes to dotfiles structure, command interfaces, or required dependencies
- Minor (x.Y.z): New features, enhancements, or non-breaking additions
- Patch (x.y.Z): Bug fixes, documentation updates, minor improvements
Examples¶
1.4.0 → 2.0.0: Breaking change (unified command interface removed old aliases)1.5.0 → 1.6.0: New features added (new mise tasks, documentation improvements)1.6.0 → 1.6.1: Bug fixes only (would be a patch release)
Minimum Chezmoi Version: .chezmoiversion¶
The .chezmoiversion file at the repository root specifies the minimum required chezmoi version:
This ensures users have a compatible chezmoi installation before applying dotfiles.
Why Version 2.15.0?¶
- Template Features: Uses
.chezmoitemplates/and advanced templating - Ignore Patterns: Relies on
.chezmoiignoretemplate support - Data Files: Uses
.chezmoidata.yamlfor distro-specific configuration
Updating the Minimum Version¶
Only update .chezmoiversion when: 1. A new chezmoi feature becomes required (not optional) 2. A critical bug fix in chezmoi is needed 3. Compatibility with older versions becomes unmaintainable
Test with the new minimum version before updating:
chezmoi --version # Verify local version
# Test full apply workflow
chezmoi apply --dry-run --verbose
Tool Version Pinning¶
Language runtimes and critical tools follow a partial pinning strategy (see ADR-009):
Pinned Tools (major.minor)¶
- node:
lts- Node.js LTS releases - python:
3.13- Stable branch (3.13.x patches auto-update) - rust:
1.93- Stable channel (1.93.x patches auto-update)
Unpinned Tools (latest)¶
- CLI utilities: bat, eza, fd, ripgrep, fzf, etc.
- Development tools: lazygit, neovim, glow
- Linters/formatters: shellcheck, shfmt, yamllint
Update Policy¶
- Patch versions (x.y.Z): Auto-update via mise (no PR needed)
- Minor versions (x.Y.z): Renovate PR, automerge if CI passes
- Major versions (X.y.z): Manual review required
Changelog Maintenance¶
The CHANGELOG.md follows Keep a Changelog format.
During Development¶
All changes are added to the [Unreleased] section under the appropriate category:
- Added: New features or functionality
- Changed: Changes to existing functionality
- Deprecated: Soon-to-be-removed features
- Removed: Removed features or functionality
- Fixed: Bug fixes
- Security: Security-related changes
Example Entry¶
## [Unreleased]
### Added
- New `dots sync` command for quick dotfile synchronization
### Fixed
- Fixed tmux session creation race condition
Current Release Process (Manual)¶
Note: Release automation is planned for v1.9.0 Batch 5 using git-cliff. This section documents the current manual process.
1. Prepare the Release¶
-
Review changes:
-
Update CHANGELOG.md:
- Move
[Unreleased]section to new version section - Add release date:
## [1.7.0] - 2026-02-10 -
Create new empty
[Unreleased]section -
Update ROADMAP.md:
- Mark completed version as ✅ complete
- Update "Current Version" header
- Update "Last Audit" date
2. Create the Release¶
-
Commit changelog updates:
-
Create and push tag:
-
Create GitHub Release:
- Go to GitHub Releases
- Select tag
v1.7.0 - Title:
v1.7.0 - Brief Description - Copy changelog section for this version
- Click "Publish release"
3. Post-Release¶
- Verify deployment:
- Check GitHub Actions ran successfully
-
Verify docs site updated (if applicable)
-
Announce (optional):
- Update project README if major changes
- Share in relevant communities if significant
Using git-cliff for Changelog Generation¶
Configuration for git-cliff is available in .cliff.toml to support automated changelog generation from conventional commits.
Generate Unreleased Changelog¶
Preview changes since the last release:
Preview Next Release¶
Generate changelog for a specific version:
Prepend to CHANGELOG.md¶
Update CHANGELOG.md with the next release:
Configuration¶
See .cliff.toml for: - Conventional commit mapping (feat → Added, fix → Fixed, etc.) - Keep a Changelog section formatting - Commit filtering rules
Planned: Full Release Automation (v1.9.0)¶
Complete release automation with mise run release task is planned for v1.9.0 Batch 5.
Planned features: - Automated version bumping - Tag creation with GPG signing - GitHub release creation - Integration with Renovate for dependency changelogs
Progress tracking: See ROADMAP.md v1.9.0 Batch 5
Release Cadence¶
There is no fixed release schedule. Releases are created when:
- A significant batch of features is complete (typically 1-2 weeks)
- Critical bugs need to be fixed
- A roadmap version milestone is reached
Typical release frequency: 1-2 releases per month
Testing Before Release¶
Before tagging a release, ensure:
- ✅ CI passes: All GitHub Actions workflows succeed
- ✅ Tests pass locally: Run
mise run test(full test suite) - ✅ Doctor passes: Run
mise run doctorto verify health - ✅ Installation works: Test bootstrap on fresh environment (if possible)
- ✅ Documentation current: README and docs reflect changes
Emergency Hotfix Process¶
For critical bugs requiring immediate release:
-
Create hotfix branch:
-
Fix the bug and commit
-
Update CHANGELOG.md with patch version
-
Merge to main:
-
Tag and release:
References¶
- CHANGELOG.md - Project changelog
- ROADMAP.md - Version planning and milestones
- ADR-009 - Tool version pinning strategy
- Semantic Versioning
- Keep a Changelog
- git-cliff - Planned automation tool
Questions?¶
- How do I know what version I have installed? Check
docs/ROADMAP.mdordocs/meta/CHANGELOG.md - Why no version number in a file? Version is tracked in documentation, not code (ADR decision)
- When will automated releases be ready? See ROADMAP.md v1.9.0 Batch 5 for status