This document explains what runs when code is proposed to master and released.
Use this with:
ZeroClaw uses a single default branch: master. All contributor PRs target master directly. There is no dev or promotion branch.
Current maintainers with PR approval authority: theonlyhennygod, JordanTheJet, and SimianAstronaut7.
| File | Trigger | Purpose |
|---|---|---|
checks-on-pr.yml |
pull_request β master |
Lint + test + build + security audit on every PR |
cross-platform-build-manual.yml |
workflow_dispatch |
Full platform build matrix (manual) |
release-beta-on-push.yml |
push β master |
Beta release on every master commit |
release-stable-manual.yml |
workflow_dispatch |
Stable release (manual, version-gated) |
| Event | Workflows triggered |
|---|---|
PR opened or updated against master |
checks-on-pr.yml |
Push to master (including after merge) |
release-beta-on-push.yml |
| Manual dispatch | cross-platform-build-manual.yml, release-stable-manual.yml |
- Contributor opens or updates a PR against
master. checks-on-pr.ymlstarts:lintjob: runscargo fmt --checkandcargo clippy -D warnings.testjob: runscargo nextest run --lockedonubuntu-latestwith Rust 1.92.0 and mold linker.buildjob (matrix): compiles release binary onx86_64-unknown-linux-gnuandaarch64-apple-darwin.securityjob: runscargo auditandcargo deny check licenses sources.- Concurrency group cancels in-progress runs for the same PR on new pushes.
- All jobs must pass before merge.
- Maintainer (
theonlyhennygod,JordanTheJet, orSimianAstronaut7) merges PR once checks and review policy are satisfied. - Merge emits a
pushevent onmaster(see section 2).
- Commit reaches
master. release-beta-on-push.yml(Release Beta) starts:versionjob: computes beta tag asv{cargo_version}-beta.{run_number}.buildjob (matrix, 4 targets):x86_64-linux,aarch64-linux,aarch64-darwin,x86_64-windows.publishjob: generatesSHA256SUMS, creates a GitHub pre-release with all artifacts. Artifact retention: 7 days.dockerjob: builds multi-platform image (linux/amd64,linux/arm64) and pushes toghcr.iowith:betaand the versioned beta tag.
- This runs on every push to
masterwithout filtering. Every merged PR produces a beta pre-release.
- Maintainer runs
release-stable-manual.ymlviaworkflow_dispatchwith a version input (e.g.0.2.0). validatejob checks:- Input matches semver
X.Y.Zformat. Cargo.tomlversion matches input exactly.- Tag
vX.Y.Zdoes not already exist on the remote.
- Input matches semver
buildjob (matrix, same 4 targets as beta): compiles release binary.publishjob: generatesSHA256SUMS, creates a stable GitHub Release (not pre-release). Artifact retention: 14 days.dockerjob: pushes toghcr.iowith:latestand:vX.Y.Z.
- Maintainer runs
cross-platform-build-manual.ymlviaworkflow_dispatch. buildjob (matrix, 3 targets):aarch64-linux-gnu,x86_64-darwin(macOS 15 Intel),x86_64-windows-msvc.- Build-only, no tests, no publish. Used to verify cross-compilation on platforms not covered by
checks-on-pr.yml.
| Target | checks-on-pr.yml |
cross-platform-build-manual.yml |
release-beta-on-push.yml |
release-stable-manual.yml |
|---|---|---|---|---|
x86_64-unknown-linux-gnu |
β | β | β | |
aarch64-unknown-linux-gnu |
β | β | β | |
aarch64-apple-darwin |
β | β | β | |
x86_64-apple-darwin |
β | |||
x86_64-pc-windows-msvc |
β | β | β |
flowchart TD
A["PR opened or updated β master"] --> B["checks-on-pr.yml"]
B --> B0["lint: fmt + clippy"]
B --> B1["test: cargo nextest (ubuntu-latest)"]
B --> B2["build: x86_64-linux + aarch64-darwin"]
B --> B3["security: audit + deny"]
B0 & B1 & B2 & B3 --> C{"Checks pass?"}
C -->|No| D["PR stays open"]
C -->|Yes| E["Maintainer merges"]
E --> F["push event on master"]
flowchart TD
A["Push to master"] --> B["release-beta-on-push.yml"]
B --> B1["version: compute v{x.y.z}-beta.{N}"]
B1 --> B2["build: 4 targets"]
B2 --> B3["publish: GitHub pre-release + SHA256SUMS"]
B2 --> B4["docker: push ghcr.io :beta + versioned tag"]
flowchart TD
A["workflow_dispatch: version=X.Y.Z"] --> B["release-stable-manual.yml"]
B --> B1["validate: semver + Cargo.toml + tag uniqueness"]
B1 --> B2["build: 4 targets"]
B2 --> B3["publish: GitHub stable release + SHA256SUMS"]
B2 --> B4["docker: push ghcr.io :latest + :vX.Y.Z"]
- Quality gate failing on PR: check
lintjob for formatting/clippy issues; checktestjob for test failures; checkbuildjob for compile errors; checksecurityjob for audit/deny failures. - Beta release not appearing: confirm the push landed on
master(not another branch); checkrelease-beta-on-push.ymlrun status. - Stable release failing at validate: ensure
Cargo.tomlversion matches the input version and the tag does not already exist. - Full matrix build needed: run
cross-platform-build-manual.ymlmanually from the Actions tab.