Skip to main content

ShellConfig

Struct ShellConfig 

Source
pub struct ShellConfig {
    pub command: String,
    pub timeout_secs: Option<u64>,
    pub dir: Option<String>,
    pub env: Vec<(String, String)>,
    pub clean_env: bool,
    pub outputs: Vec<ArtifactOutput>,
    pub inputs: Vec<ArtifactInput>,
    pub allow_failure: bool,
    pub retry: Option<RetryPolicy>,
}
Expand description

Serializable configuration for a shell step.

§Examples

use ironflow_engine::config::ShellConfig;

let config = ShellConfig::new("cargo build --release")
    .timeout_secs(300)
    .dir("/app")
    .output("target/report.html");

Fields§

§command: String

The shell command to execute.

§timeout_secs: Option<u64>

Timeout in seconds (default: 300).

§dir: Option<String>

Working directory.

§env: Vec<(String, String)>

Environment variables to set.

§clean_env: bool

If true, start with a clean environment.

§outputs: Vec<ArtifactOutput>

Files the step promises to produce, collected once it finishes.

§inputs: Vec<ArtifactInput>

Artifacts of earlier steps to place in the working directory first.

§allow_failure: bool

When true, a failure of this step does not fail the run. The step is still marked Failed but execution continues and the run finishes with [RunStatus::Warning] instead of Failed.

§retry: Option<RetryPolicy>

Optional step-level retry policy. When set, a transient failure retries the step locally with exponential backoff before propagating the error.

Implementations§

Source§

impl ShellConfig

Source

pub fn new(command: &str) -> Self

Create a new shell config with the given command.

§Examples
use ironflow_engine::config::ShellConfig;

let config = ShellConfig::new("echo hello");
assert_eq!(config.command, "echo hello");
Source

pub fn timeout_secs(self, secs: u64) -> Self

Set the timeout in seconds.

Source

pub fn dir(self, dir: &str) -> Self

Set the working directory.

Source

pub fn env(self, key: &str, value: &str) -> Self

Add an environment variable.

Source

pub fn clean_env(self) -> Self

Start with a clean environment (no inherited vars).

Source

pub fn output(self, pattern: &str) -> Self

Declare a file the step produces, typed from its name.

pattern is a glob resolved against dir. Every match is stored as an artifact named after the file. When the step succeeds and the pattern matches nothing, the step fails.

§Examples
use ironflow_engine::config::ShellConfig;

let config = ShellConfig::new("cargo build").output("target/*.log");
assert_eq!(config.outputs.len(), 1);
Source

pub fn output_typed(self, pattern: &str, content_type: &str) -> Self

Declare a produced file with an explicit MIME type.

§Examples
use ironflow_engine::config::ShellConfig;

let config = ShellConfig::new("./gen").output_typed("data", "application/json");
assert_eq!(config.outputs[0].content_type.as_deref(), Some("application/json"));
Source

pub fn input(self, artifact: &ArtifactRef) -> Self

Consume an artifact produced by an earlier step of the same run.

The handle comes from the producing step, see ArtifactRef. The artifact is written into the working directory under its own name before the command runs. Use input_at to choose another path.

§Examples
use ironflow_engine::config::ShellConfig;
use ironflow_engine::context::WorkflowContext;
use ironflow_engine::error::EngineError;

let build = ctx.shell("build", ShellConfig::new("./gen").output("report.html")).await?;
let report = build.artifact("report.html")?;
let config = ShellConfig::new("./publish").input(&report);
assert_eq!(config.inputs[0].destination(), "report.html");
Source

pub fn allow_failure(self) -> Self

Mark this step as allowed to fail without stopping the run.

§Examples
use ironflow_engine::config::ShellConfig;

let config = ShellConfig::new("cargo clippy").allow_failure();
assert!(config.allow_failure);
Source

pub fn retry_policy(self, policy: RetryPolicy) -> Self

Set a step-level retry policy.

§Examples
use ironflow_core::retry::RetryPolicy;
use ironflow_engine::config::ShellConfig;

let config = ShellConfig::new("curl http://api")
    .retry_policy(RetryPolicy::new(3));
assert!(config.retry.is_some());
Source

pub fn input_at(self, artifact: &ArtifactRef, dest: &str) -> Self

Consume an artifact and write it to an explicit path.

§Examples
use ironflow_engine::config::ShellConfig;
use ironflow_engine::context::WorkflowContext;
use ironflow_engine::error::EngineError;

let build = ctx.shell("build", ShellConfig::new("./gen").output("report.html")).await?;
let report = build.artifact("report.html")?;
let config = ShellConfig::new("./publish").input_at(&report, "in/r.html");
assert_eq!(config.inputs[0].destination(), "in/r.html");

Trait Implementations§

Source§

impl Clone for ShellConfig

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ShellConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ShellConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<ShellConfig> for StepConfig

Source§

fn from(c: ShellConfig) -> Self

Converts to this type from the input type.
Source§

impl Serialize for ShellConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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