A changeset-driven release manager for zingolabs repositories: it derives
versions and changelogs from committed changesets, plans tags and crates.io
publication, and drives the gated release pipeline. It is a hexagonal
(ports and adapters) Rust CLI: relman-core holds the types and ports,
relman-domain the services, relman-config the relman.toml loader,
relman-adapters the git, cargo, and filesystem adapters, relman-cli the
clap surface, and relman the binary.
A consumer repository keeps its own release data (relman.toml,
.changesets/, the consumed ledger, and its changelogs) and obtains the tool
at a pinned version through the composite action in this repository:
- uses: zingolabs/release_manager/.github/actions/setup-relman@v0.1.0
with:
version: v0.1.0version is a tag of this repository, or a commit SHA. A tag resolves to the
static binary attached to that tag's GitHub Release; a SHA, or a tag with no
matching binary, falls back to cargo install --git at that revision.
The pipeline these commands serve is described in the zaino repository's
docs/release/pipeline.md
until the generic part of that document moves here.
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo nextest run --workspacePush a tag of the form vX.Y.Z. The release workflow builds the
x86_64-unknown-linux-musl binary and attaches it to a GitHub Release for
that tag as relman-x86_64-unknown-linux-musl.
The code was extracted from zingolabs/zaino, where it was introduced in pull request #1462, with its commit history intact. The extraction plan and its open questions are tracked in issue #1 of this repository.