changelogs
A Rust rewrite of changesets for Cargo workspaces.
Installation
Quick Start
# 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
- Implement feature & make changes to your code
- Open a PR to propose your changes
- Changelogs are auto-generated via AI (if
wevm/changelogs-rs/genaction set up) - Changelogs can be manually generated with
changelogs add
- Changelogs are auto-generated via AI (if
- Merge the PR
- Changelogs are kept in the
.changelog/directory
- Changelogs are kept in the
Release (Candidate)
- Pushes to main trigger the Release Candidate workflow
- Workflow creates or updates a Release Candidate PR with RC changelog
- Merge the PR to release and publish the changelog
Commands
| Command | Description |
|---|---|
init |
Initialize .changelog/ directory |
add |
Create a new changelog interactively |
add --ai "claude -p" |
Generate changelog using AI |
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.
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
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- run: cargo install changelogs
- run: npm install -g @anthropic-ai/claude-code
- uses: wevm/changelogs-rs/gen@main
with:
ai: 'claude -p'
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
Create RC PR or Release
name: Release
on:
push:
branches:
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo install changelogs
- uses: wevm/changelogs-rs@v1
with:
version: changelogs version
publish: changelogs publish
crate-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
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 |
|---|---|---|
version |
Command to run for versioning | changelogs version |
publish |
Command to run for publishing | - |
crate-token |
Crates.io API token for publishing | - |
commit |
Commit message for version bump | Version Packages |
title |
Pull request title | Version Packages |
branch |
Branch name for the version PR | changelog-release/main |
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 |
License
MIT OR Apache-2.0