pub struct ContextOptions {Show 35 fields
pub snapshot: bool,
pub nightly: bool,
pub dry_run: bool,
pub quiet: bool,
pub verbose: bool,
pub debug: bool,
pub skip_stages: Vec<String>,
pub selected_crates: Vec<String>,
pub token: Option<String>,
pub parallelism: usize,
pub single_target: Option<String>,
pub release_notes_path: Option<PathBuf>,
pub fail_fast: bool,
pub partial_target: Option<PartialTarget>,
pub merge: bool,
pub publish_only: bool,
pub project_root: Option<PathBuf>,
pub strict: bool,
pub resume_release: bool,
pub replace_existing_artifacts: bool,
pub skip_post_publish_poll: bool,
pub gate_submitter: Option<bool>,
pub rollback_mode: Option<RollbackMode>,
pub simulate_failure_publishers: Vec<String>,
pub rollback_only: bool,
pub allow_rerun: bool,
pub show_skipped: bool,
pub from_run: Option<String>,
pub runtime_nondeterministic_allowlist: Vec<(String, String)>,
pub summary_json_path: Option<PathBuf>,
pub allow_ai_failure: bool,
pub changelog_from: Option<String>,
pub changelog_full_history: bool,
pub changelog_to: Option<String>,
pub changelog_preview: bool,
}Fields§
§snapshot: bool§nightly: bool§dry_run: bool§quiet: bool§verbose: bool§debug: bool§skip_stages: Vec<String>§selected_crates: Vec<String>§token: Option<String>§parallelism: usizeMaximum number of parallel build jobs (minimum 1).
single_target: Option<String>When set, build only for this single host target triple.
release_notes_path: Option<PathBuf>Path to a custom release notes file (overrides changelog).
fail_fast: boolWhen true, abort immediately on first error during publishing.
partial_target: Option<PartialTarget>Partial build target for split/merge mode. When set, the build stage filters targets to only those matching this partial target.
merge: boolWhen true, running with --merge flag (merging artifacts from split builds).
publish_only: bool--publish-only: load artifacts from a preserved dist (written
by anodize check determinism --preserve-dist=...) and run
only the sign + publish pipeline. The CLI dispatcher uses this
flag in setup_env to defer the GitHub-token check to
publish_only::preflight_credentials, which owns the
combined token + sign-key check and bails fail-closed on
missing values. Without this gate, setup_env’s token check
would fire FIRST and pre-empt publish-only’s own preflight
(which validates BOTH token AND sign key in one shot).
project_root: Option<PathBuf>Explicit project root directory. When set, stages use this instead of
discovering the repo root via git rev-parse --show-toplevel.
strict: boolStrict mode: configured features that would silently skip become errors.
resume_release: bool--resume-release: opt-in to continue into a release left over from
a prior failed attempt. Bypasses the leftover-assets pre-check that
bails when an existing release already has assets and
replace_existing_artifacts is false.
replace_existing_artifacts: bool--replace-existing: CLI override that forces
release.replace_existing_artifacts: true regardless of config.
The release stage ORs this with the config value.
skip_post_publish_poll: bool--no-post-publish-poll: skip post-publish polling for the
chocolatey moderation queue and the winget PR validation pipeline.
When true, the polling runner emits PostPublishStatus::NotPolled
(pending immediately) for every publisher rather than waiting on a
terminal state. Lets CI users with no patience for long-running
waits opt out without scattering post_publish_poll.enabled: false
across every publisher block.
gate_submitter: Option<bool>Whether the publisher dispatcher gates irreversible Submitter
publishers (chocolatey, winget, AUR-source, krew, snapcraft) on
the success of every required Assets/Manager publisher that ran
before them. None defaults to Some(true) (gate on). The CLI
flag --no-gate-submitter flips this to Some(false). See
stage-publish::dispatch::DispatchOptions::gate_submitter for
the gating mechanics.
rollback_mode: Option<RollbackMode>--rollback=<none|best-effort>: post-publish rollback policy.
None means “resolve from preflight state at dispatch time”
(best-effort when preflight ran clean, none otherwise with a
warn). Consumed by the rollback-dispatch task.
simulate_failure_publishers: Vec<String>--simulate-failure=<publisher> (repeatable, hidden, env-gated
behind ANODIZE_TEST_HARNESS=1): names of publishers whose
run() should be skipped and a synthetic Failed("simulated failure: <name>") recorded in the report instead. Lets the
failure-mode test harness exercise gate / rollback / report
paths deterministically without monkey-patching production
publisher code.
rollback_only: bool--rollback-only: skip publish; re-attempt rollback from a
prior run report. Requires from_run to identify which prior
run’s report.json to load. The actual replay logic lands in
a follow-up task; this field is plumbed so the flag is visible
in --help today.
allow_rerun: bool--allow-rerun: force PublishStage::run to proceed even
when a prior report.json exists for the current run_id.
The default (false) refuses re-runs to prevent PR-based
publishers (homebrew / scoop / nix / krew / MCP) from
duplicating their pull requests against the same tag.
Operators recovering from a partial failure should prefer
--rollback-only --from-run=<id> (which has its own
idempotency guard via dist/run-<id>/rollback.json). The
rerun flag is an escape hatch for advanced cases where the
operator has manually verified no duplicate-publish risk
exists.
Audit ref: 2026-05-15 release-resilience-review finding I4.
show_skipped: bool--show-skipped: surface the per-crate “no <publisher> config
block” skip lines at default verbosity. In workspace mode every
PR-based publisher (homebrew / nix / scoop / aur / winget / krew /
chocolatey) visits every selected crate and skips the ones whose
config lacks its block; at default verbosity those no-op skips are
routed to debug (invisible unless --debug) so they do not bury the
real output. Setting this flag forces them back to status — the
diagnostic escape hatch for “why didn’t publisher X run for crate Y?”.
from_run: Option<String>--from-run=<id>: prior run id whose report.json to load
when running in --rollback-only mode. clap enforces the
requires = "rollback_only" relationship at parse time.
runtime_nondeterministic_allowlist: Vec<(String, String)>--allow-nondeterministic <name>=<reason> (repeatable):
runtime non-determinism opt-outs for specific artifacts. The
determinism stage suppresses its non-determinism error for
any matching artifact name, recording the supplied reason in
the report. Mutually exclusive with --strict at the clap
layer.
summary_json_path: Option<PathBuf>--summary-json=<path>: when set, the per-publisher run
summary is written to this path. Consumed by the run-summary
task.
allow_ai_failure: bool--allow-ai-failure: when true, a failure inside the
changelog.ai enhancement step (transport, non-2xx, parse) is
logged as a warning and the pre-AI release notes are kept
verbatim. Default false (fail-closed) follows the conventional
“any hook failure aborts” pattern: a silent fall-back to the
raw notes ships the wrong body without the operator noticing.
changelog_from: Option<String>changelog --from <ref>: explicit lower bound (range start) for
changelog commit collection. When set, the changelog stage uses this
ref as the previous tag instead of auto-discovering the latest matching
tag. A dedicated option (rather than the always-auto-populated
PreviousTag template var) so a full release run’s per-crate
auto-discovery is never overridden — only an explicit --from is.
changelog_full_history: boolchangelog .. / changelog ..<ref>: an explicit empty lower bound,
meaning “from the beginning of history” with no auto-discovered
previous tag. When true, the changelog stage skips tag
auto-discovery entirely so the range covers all reachable commits up
to the upper bound — distinguishing the explicit empty-from form from
an omitted range (which still resolves to the last release tag).
changelog_to: Option<String>changelog <from>..<to> / changelog <tag>: an explicit UPPER bound
(range end) for changelog commit collection. When set, the changelog
stage walks <from>..<to> instead of <from>..HEAD, so commits AFTER
<to> are excluded. A dedicated option (rather than the always-populated
Tag template var) so the pending / snapshot window — where Tag
resolves to the latest EXISTING tag yet the range must still run to
HEAD — is never silently bounded to that tag. None keeps the upper
bound at HEAD (the pending window since the last release).
changelog_preview: boolMarks the run as the standalone changelog --format release-notes
LOCAL preview, NOT the release/tag pipeline. The standalone command
is an inspection tool: it must render the pending window from local git
with no release-time preconditions, so this flag relaxes three guards
that are correct for a real release but wrong for a preview:
- the tag-must-point-at-HEAD + dirty-tree bails in
resolve_git_context(a preview must not require a checkout or a clean tree), - the snapshot-skip config gate in the changelog stage (a preview
must render without
changelog.snapshot: true), - the
use: github-nativebranch (a preview renders from local git instead of requiring a token / emitting empty bodies).
ONLY the standalone changelog command sets this; the release/tag
pipelines leave it false so their guards stay fully intact.