Maintainers release runbook¶
How to cut a multi-channel release. Contributors: see CONTRIBUTING.md.
Pre-flight¶
- Update versions together:
Cargo.toml/ workspace versionspyproject.toml- Binding manifests if versioned independently
- Docs that hard-code
0.x.y(getting-started expected output, migration pins) - Update CHANGELOG.md (move Unreleased → version section)
- Sync conformance manifests:
src/conformance/manifest.jsontests/conformance/manifest.json- Local gates:
cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test --locked
cargo test --test phase_0_10 --locked
cargo test --test phase_0_11 --locked
cargo test --test portable_relational --locked
cargo run --bin dtcs -- conformance run --profile all
pytest python/tests -v
NO_MKDOCS_2_WARNING=true ./scripts/check-docs.sh
-
Changelog → docs checklist (when behavior or versions change):
-
[ ] versioning.md / getting-started expected
dtcs versionoutput - [ ] cli-guide.md command table + new flags
- [ ] api/python.md / api/rust.md / WASM/Node
- [ ] json-output.md envelope examples (
specVersion, new commands) - [ ] troubleshooting.md diagnostic remediation table
- [ ] Migration guides / FAQ if upgrade story changes
-
[ ] MkDocs
nav+ hub tables in docs/README.md -
Binding smokes (from repo):
Tag and publish¶
.github/workflows/release.yml publishes crates.io / PyPI when secrets are configured. npm publish runs only when NPM_TOKEN is set.
Verify¶
- crates.io / PyPI show
0.x.y pip install dtcs==0.x.y && dtcs version- docs.rs builds for the tag
- Read the Docs picks up
main/ tags as configured - Optional:
npm view @eddiethedean/dtcs versionwhen npm publish is enabled
Failure modes¶
| Symptom | Check |
|---|---|
| PyPI missing wheel | maturin/release job logs; Python version matrix |
| crates.io reject | version already published; cargo publish --dry-run |
| npm skipped | NPM_TOKEN unset (expected) |
| Conformance drift | dual manifest sync; phase_0_10 / phase_0_11 / portable_relational tests |