Skip to main content

CLI

anodizer CLI commands and flags, including the Pro multi-stage release flags.

CLI

Commands and flags exposed by the anodizer binary.

Live invocations

Representative anodizer-action args: and CLI invocations from anodizer's release.yml, ci.yml, and cfgd's release.yml (snapshot 2026-05-24).

# anodizer ci.yml — snapshot dry-run on every master push
args: release --snapshot --single-target --clean --dry-run

# anodizer release.yml — workflow_run tag job auto-tags from commit directives;
# --push lands the version-sync bump commit on master atomically with the tag,
# pushed with GITHUB_TOKEN so it triggers no second CI run.
args: tag --push

# anodizer release.yml — determinism shard runs the build pipeline,
# preserves dist/, then the release job calls release --publish-only.
args: release --check determinism --preserve-dist
args: release --publish-only

# cfgd release.yml — split build per workspace crate, with strict gating.
args: release --verbose --debug --strict --split --clean --crate ${{ needs.resolve.outputs.workspace }}

Commands

CommandStatusNotes
release✅ Verifiedanodizer release.yml (args: release --publish-only)
build✅ Verifiedcrates/cli/src/commands/build.rs (subcommand handler)
check✅ Verifiedcrates/cli/src/commands/check/mod.rs
init✅ Verifiedcrates/cli/src/commands/init.rs
completion✅ Verifiedcrates/cli/src/commands/completion.rs
jsonschema✅ Verifieddocs.yml regenerates schema.json via anodizer jsonschema
healthcheck✅ Verifiedcrates/cli/src/commands/healthcheck.rs
tag✅ Verifiedanodizer's prior releases (v0.2.0–v0.5.0) were auto-tagged from Conventional Commits; the tag is now cut by release.yml's workflow_run tag job
tag rollback⏳ PendingA failed anodizer release executes the same rollback path in-process via the release.on_failure policy (default rollback); the standalone command remains the manual-recovery entry point. Awaits the next release cycle that hits the failure path
targets --json✅ VerifiedConsumed by anodizer-action as a matrix input
resolve-tag✅ Verifiedcfgd release.yml (resolve-workspace: 'true' invokes anodizer resolve-tag)
changelog✅ Verifiedcrates/cli/src/commands/changelog.rs
continue✅ Verifiedcrates/cli/src/commands/continue_cmd.rs (composite; reachable via release --merge)
publish✅ Verifiedcrates/cli/src/commands/publish_cmd.rs (composite; runs inside release --publish-only)
announce✅ Verifiedcrates/cli/src/commands/announce_cmd.rs (composite; runs inside release --publish-only)
man✅ Verifiedanodizer .anodizer.yaml (before.hooks runs anodizer man > dist/anodizer.1)
bump🤝 Help wantedcrates/cli/src/commands/bump/mod.rs (bump major/minor/patch/custom — edits Cargo.toml + Cargo.lock without tagging; PR-first workflow counterpart to tag). No live workflow uses it yet
check determinism✅ Verifiedanodizer release.yml (determinism: 'true' per shard on the 3-OS matrix; args: release --check determinism --preserve-dist on prior releases)
check version-files🤝 Help wantedcrates/cli/src/commands/check/version_files.rs (lints that version_files entries contain the current version). No live workflow invocation yet
notify🤝 Help wantedcrates/cli/src/commands/notify.rs (fires configured announce integrations with a custom message; --only / --skip filter integrations). No live invocation yet

Flags

FlagStatusNotes
--single-target✅ Verifiedanodizer ci.yml (args: release --snapshot --single-target --clean --dry-run)
tag --push✅ Verifiedrelease.yml's workflow_run tag job (args: tag --push --changelog, pushed via GITHUB_TOKEN) cuts every release off master; tags v0.12.0v0.12.3 were all pushed this way (gh release list). Also covered by integration tests (bare-remote fixture asserts remote branch HEAD == tag target, no orphan)
--split✅ Verifiedcrates/cli/src/commands/release/split.rs (cfgd's release.yml uses it for per-OS split build)
--merge✅ Verifiedcrates/cli/src/commands/release/mod.rs (merge counterpart to --split)
--publish-only✅ Verifiedanodizer release.yml (args: release --publish-only)
--crate <name>✅ Verifiedcfgd release.yml (args: release ... --crate ${{ needs.resolve.outputs.workspace }})
--auto-snapshot✅ Verifiedanodizer ci.yml (snapshot dry-run on master)
--prepare🤝 Help wantedPro multi-stage. release --prepare runs build/archive/sign/checksum/sbom but skips release/publish/announce; e2e test asserts the artifact set matches an explicit --skip=release,publish,announce. No live release uses the prepare to publish to announce split yet
--fail-fast🤝 Help wantedInverts the publish stage's default collect-then-bail behavior to abort on the first publisher error, matching GoReleaser's Continuable trait. Default mode collects errors from every post-release publisher (brew/krew/nix/scoop/winget/aur/...) and reports the aggregate
--nightly✅ Verifiedcfgd nightly.yml (args: release --nightly --no-preflight on a 0 4 * * * cron — publishes to all configured publishers)
tag --changelog✅ Verifiedrelease.yml's tag job passes args: tag --push --changelog on every auto-tag; the v0.12.3 release body carries the rendered ## Changelog### Bug Fixes groups. See crates/cli/src/commands/tag/mod.rs (renders and stages changelogs atomically with the version-sync commit)