Skip to main content

ContextOptions

Struct ContextOptions 

Source
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 publisher_allowlist: 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 preflight_secrets: 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 simulate_failure_publishers: Vec<String>, pub show_skipped: bool, 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, pub notify: bool, pub allow_snapshot_publish: bool,
}

Fields§

§snapshot: bool§nightly: bool§dry_run: bool§quiet: bool§verbose: bool§debug: bool§skip_stages: Vec<String>§publisher_allowlist: Vec<String>

--publishers: per-publisher allowlist. Empty means “no allowlist” — every publisher runs (subject to skip_stages). Non-empty restricts the publish stage to exactly the named publishers. Entries are canonical publisher names (Publisher::name(), e.g. npm, cargo). Orthogonal to selected_crates (which scopes crates, not publishers) and to skip_stages (the unified denylist, which always wins — see Context::publisher_deselected).

§selected_crates: Vec<String>§token: Option<String>§parallelism: usize

Maximum 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: bool

When 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: bool

When 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 the config-derived environment preflight (the github-release publisher’s token ladder plus the sign stage’s KeyEnv requirements), which validates token and sign-key material in one collect-all pass and bails fail-closed on missing values. Without this deferral, setup_env’s token check would fire FIRST and pre-empt that richer, per-publisher preflight.

§preflight_secrets: bool

--preflight-secrets: a check-only secrets gate. Like Self::publish_only, it defers setup_env’s GitHub-token hard error to the config-derived environment preflight (run in SecretsOnly scope), which validates the token ladder alongside every other runner-agnostic credential and then exits with zero mutations. Without this deferral, setup_env would bail on the missing token before the secrets gate could report the full set.

§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: bool

Strict 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.

§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.

§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?”.

§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: bool

changelog .. / 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: bool

Marks 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-native branch (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.

§notify: bool

Marks the run as the standalone anodizer notify command — a side-channel that sends a one-off message through the configured announce integrations, NOT part of the release pipeline.

notify is routinely invoked as an on_error: hook AFTER a release has failed mid-flight, when the working tree is dirty (partial dist/, in-flight writeback) and HEAD may not sit on the release tag. A notification must never be blocked by repo state — losing the alert is the worst outcome — so this flag relaxes the three release-time git preconditions in resolve_git_context that are correct for a real release but wrong for a notification: the no-tag bail (falls back to the v0.0.0 synthetic tag), the tag-must-point-at-HEAD bail, and the dirty-tree bail. ONLY the notify command sets this; every release/tag path leaves it false so their guards stay intact.

§allow_snapshot_publish: bool

--allow-snapshot-publish: downgrade the publish stage’s non-release version guard from a hard bail to a warning.

By default the publish, blob, and announce stages REFUSE to ship a non-release version (snapshot / dirty / 0.0.0-sentinel — see crate::version::guard_release_version / crate::version::is_release_version) to an external, often irreversible, channel. The canonical accident this prevents: a CI run that resolved 0.0.0~SNAPSHOT-<sha> and pushed it to a package registry. This flag is the deliberate opt-in for the legitimate “publish a snapshot to a private channel” case; it is the ONLY thing required to opt in (the version is not re-stated). Default false (fail-closed).

Trait Implementations§

Source§

impl Default for ContextOptions

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more