Changelog & Release Notes Writer
Generate professional changelogs and release notes from version control history.
Core Workflow
- •Analyze commits: Parse git history since last release
- •Categorize changes: Group by type (feat, fix, docs, etc.)
- •Identify breaking changes: Flag incompatible changes
- •Extract highlights: Surface most important changes
- •Format document: Follow Keep a Changelog format
- •Suggest version: Recommend semantic version bump
- •Generate release notes: Create user-friendly summary
Commit Analysis
Extract Information From
- •Commit messages (preferably conventional commits)
- •PR titles and descriptions
- •Issue references (#123)
- •Merge commit messages
- •Commit authors
Parse Patterns
code
feat(auth): add OAuth2 support ^ ^ ^ | | └─ Description | └─ Scope (optional) └─ Type
Types to Categories:
- •
feat→ Added - •
fix→ Fixed - •
docs→ Documentation - •
style,refactor→ Changed - •
perf→ Performance - •
test→ Testing - •
chore,ci→ Internal - •
BREAKING CHANGE→ Breaking Changes
Changelog Format (Keep a Changelog)
markdown
# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added - New feature X - Support for Y ### Changed - Updated Z behavior ### Fixed - Resolved issue #123 ## [2.1.0] - 2024-01-15 ### Added - OAuth2 authentication support - User profile management API - Dark mode toggle ### Changed - Improved error messages - Updated dependencies to latest versions ### Deprecated - Legacy authentication method (will be removed in 3.0.0) ### Fixed - Memory leak in WebSocket connection - Incorrect date formatting in reports - Race condition in concurrent requests ### Security - Patched XSS vulnerability in user input ## [2.0.0] - 2023-12-01 ### Breaking Changes - ⚠️ Removed support for Node.js 16 - ⚠️ Changed API response format for `/users` endpoint - ⚠️ Renamed `config.yaml` to `config.yml` ### Added - Complete API rewrite with improved performance - WebSocket support for real-time updates ### Migration Guide See [MIGRATION_v2.md](./docs/MIGRATION_v2.md) for upgrade instructions. [unreleased]: https://github.com/user/project/compare/v2.1.0...HEAD [2.1.0]: https://github.com/user/project/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/user/project/releases/tag/v2.0.0
Release Notes Format
markdown
# Release v2.1.0 - "Feature Release Name" Released: January 15, 2024 ## 🎉 Highlights This release brings major improvements to authentication and user experience: - **OAuth2 Support**: Users can now sign in with Google, GitHub, and Microsoft - **Dark Mode**: Toggle between light and dark themes - **Performance**: 40% faster API response times ## ✨ New Features - OAuth2 authentication with popular providers (#456) - User profile management API (#478) - Dark mode toggle in settings (#492) - Export data in CSV format (#501) ## 🐛 Bug Fixes - Fixed memory leak in WebSocket connections (#489) - Resolved incorrect date formatting in reports (#495) - Fixed race condition in concurrent API requests (#503) ## 🔄 Changes - Improved error messages across the application - Updated all dependencies to latest stable versions - Refined UI animations for smoother experience ## 🔒 Security - Patched XSS vulnerability in user input validation - Updated JWT library to address CVE-2024-1234 ## 📚 Documentation - Added OAuth2 setup guide - Updated API reference with new endpoints - Improved troubleshooting section ## 🙏 Contributors Thank you to all contributors who made this release possible: - @alice - OAuth2 implementation - @bob - Dark mode feature - @charlie - Bug fixes and testing ## 📦 Installation ```bash npm install project-name@2.1.0 # or yarn add project-name@2.1.0 ```
🔗 Links
Note: This is a minor release. No breaking changes. Safe to upgrade from 2.0.x.
code
## Semantic Versioning Rules Given a version number MAJOR.MINOR.PATCH (e.g., 2.1.0): 1. **MAJOR** (2.x.x → 3.x.x) - Breaking changes - Incompatible API changes - Removed features 2. **MINOR** (2.1.x → 2.2.x) - New features - Backward-compatible functionality - Deprecated features 3. **PATCH** (2.1.0 → 2.1.1) - Bug fixes - Security patches - Performance improvements **Special versions:** - `0.x.x` - Initial development (breaking changes allowed in minor) - `x.y.0-alpha.1` - Pre-release - `x.y.0-beta.2` - Beta release - `x.y.0-rc.1` - Release candidate ## Git Commands for Changelog Generation ```bash # Get commits since last tag git log $(git describe --tags --abbrev=0)..HEAD --oneline # Get commits between two tags git log v2.0.0..v2.1.0 --oneline # Get commits with PR numbers git log --merges --pretty=format:"%s" v2.0.0..HEAD # Get contributors git log v2.0.0..HEAD --format='%aN' | sort -u # Get commit count by type git log v2.0.0..HEAD --oneline | grep -E '^[a-f0-9]+ (feat|fix|docs)' | cut -d' ' -f2 | sort | uniq -c
Breaking Changes Detection
Look for these indicators:
- •Commit message contains
BREAKING CHANGE: - •Commit type has
!(e.g.,feat!:) - •PR labeled with "breaking-change"
- •Major dependency updates
- •API endpoint changes
- •Config file format changes
Document clearly:
markdown
### Breaking Changes
⚠️ **API Response Format Changed**
The `/api/users` endpoint now returns:
```json
// Before
{ "data": [...] }
// After
{ "users": [...], "total": 100 }
```
Migration: Update your API client to access users instead of data.
code
## Automation Tools ### Using conventional-changelog ```bash npm install -g conventional-changelog-cli # Generate changelog conventional-changelog -p angular -i CHANGELOG.md -s # Generate for specific version conventional-changelog -p angular -i CHANGELOG.md -s -r 0
Using git-cliff
bash
# Install git-cliff cargo install git-cliff # Generate changelog git-cliff --tag v2.1.0 > CHANGELOG.md # Generate release notes git-cliff --tag v2.1.0 --unreleased
GitHub Release Script
bash
#!/bin/bash # scripts/release.sh VERSION=$1 PREVIOUS_TAG=$(git describe --tags --abbrev=0) # Generate release notes gh release create "$VERSION" \ --title "Release $VERSION" \ --notes "$(git log $PREVIOUS_TAG..HEAD --pretty=format:'- %s')"
User-Facing vs Developer-Facing
User-Facing (Release Notes)
- •Focus on benefits and features
- •Less technical jargon
- •Include screenshots/demos
- •Highlight user experience improvements
- •Provide upgrade instructions
Developer-Facing (Changelog)
- •Technical details
- •API changes
- •Breaking changes with migration guides
- •Dependencies updates
- •Internal refactorings
Templates by Project Type
Library/Package
Focus on: API changes, breaking changes, new methods
Application
Focus on: New features, bug fixes, UI improvements
CLI Tool
Focus on: New commands, flag changes, behavior changes
API Service
Focus on: Endpoint changes, performance, security
Best Practices
- •Be specific: "Fixed login bug" → "Fixed session timeout on mobile"
- •Link issues: Reference GitHub issues (#123)
- •Credit contributors: Acknowledge work
- •Highlight impact: Mark breaking changes clearly
- •Group logically: By type, not chronologically
- •Update regularly: With each release
- •Follow conventions: Keep a Changelog format
- •Semantic versioning: Use correctly
Changelog Entry Examples
Good Examples
markdown
### Added - OAuth2 authentication support (#456) - @alice - Export data in CSV format with custom column selection (#501) ### Fixed - Resolved memory leak in WebSocket connections affecting long-running sessions (#489) - Fixed race condition in concurrent API requests that caused data inconsistency (#503)
Bad Examples
markdown
### Added - Added stuff - New feature ### Fixed - Fixed bug - Updates
Version Suggestion Algorithm
code
If breaking changes detected: MAJOR++, MINOR=0, PATCH=0 Else if new features: MINOR++, PATCH=0 Else if only fixes: PATCH++
Release Checklist
Before publishing release:
- • Review all commits since last release
- • Identify breaking changes
- • Categorize changes properly
- • Update CHANGELOG.md
- • Write release notes
- • Update version in package.json/pyproject.toml
- • Create git tag
- • Push tag to trigger CI/CD
- • Publish to package registry (npm, PyPI, etc.)
- • Create GitHub release with notes
- • Announce on relevant channels
Output Checklist
Every changelog generation should provide:
- • Formatted CHANGELOG.md following Keep a Changelog
- • Release notes draft (user-friendly)
- • Semantic version suggestion (X.Y.Z)
- • Breaking changes clearly marked
- • Migration guide for breaking changes
- • Git tag command to run
- • Links to compare view