README
¶
Changelog Generator
A high-performance changelog generator for Git repositories that automatically creates comprehensive, well-formatted changelogs from your git history and GitHub pull requests.
Features
- One-pass git history walking: Efficiently processes entire repository history in a single pass
- Automatic PR detection: Extracts pull request information from merge commits
- GitHub API integration: Fetches detailed PR information including commits, authors, and descriptions
- Smart caching: SQLite-based caching for instant incremental updates
- Unreleased changes: Tracks all commits since the last release
- Concurrent processing: Parallel GitHub API calls for improved performance
- Flexible output: Generate complete changelogs or target specific versions
- GraphQL optimization: Ultra-fast PR fetching using GitHub GraphQL API (~5-10 calls vs 1000s)
- Intelligent sync: Automatically syncs new PRs every 24 hours or when missing PRs are detected
- AI-powered summaries: Optional Fabric integration for enhanced changelog summaries
- Advanced caching: Content-based change detection for AI summaries with hash comparison
- Author type detection: Distinguishes between users, bots, and organizations
- Lightning-fast incremental updates: SHA→PR mapping for instant git operations
Installation
go install github.com/danielmiessler/fabric/cmd/generate_changelog@latest
Usage
Basic usage (generate complete changelog)
generate_changelog
Save to file
generate_changelog -o CHANGELOG.md
Generate for specific version
generate_changelog -v v1.4.244
Limit to recent versions
generate_changelog -l 10
Using GitHub token for private repos or higher rate limits
export GITHUB_TOKEN=your_token_here
generate_changelog
# Or pass directly
generate_changelog --token your_token_here
AI-enhanced summaries
# Enable AI summaries using Fabric
generate_changelog --ai-summarize
# Use custom model for AI summaries
FABRIC_CHANGELOG_SUMMARIZE_MODEL=claude-opus-4 generate_changelog --ai-summarize
Cache management
# Rebuild cache from scratch
generate_changelog --rebuild-cache
# Force a full PR sync from GitHub
generate_changelog --force-pr-sync
# Disable cache usage
generate_changelog --no-cache
# Use custom cache location
generate_changelog --cache /path/to/cache.db
Command Line Options
Flag | Short | Description | Default |
---|---|---|---|
--repo |
-r |
Repository path | . (current directory) |
--output |
-o |
Output file | stdout |
--limit |
-l |
Limit number of versions | 0 (all) |
--version |
-v |
Generate for specific version | |
--save-data |
Save version data to JSON | false | |
--cache |
Cache database file | ./cmd/generate_changelog/changelog.db |
|
--no-cache |
Disable cache usage | false | |
--rebuild-cache |
Rebuild cache from scratch | false | |
--force-pr-sync |
Force a full PR sync from GitHub | false | |
--token |
GitHub API token | $GITHUB_TOKEN |
|
--ai-summarize |
Generate AI-enhanced summaries using Fabric | false | |
--release |
Update GitHub release description with AI summary for version |
Output Format
The generated changelog follows this structure:
# Changelog
## Unreleased
### PR [#1601](url) by [author](profile): PR Title
- Change description 1
- Change description 2
### Direct commits
- Direct commit message 1
- Direct commit message 2
## v1.4.244 (2025-07-09)
### PR [#1598](url) by [author](profile): PR Title
- Change description
...
How It Works
- Git History Walking: The tool walks through your git history from newest to oldest commits
- Version Detection: Identifies version bump commits (pattern: "Update version to vX.Y.Z")
- PR Extraction: Detects merge commits and extracts PR numbers
- GitHub API Calls: Fetches detailed PR information in parallel batches
- Change Extraction: Extracts changes from PR commit messages or PR body
- Formatting: Generates clean, organized markdown output
Performance
- Native Go libraries: Uses go-git and go-github for maximum performance
- Concurrent API calls: Processes up to 10 GitHub API requests in parallel
- Smart caching: SQLite cache eliminates redundant API calls
- Incremental updates: Only processes new commits on subsequent runs
- GraphQL optimization: Uses GitHub GraphQL API to fetch all PR data in ~5-10 calls
- AI-powered summaries: Optional Fabric integration with intelligent caching
- Content-based change detection: AI summaries only regenerated when content changes
- Lightning-fast git operations: SHA→PR mapping stored in database for instant lookups
Major Optimization: GraphQL + Advanced Caching
The tool has been optimized to drastically reduce GitHub API calls and improve performance:
Previous approach: Individual API calls for each PR (2 API calls per PR)
- For a repo with 500 PRs: 1,000 API calls
Current approach: GraphQL batch fetching with intelligent caching
- For a repo with 500 PRs: ~5-10 GraphQL calls (initial fetch) + 0 calls (subsequent runs with cache)
- 99%+ reduction in API calls after initial run!
The optimization includes:
- GraphQL Batch Fetch: Uses GitHub's GraphQL API to fetch all merged PRs with commits in minimal calls
- Smart Caching: Stores complete PR data, commits, and SHA mappings in SQLite
- Incremental Sync: Only fetches PRs merged after the last sync timestamp
- Automatic Refresh: PRs are synced every 24 hours or when missing PRs are detected
- AI Summary Caching: Content-based change detection prevents unnecessary AI regeneration
- Fallback Support: If GraphQL fails, falls back to REST API batch fetching
- Lightning Git Operations: Pre-computed SHA→PR mappings for instant commit association
Requirements
- Go 1.24+ (for installation from source)
- Git repository
- GitHub token (optional, for private repos or higher rate limits)
- Fabric CLI (optional, for AI-enhanced summaries)
Authentication
The tool supports GitHub authentication via:
- Environment variable:
export GITHUB_TOKEN=your_token
- Command line flag:
--token your_token
.env
file in the same directory as the binary
Environment File Support
Create a .env
file next to the generate_changelog
binary:
GITHUB_TOKEN=your_github_token_here
FABRIC_CHANGELOG_SUMMARIZE_MODEL=claude-sonnet-4-20250514
The tool automatically loads .env
files for convenient configuration management.
Without authentication, the tool is limited to 60 GitHub API requests per hour.
Caching
The SQLite cache stores:
- Version information and commit associations
- Pull request details (title, body, commits, authors)
- Last processed commit SHA for incremental updates
- Last PR sync timestamp for intelligent refresh
- AI summaries with content-based change detection
- SHA→PR mappings for lightning-fast git operations
Cache benefits:
- Instant changelog regeneration
- Drastically reduced GitHub API usage (99%+ reduction after initial run)
- Offline changelog generation (after initial cache build)
- Automatic PR data refresh every 24 hours
- Batch database transactions for better performance
- Content-aware AI summary regeneration
AI-Enhanced Summaries
The tool can generate AI-powered summaries using Fabric for more polished, professional changelogs:
# Enable AI summarization
generate_changelog --ai-summarize
# Custom model (default: claude-sonnet-4-20250514)
FABRIC_CHANGELOG_SUMMARIZE_MODEL=claude-opus-4 generate_changelog --ai-summarize
AI Summary Features
- Content-based change detection: AI summaries are only regenerated when version content changes
- Intelligent caching: Preserves existing summaries and only processes changed versions
- Content hash comparison: Uses SHA256 hashing to detect when "Unreleased" content changes
- Automatic fallback: Falls back to raw content if AI processing fails
- Error detection: Identifies and handles AI processing errors gracefully
- Minimum content filtering: Skips AI processing for very brief content (< 256 characters)
AI Model Configuration
Set the model via environment variable:
export FABRIC_CHANGELOG_SUMMARIZE_MODEL=claude-opus-4
# or
export FABRIC_CHANGELOG_SUMMARIZE_MODEL=gpt-4
AI summaries are cached and only regenerated when:
- Version content changes (detected via hash comparison)
- No existing AI summary exists for the version
- Force rebuild is requested
Contributing
This tool is part of the Fabric project. Contributions are welcome!
License
The MIT License. Same as the Fabric project.
Documentation
¶
There is no documentation for this package.