pub struct ImportConfig {
pub source: PathBuf,
pub hash: Option<String>,
pub materialize: bool,
pub event: Option<String>,
pub inputs: HashMap<String, String>,
}Expand description
Step-level config for StepKind::Import (W224, R533-F1). The W224 import
primitive: a QED step whose source is a workflow.yml, carrying the content
hash of that yml plus a toggle for whether the expansion is persisted.
[[steps]]
name = "release"
kind = "import"
[steps.import]
source = ".github/workflows/release.yml"
hash = "af1349b9f5f9a1a6a0404dea36dcc949..." # blake3 of the source, pinned
# materialize = false # default — virtual expansionWhether the expansion is persisted is the migration ramp (W224): virtual
(default) recomputes the subgraph at plan time and stores nothing — zero
drift by construction; materialize ejects it to generated TOML (R533-F6).
While the yml is canonical the TOML is virtual; once ejected the yml is
gone — never two editable canonical copies at once. The freshness check and
plan-time expansion live in crate::import.
Fields§
§source: PathBufPath to the imported .github/workflows/*.yml, resolved relative to the
camp root.
hash: Option<String>blake3 content hash of the source bytes, pinned at import time
(crate::import::content_hash). None while unpinned (a first import
or a hand-authored block). On every run the runner recomputes the source
hash and compares via Self::freshness: a mismatch means the source
drifted since pinning. Under the default virtual expansion a mismatch is
benign (re-expand + re-pin); for a materialized eject it marks the
on-disk generated TOML stale (R533-F6).
materialize: boolPersist the plan-time expansion as generated, hash-stamped TOML (the
R533-F6 eject), vs. the default virtual expansion computed fresh at
plan time and never stored. Virtual-by-default is zero-drift by
construction (W224). F1 only carries the toggle; the eject/materialize
machinery and its stale-source guard land in R533-F6.
event: Option<String>GHA event the expansion impersonates while F1’s expansion still routes
through the recast W200 front-end (push | workflow_dispatch). None
defaults to push at runtime — matches release.yml’s tag-push primary
trigger. Forwarded into the synthesized GhaWorkflowConfig by
crate::import::expand_import.
inputs: HashMap<String, String>workflow_dispatch inputs forwarded into the expansion context. Ignored
when event != "workflow_dispatch".
Implementations§
Source§impl ImportConfig
impl ImportConfig
Sourcepub fn freshness(&self, actual: &str) -> ImportFreshness
pub fn freshness(&self, actual: &str) -> ImportFreshness
Compare a freshly-computed source hash against the pinned one.
actual is the content_hash of the bytes currently on disk; the
caller computes it (the runner has just read the file, so it owns the
bytes). Pure — no I/O here.
Trait Implementations§
Source§impl Clone for ImportConfig
impl Clone for ImportConfig
Source§fn clone(&self) -> ImportConfig
fn clone(&self) -> ImportConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ImportConfig
impl Debug for ImportConfig
Source§impl<'de> Deserialize<'de> for ImportConfig
impl<'de> Deserialize<'de> for ImportConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for ImportConfig
Source§impl PartialEq for ImportConfig
impl PartialEq for ImportConfig
Source§impl Serialize for ImportConfig
impl Serialize for ImportConfig
impl StructuralPartialEq for ImportConfig
Auto Trait Implementations§
impl Freeze for ImportConfig
impl RefUnwindSafe for ImportConfig
impl Send for ImportConfig
impl Sync for ImportConfig
impl Unpin for ImportConfig
impl UnsafeUnpin for ImportConfig
impl UnwindSafe for ImportConfig
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> Fruit for T
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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