pub enum Commands {
Show 21 variants
Release {Show 44 fields
crate_names: Vec<String>,
all: bool,
force: bool,
snapshot: bool,
nightly: bool,
dry_run: bool,
clean: bool,
skip: Vec<String>,
publishers: Vec<String>,
token: Option<String>,
timeout: String,
parallelism: Option<usize>,
auto_snapshot: bool,
single_target: bool,
targets: Option<String>,
host_targets: bool,
release_notes: Option<PathBuf>,
workspace: Option<String>,
draft: bool,
release_header: Option<PathBuf>,
release_header_tmpl: Option<PathBuf>,
release_footer: Option<PathBuf>,
release_footer_tmpl: Option<PathBuf>,
release_notes_tmpl: Option<PathBuf>,
fail_fast: bool,
no_gate_submitter: bool,
simulate_failure: Vec<String>,
show_skipped: bool,
allow_nondeterministic: Vec<String>,
summary_json: Option<PathBuf>,
allow_ai_failure: bool,
allow_snapshot_publish: bool,
split: bool,
merge: bool,
publish_only: bool,
prepare: bool,
announce_only: bool,
resume_release: bool,
replace_existing: bool,
no_post_publish_poll: bool,
removed_rollback: Option<String>,
removed_rollback_only: Option<String>,
removed_from_run: Option<String>,
removed_no_failure_policy: Option<String>,
},
Build {
crate_names: Vec<String>,
timeout: String,
parallelism: Option<usize>,
single_target: bool,
workspace: Option<String>,
output: Option<PathBuf>,
skip: Vec<String>,
},
Check {
cmd: CheckCmd,
},
Init {
version_files: bool,
exclude: Vec<String>,
yes: bool,
},
Changelog {
range: Option<String>,
format: ChangelogFormat,
write: bool,
crate_name: Option<String>,
snapshot: bool,
},
Completion {
shell: Shell,
},
Healthcheck,
Preflight {
json: bool,
publish_only: bool,
skip: Vec<String>,
publishers: Vec<String>,
token: Option<String>,
},
Man,
Jsonschema,
ResolveTag {
tag: String,
json: bool,
},
Targets {
json: bool,
crate_names: Vec<String>,
},
Vocabulary {
json: bool,
},
Tools {
json: bool,
publish_only: bool,
skip: Vec<String>,
publishers: Vec<String>,
},
Tag {Show 14 fields
dry_run: bool,
custom_tag: Option<String>,
version_override: Option<String>,
default_bump: Option<String>,
crate_name: Option<String>,
push: bool,
no_push: bool,
push_tags_only: bool,
sign: bool,
no_sign: bool,
push_remote: Option<String>,
push_dry_run: bool,
changelog: bool,
sub: Option<TagSub>,
},
Continue {
merge: bool,
dist: Option<PathBuf>,
dry_run: bool,
skip: Vec<String>,
publishers: Vec<String>,
token: Option<String>,
},
Publish {
dry_run: bool,
token: Option<String>,
dist: Option<PathBuf>,
merge: bool,
show_skipped: bool,
skip: Vec<String>,
publishers: Vec<String>,
},
Promote {
to: String,
from: Option<String>,
publishers: Vec<String>,
version_selector: Option<String>,
from_run: Option<String>,
dry_run: bool,
},
Bump {Show 14 fields
level_or_version: Option<String>,
package: Vec<String>,
workspace: bool,
exclude: Vec<String>,
pre: Option<String>,
exact: bool,
allow_dirty: bool,
yes: bool,
dry_run: bool,
commit: bool,
changelog: bool,
sign: bool,
commit_message: Option<String>,
output: String,
},
Announce {
dry_run: bool,
dist: Option<PathBuf>,
token: Option<String>,
skip: Vec<String>,
merge: bool,
},
Notify {
message: String,
publishers: Vec<String>,
skip: Vec<String>,
raw: bool,
allow_secrets: bool,
dry_run: bool,
},
}Expand description
Every anodizer subcommand, each variant carrying that command’s own
flags.
Variants§
Release
Run the full release pipeline. Re-running the identical command converges on already-published state instead of double-publishing, so a re-run is how a failed release is recovered.
Every publisher reconciles against upstream before it acts and skips
itself when this exact version+content is already there. A publisher
reporting DIVERGED (the version is live upstream with different
bytes) is the one case a re-run cannot fix — bump the version. To
withdraw a release deliberately, use anodizer tag rollback.
Fields
Build
Build binaries only (always runs in snapshot mode)
Fields
Check
Validate configuration and run determinism checks
Init
Generate starter config, or enroll version-bearing files
Changelog
Manage CHANGELOG.md: refresh the pending section, or render notes/JSON
Fields
format: ChangelogFormatCompletion
Generate shell completions
Healthcheck
Check availability of required external tools
Preflight
Run the release preflight without releasing: the environment check
(required tools, env vars/secrets by presence only — values are never
printed — endpoint reachability, docker daemon, loadable key
material), the one-way-door publisher state and credential probes,
and the per-publisher reconcile table (is the target version already
published?), all derived from the resolved config. The target version
is the one this tree would release: the tag at HEAD, or the next
version anodizer tag would cut. Every failure is reported in one
pass; the exit code is non-zero on a missing requirement, a publisher
blocker, or a required publisher’s content divergence. The same engine
runs at the start of anodizer release, which --skip=preflight
leaves out when a pre-tag job already ran it.
Fields
Man
Generate man pages to stdout
Jsonschema
Output JSON Schema for .anodizer.yaml
ResolveTag
Resolve a git tag to its matching crate in the config
Targets
Emit the configured build targets as a GitHub Actions matrix.
Derives {os, target, artifact} entries from .anodizer.yaml.
Consumed by anodizer-action’s split-matrix output to feed a
strategy.matrix dynamically (via fromJson).
Vocabulary
Emit the canonical --skip / --publishers token vocabulary.
Lists every legal --skip / --publishers token, each tagged with
is_publisher / is_publish_stage, derived from anodizer’s publisher
registry (no hand-maintained list). Consumed by anodizer-action so it
emits only canonical tokens (e.g. homebrew, not homebrew-cask)
instead of re-deriving them in shell.
Tools
Emit the external CLI tools the resolved config’s pipeline will invoke.
Derives the tool set from the same per-stage / per-publisher
requirements the preflight engine checks, so it tracks the config
exactly. Consumed by anodizer-action to decide what to install on a
runner instead of grepping the config in shell.
Tag
Auto-tag based on commit message directives
Fields
version_override: Option<String>Tag exactly this semver version, bypassing autotag derivation and the Cargo.toml-ahead guard.
Accepts 1.2.3 or v1.2.3 (the v/configured prefix is normalized).
The version is applied to the tag AND synced into the relevant
Cargo.toml / version_files (single-crate, --crate, and lockstep
modes). In per-crate workspace mode it is rejected unless --crate <name> selects a single crate — one version across independently
versioned crates would corrupt their cadences. Intended for release
recovery where the operator must pin a precise version.
Continue
Resume a release after a transient failure or after --prepare/--split
With --merge: load every per-target context.json under dist/ (one
per split-build worker) and run the full post-build pipeline
(sign / checksum / sbom / release / publish / announce).
Without --merge: load existing dist/ artifacts and run the
publish-only pipeline (release / blob / publish). Use this to resume
a single-host release that stalled during publish (e.g. expired
token, transient 5xx) without rebuilding.
continue vs publish: both consume a populated dist/ and run
the release / blob / publish chain. continue is the recommended
alias for “resume a stalled single-host release” — the
continue command and the in-repo --prepare → continue
flow. publish is the lower-level entry point that does the same
thing without the resume framing; prefer continue unless you’re
invoking the publish chain on a dist that was never paused. Neither
is being deprecated.
Fields
Publish
Run only the publish stages (release, blob, publish) from a completed dist/
publish vs continue: both consume a populated dist/ and run
the same release / blob / publish chain. publish is the
lower-level entry point — no resume framing, no after-hooks /
milestone closure. continue is the recommended alias when
resuming a stalled single-host release (the
continue command); it additionally invokes the announce
stage and treats the dist as a paused-release surface. Prefer
continue unless you specifically want the unframed publish
chain. --dist overrides the configured dist directory;
release has no --dist because it produces dist.
Fields
Promote
Promote an already-published artifact from a pre-release track to a stable track, without rebuilding.
A cross-publisher capability (snapcraft channels, npm dist-tags, OCI
floating tags, GitHub prerelease flips). Reads existing publisher config
only to learn each publisher’s native track vocabulary — there is no
promote: config block (a static one would auto-promote the just-
uploaded revision every release, defeating the candidate gate).
Fields
Bump
Bump crate versions (Conventional Commits → semver level)
Infers the per-crate level from commits since each crate’s last tag
when no positional argument is given. patch|minor|major, an explicit
version, or release (strip prerelease) are also accepted.
Fields
Announce
Run only the announce stage from a completed dist/
Counterpart to release --announce-only: both re-fire announcers
against a populated dist without re-publishing. The subcommand
form (anodizer announce) accepts --dist to point at a
non-default tree (e.g. preserved by --preserve-dist); the flag
form (release --announce-only) operates on the dist configured
in .anodizer.yaml. Both honor nightly short-circuit.
Notify
Send a notification through configured announce integrations.
Fires configured announce integrations (slack, discord, webhook, …) with
a Tera-rendered message. Unlike announce, this command does not require
a dist/ directory — it is intended for ad-hoc notifications outside the
release pipeline (e.g. CI status alerts, deployment notices).
Fields
message: StringMessage template to send. Supports standard Tera template vars
(e.g. {{ ProjectName }}, {{ Tag }}, {{ Version }}).
publishers: Vec<String>Comma-separated list of integration names to fire (default: all). Valid names: discord, discourse, slack, webhook, telegram, teams, mattermost, reddit, twitter, mastodon, bluesky, linkedin.
raw: boolSend the message literally, without Tera template rendering. Use when the message contains untrusted text (e.g. error output in an on_error hook).
Trait Implementations§
Source§impl FromArgMatches for Commands
impl FromArgMatches for Commands
Source§fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>
Source§fn from_arg_matches_mut(
__clap_arg_matches: &mut ArgMatches,
) -> Result<Self, Error>
fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>
Source§fn update_from_arg_matches(
&mut self,
__clap_arg_matches: &ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§fn update_from_arg_matches_mut<'b>(
&mut self,
__clap_arg_matches: &mut ArgMatches,
) -> Result<(), Error>
fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>
ArgMatches to self.Source§impl Subcommand for Commands
impl Subcommand for Commands
Source§fn augment_subcommands<'b>(__clap_app: Command) -> Command
fn augment_subcommands<'b>(__clap_app: Command) -> Command
Source§fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command
Command so it can instantiate self via
FromArgMatches::update_from_arg_matches_mut Read moreSource§fn has_subcommand(__clap_name: &str) -> bool
fn has_subcommand(__clap_name: &str) -> bool
Self can parse a specific subcommandAuto Trait Implementations§
impl Freeze for Commands
impl RefUnwindSafe for Commands
impl Send for Commands
impl Sync for Commands
impl Unpin for Commands
impl UnsafeUnpin for Commands
impl UnwindSafe for Commands
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more