Changelog¶
All notable changes to this project are documented in this file. The changelog is automatically generated by semantic-release based on commit messages.
Auto-generated Content
This changelog is automatically generated from commit messages following Conventional Commits. Do not edit manually.
How It Works¶
The changelog is generated automatically when:
- Commits are pushed to the
mainbranch - Commit messages follow Conventional Commits format
- The semantic-release workflow determines version bumps
- Changelog entries are created and grouped by type
Changelog Format¶
Entries are organized by:
- Version number (following semantic versioning)
- Release date
- Change type (Features, Bug Fixes, etc.)
- Links to commits and pull requests
Entry Types¶
| Commit Type | Changelog Section | Example |
|---|---|---|
feat: |
Features | New functionality added |
fix: |
Bug Fixes | Bugs that were fixed |
perf: |
Performance | Performance improvements |
revert: |
Reverts | Reverted changes |
Other Types
Commits with types like docs:, style:, refactor:, test:, and chore: don't appear in the changelog but still follow Conventional Commits format.
Current Changelog¶
The current changelog is maintained in the root CHANGELOG.md file. Below is a recent excerpt:
1.16.0 (2026-02-03)¶
Features¶
- remove deprecated extension (60bdcb9)
1.15.0 (2026-01-23)¶
Features¶
- Update template-repo-sync.yaml (bc814fe)
1.14.0 (2026-01-17)¶
Bug Fixes¶
Features¶
- Change license update script to use repo owner (956ca67)
1.13.2 (2026-01-12)¶
Bug Fixes¶
- Update gitleaks.yaml (c04fd31)
View Full Changelog
View the complete changelog in the CHANGELOG.md file in the repository root.
Understanding Versions¶
This project follows Semantic Versioning (SemVer):
Version Components¶
MAJOR (Breaking Changes)
- Incompatible API changes
- Breaking changes in behavior
- Requires user action to upgrade
- Triggered by: BREAKING CHANGE: in footer or ! after type
Example:
MINOR (New Features)
- New functionality added
- Backwards-compatible changes
- No breaking changes
- Triggered by: feat: commit type
Example:
PATCH (Bug Fixes)
- Bug fixes and minor improvements
- Backwards-compatible fixes
- Performance improvements
- Triggered by: fix:, perf:, revert: commit types
Example:
Changelog Best Practices¶
Writing Changelog-Friendly Commits¶
Good Examples¶
# Clear, descriptive feature
feat(auth): add OAuth2 authentication with Google and GitHub providers
# Specific bug fix
fix(api): resolve null pointer exception when user email is null
# Performance improvement
perf(db): optimize user query with database indexes
Poor Examples¶
# Too vague
feat: add stuff
# Not descriptive
fix: fix bug
# Wrong type (should be feat)
update: add new feature
Creating Meaningful Entries¶
Include Context in Body¶
feat(auth): add password reset functionality
Implements password reset flow with email verification.
Users receive a time-limited reset link via email.
Includes rate limiting to prevent abuse.
Closes #142
This creates a detailed changelog entry:
### Features
* **auth:** add password reset functionality ([abc123](link))
Implements password reset flow with email verification.
Users receive a time-limited reset link via email.
Includes rate limiting to prevent abuse.
Closes #142
Link Issues¶
Always link related issues:
This creates clickable links in the changelog.
Changelog Generation Process¶
1. Analyze Commits¶
Semantic-release analyzes commits since the last release:
2. Determine Version¶
Based on commit types:
- Has
feat:? → Minor bump (1.0.0 → 1.1.0) - Has
fix:only? → Patch bump (1.0.0 → 1.0.1) - Has
BREAKING CHANGE:? → Major bump (1.0.0 → 2.0.0) - Only
docs:,chore:? → No release
3. Generate Notes¶
Group commits by type:
# [1.1.0] (2024-03-15)
### Features
* **ui:** add new component ([abc123](link))
### Bug Fixes
* **api:** resolve bug ([def456](link))
4. Update Files¶
- Update
CHANGELOG.md - Create GitHub release
- Create git tag
- Commit changes
Customizing Changelog¶
Change Grouping¶
Edit .releaserc.json:
{
"plugins": [
["@semantic-release/release-notes-generator", {
"preset": "angular",
"presetConfig": {
"types": [
{"type": "feat", "section": "✨ Features"},
{"type": "fix", "section": "🐛 Bug Fixes"},
{"type": "perf", "section": "⚡ Performance"},
{"type": "docs", "section": "📚 Documentation", "hidden": false}
]
}
}]
]
}
Add Emojis¶
{
"presetConfig": {
"types": [
{"type": "feat", "section": "✨ Features"},
{"type": "fix", "section": "🐛 Bug Fixes"},
{"type": "perf", "section": "⚡ Performance"},
{"type": "revert", "section": "⏪ Reverts"}
]
}
}
Custom Commit Types¶
Include additional commit types:
{
"presetConfig": {
"types": [
{"type": "feat", "section": "Features"},
{"type": "fix", "section": "Bug Fixes"},
{"type": "docs", "section": "Documentation", "hidden": false},
{"type": "style", "section": "Styling", "hidden": false},
{"type": "refactor", "section": "Refactoring", "hidden": false}
]
}
}
Changelog Workflow¶
For Contributors¶
-
Write conventional commits
-
Push to branch
-
Create pull request
- PR title must follow Conventional Commits
- Changelog will be generated on merge
For Maintainers¶
- Review and merge PR
- Verify PR title is conventional
-
Squash and merge (preserves PR title)
-
Automatic release
- Release workflow runs automatically
- Changelog is updated
- GitHub release is created
-
Tag is pushed
-
Verify release
- Check Releases tab
- Verify CHANGELOG.md
- Confirm version tag
Viewing Changelog¶
In Repository¶
File: CHANGELOG.md in repository root
# View locally
cat CHANGELOG.md
# View in browser
https://github.com/username/repo/blob/main/CHANGELOG.md
In Releases¶
GitHub Releases: Repository → Releases tab
Each release includes:
- Version number and date
- Release notes (from changelog)
- Links to commits
- Download links for source code
In Documentation¶
This page: Changelog
A curated view of recent changes with context and explanations.
Common Questions¶
Why isn't my commit in the changelog?¶
Reason: Only certain commit types appear in the changelog:
- feat: - Appears in Features section
- fix: - Appears in Bug Fixes section
- perf: - Appears in Performance section
- Other types (docs:, chore:, etc.) are hidden by default
How do I fix a wrong changelog entry?¶
Don't edit CHANGELOG.md manually. Instead:
- The entry is based on commit messages
- Use
git revertto undo changes - Make a new commit with the correct message
- The next release will include the correction
Can I skip a release?¶
Yes, using skip keywords:
Or in PR title:
How do I create a pre-release?¶
Configure beta/alpha branches in .releaserc.json:
Additional Resources¶
- Semantic Versioning - Version numbering specification
- Conventional Commits - Commit message convention
- Keep a Changelog - Changelog best practices
- Semantic Release - Automated releases
- Commit Conventions - Detailed commit guide
Questions? Open a discussion.