From c24c00c1d89990d44d796c4fd2b84e92162b044a Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 12 Aug 2026 00:04:41 +0000 Subject: Add validated image build stage graph --- src/stage.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/stage.rs (limited to 'src/stage.rs') diff --git a/src/stage.rs b/src/stage.rs new file mode 100644 index 0000000..612b594 --- /dev/null +++ b/src/stage.rs @@ -0,0 +1,45 @@ +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Stage { + Resolve, + Install, + FinalizeRootfs, + BuildInitramfs, + Package, + Manifest, +} + +impl Stage { + pub const ORDERED: [Self; 6] = [ + Self::Resolve, + Self::Install, + Self::FinalizeRootfs, + Self::BuildInitramfs, + Self::Package, + Self::Manifest, + ]; + + pub fn dependencies(self) -> &'static [Self] { + match self { + Self::Resolve => &[], + Self::Install => &[Self::Resolve], + Self::FinalizeRootfs => &[Self::Install], + Self::BuildInitramfs => &[Self::Install], + Self::Package => &[Self::FinalizeRootfs, Self::BuildInitramfs], + Self::Manifest => &[Self::Package], + } + } +} + +impl std::fmt::Display for Stage { + fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let name = match self { + Self::Resolve => "resolve", + Self::Install => "install", + Self::FinalizeRootfs => "finalize-rootfs", + Self::BuildInitramfs => "initramfs", + Self::Package => "package", + Self::Manifest => "manifest", + }; + formatter.write_str(name) + } +} -- cgit v1.2.3