Release Process - djvolz/coda-code-assistant GitHub Wiki
Coda uses an automated release process based on conventional commits. Releases are triggered automatically when specific types of commits are merged to the main branch.
Coda uses date-based versioning in the format: year.month.day.HHMM
- Example:
2025.1.3.1430for January 3, 2025 at 14:30 UTC - Versions are automatically updated during the release process
- No manual version bumping is required
Releases are automatically created when commits with the following prefixes are merged to main:
-
feat:orfeature:- New features (triggers release) -
fix:orbugfix:- Bug fixes (triggers release) -
perf:- Performance improvements (triggers release) -
refactor:- Code refactoring (triggers release)
Commits that do NOT trigger releases:
-
docs:- Documentation changes -
style:- Code style changes -
test:- Test additions or changes -
chore:- Build process or auxiliary tool changes
Follow the Conventional Commits specification:
<type>(<scope>): <subject>
<body>
<footer>
# Feature
feat(cli): add support for multiple providers
# Bug fix
fix(oci): handle streaming timeout errors
# Breaking change
feat(api)!: redesign provider interface
BREAKING CHANGE: The provider interface has been completely redesigned.
Old providers will need to be updated to the new interface.
# With GitHub issue reference
fix(cli): correct version display format
Fixes #123- Automatic Trigger: When commits are pushed to main, the release workflow checks for releasable commits
- Version Update: The version is automatically updated to the current timestamp
- Tests Run: All unit tests are executed to ensure quality
-
Build: The package is built using
uv build - Changelog Generation: A changelog is automatically generated from commit messages
- GitHub Release: A new release is created with the changelog and built artifacts
- PyPI Upload: If configured, the package is uploaded to PyPI
To force a release without conventional commits:
- Go to Actions → Release workflow
- Click "Run workflow"
- Check "Force a release even without conventional commits"
- Click "Run workflow"
To skip the release process for a commit, include [skip ci] or [skip release] in the commit message:
git commit -m "chore: update dependencies [skip release]"To manually update the version locally:
make versionBefore major releases:
- All tests passing
- Documentation updated
- CHANGELOG reviewed
- Breaking changes documented
- Migration guide provided (if needed)
- Check that your commit message follows conventional commits format
- Ensure the commit type is one that triggers releases
- Check GitHub Actions for any workflow errors
- The version is only updated during the release process
- Local development always shows the last released version
- Use
make versionto update locally if needed
- Ensure
PYPI_API_TOKENis set in repository secrets - Check that the package name is available on PyPI
- Verify the build artifacts are valid
- Use conventional commits: This ensures automatic releases work correctly
- Write descriptive commit messages: They become part of the changelog
- Group related changes: Use feature branches to group related commits
- Test before merging: Ensure all tests pass before merging to main
-
Document breaking changes: Use the
BREAKING CHANGE:footer when needed
- Development-Guide - Development setup and contributing guidelines
- Roadmap - Project roadmap and version history