Quick Start
# Install changelogs
|
# Initialize changelogs in your workspace
# Add a changelog for your changes
# See what would be released
# Apply version bumps and generate changelogs
Workflows
flowchart LR
subgraph Development
A[Make Changes] --> B[Open PR]
B --> C{AI generates<br/>changelog}
C --> D[Merge PR]
end
subgraph Release
D --> E[/RC PR created with changelog/]
E --> F[Merge RC PR]
F --> G[/📦 Packages released/]
end
Development
| # | Step | Example |
|---|---|---|
| 1 | Implement feature & make changes to your code | |
| 2 | Open a PR to propose your changes | PR #20 |
| → | Changelogs are auto-generated via AI | Action · Generated |
| 3 | Merge the PR – changelogs get staged | .changelog/ |
Release (Candidate)
| # | Step | Example |
|---|---|---|
| 1 | Push to main triggers the Release Candidate workflow | Action |
| 2 | Workflow creates or updates a Release Candidate PR | PR #21 |
| 3 | Merge the PR to release packages and publish the changelog | v0.4.0 release |
Installation
Pre-built binaries (recommended)
|
Or download directly from GitHub Releases:
| Platform | Download |
|---|---|
| Linux (x86_64) | changelogs-linux-amd64 |
| macOS (Intel) | changelogs-darwin-amd64 |
| macOS (Apple Silicon) | changelogs-darwin-arm64 |
Commands
| Command | Description |
|---|---|
init |
Initialize .changelog/ directory |
add |
Create a new changelog interactively |
add --ai "<command>" |
Generate changelog using AI (see Supported AI Providers) |
status |
Show pending changelogs and releases |
version |
Apply version bumps and update changelogs |
publish |
Publish unpublished packages to crates.io |
Configuration
.changelog/config.toml:
# How to bump packages that depend on changed packages
= "patch" # patch, minor, or none
[]
= "per-crate" # or "root"
# Fixed groups: all always share the same version
[[]]
= ["crate-a", "crate-b"]
# Linked groups: versions sync when released together
[[]]
= ["sdk-core", "sdk-macros"]
# Packages to ignore
= []
Changelog Format
.changelog/brave-lions-dance.md:
my-crate: minor
other-crate: patch
Added new feature X that does Y.
Fixed bug Z in the parser.
Supported AI Providers
The --ai flag and GitHub Action ai input accept any CLI command that reads from stdin and outputs text. The diff is piped to the command, and the output becomes the changelog entry.
| Provider | Command | Required Secret | Install |
|---|---|---|---|
| Amp | amp -x |
AMP_API_KEY |
npm install -g @sourcegraph/amp |
| Claude Code | claude -p |
ANTHROPIC_API_KEY |
npm install -g @anthropic-ai/claude-code |
| OpenAI | openai api chat.completions.create -m gpt-4o |
OPENAI_API_KEY |
pip install openai |
| Gemini | gemini |
GOOGLE_API_KEY |
npm install -g @anthropic-ai/gemini-cli |
Examples
# Using Amp
# Using Claude
GitHub Actions
Auto-generate Changelogs on PRs
name: Changelog
on:
pull_request:
types:
jobs:
changelog:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- run: npm install -g @sourcegraph/amp
- uses: wevm/changelogs-rs/gen@master
with:
ai: 'amp -x'
env:
AMP_API_KEY: ${{ secrets.AMP_API_KEY }}
Create RC PR or Release
name: Release
on:
push:
branches:
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: wevm/changelogs-rs@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
The release action automatically handles both versioning and publishing:
- If changelogs exist → Creates/updates a "Version Packages" PR
- If no changelogs (PR was just merged) → Publishes unpublished packages to crates.io
Action Inputs
| Input | Description | Default |
|---|---|---|
branch |
Branch name for the version PR | changelog-release/main |
commit |
Commit message for version bump | Version Packages |
conventional-commit |
Use conventional commit format | false |
crate-token |
Crates.io API token for publishing (Rust) | - |
pypi-token |
PyPI API token for publishing (Python) | - |
Action Outputs
| Output | Description |
|---|---|
hasChangelogs |
Whether there are pending changelogs |
pullRequestNumber |
The PR number if created/updated |
published |
Whether packages were published |
publishedPackages |
JSON array of published packages |
Ecosystem Notes
Python
Changelogs supports Python packages using PEP 621 pyproject.toml files.
Requirements:
pyproject.tomlwith[project]section containingnameandversion- Static version (dynamic versions not supported)
- Semantic versioning (no PEP 440 epochs or local versions)
python -m buildandtwineinstalled (pip install build twine)
Limitations:
- Single-package repos only (no Python monorepo support)
- PEP 621 only (no
setup.pyorsetup.cfg)
License
MIT OR Apache-2.0