3.5 KiB
Release Process
This is the release checklist for SeaORM release candidates.
1. Choose Version
Check the latest published SeaORM version:
cargo search sea-orm --limit 5
git tag --list '2.0.0-rc*' --sort=-v:refname | head
For a new release candidate, bump to the next 2.0.0-rc.N.
2. Start Clean
Release from master after the release PR has been merged and CI has passed.
git switch master
git pull --ff-only
git status --short
The worktree should be clean before starting.
3. Bump Versions
Run the bump script:
bash build-tools/bump.sh 2.0.0-rc.N
This creates two commits:
2.0.0-rc.N
update examples
The first commit bumps the publishable crate manifests:
sea-ormsea-orm-codegensea-orm-clisea-orm-macrossea-orm-migrationsea-orm-sync
The second commit bumps example sea-orm / sea-orm-migration dependency comments.
bump.sh detects GNU vs BSD sed, so it runs on both Linux and macOS.
4. Write Changelog
Create a release note file:
changelog/2.0.0-rc.N.md
Then link it from CHANGELOG.md under 2.0.0 - pending > Release Candidates.
The changelog should call out:
- user-facing features and fixes
- dependency upgrades
- MSRV changes
- compatibility notes
- expected behavior changes
- example or migration updates
Commit it separately:
git add CHANGELOG.md changelog/2.0.0-rc.N.md
git commit -m "Add changelog for 2.0.0-rc.N"
5. Validate Locally
Run the main workspace and the separate workspaces:
cargo check --workspace
cargo check --manifest-path sea-orm-cli/Cargo.toml
cargo check --manifest-path sea-orm-migration/Cargo.toml
cargo check --manifest-path sea-orm-sync/Cargo.toml
Known warnings are acceptable only if they already exist and are unrelated to the release.
6. Push and Wait for CI
Push master:
git push origin master
Wait for GitHub Actions to pass before publishing. Do not publish while CI is still running or red.
7. Publish Crates
After CI passes, run:
bash build-tools/publish.sh
The publish order is:
sea-orm-codegensea-orm-clisea-orm-macrossea-ormsea-orm-migrationsea-orm-sync
If crates.io indexing causes a dependent publish to fail, wait briefly and retry the failed crate.
8. Tag and GitHub Release
After publishing succeeds:
git tag 2.0.0-rc.N
git push origin 2.0.0-rc.N
Create a GitHub Release using changelog/2.0.0-rc.N.md as the release body.
8b. Release prebuilt sea-orm-cli binaries
The .github/workflows/sea-orm-cli-release.yml workflow builds prebuilt
sea-orm-cli binaries and powers cargo binstall sea-orm-cli. It triggers on a
separate tag namespace, sea-orm-cli@<version>, not the 2.0.0-rc.N release
tag — so it does nothing unless that tag is pushed.
Create the tag as annotated, because the workflow's gh release create --notes-from-tag reads the tag's message (a lightweight tag yields empty notes):
git tag -a "sea-orm-cli@2.0.0-rc.N" -m "sea-orm-cli 2.0.0-rc.N"
git push origin "sea-orm-cli@2.0.0-rc.N"
The workflow then builds the 5 targets, attaches the archives to a draft release,
and publishes it. Confirm the assets appear on the sea-orm-cli@2.0.0-rc.N
release and that cargo binstall sea-orm-cli resolves.
9. Verify
Confirm crates.io shows the new versions:
cargo search sea-orm --limit 5
cargo search sea-orm-cli --limit 5
cargo search sea-orm-migration --limit 5
cargo search sea-orm-sync --limit 5
Also check that docs.rs builds have started or completed.