Skip to main content

Ecosystem

Enum Ecosystem 

Source
pub enum Ecosystem {
    Uv,
    Npm,
    Cargo,
}
Expand description

An ecosystem whose dependency files may enter the build artifact (#74).

The variant fixes both entry names. That is the TRAP-5 half of the design: the artifact is a shared image snapshot, so what may enter it is an allowlist of dependency-defining files, not a caller-named list — there is no field anywhere in this module a caller could put .env or a credentials file’s name into. The byte-scan test at the bottom of this file covers the entries this type admits.

Variants§

§

Uv

Python under uv: pyproject.toml + uv.lock.

§

Npm

Node under npm: package.json + package-lock.json.

§

Cargo

Rust under cargo: Cargo.toml + Cargo.lock.

Implementations§

Source§

impl Ecosystem

Source

pub const ALL: [Ecosystem; 3]

Every ecosystem, in detection order.

Source

pub fn manifest_name(self) -> &'static str

The manifest’s file name, which is also its zip entry name.

Source

pub fn lockfile_name(self) -> &'static str

The lockfile’s file name, which is also its zip entry name — and the file the environment layer is keyed on (#74).

Source

pub fn install_run_line(self) -> &'static str

The whole RUN line that installs the environment layer: toolchain bootstrap on the managed al2023 base, then the lockfile-faithful install.

§The install commands are the lockfile-faithful spellings

uv sync --locked, npm ci, and cargo fetch --locked each refuse a lockfile that disagrees with its manifest rather than quietly re-resolving — which is what keeps the baked layer the thing the content hash says it is. uv sync without --locked, npm install, or a bare cargo fetch would install something and the hash would then name an environment the build did not produce.

§The bootstrap packages are measured, the full build is not yet

The managed base is al2023-minimal and ships no toolchain, so each line installs its own. Package names and the binaries they land were verified against the Amazon Linux 2023 repos (2026-08-31): python3.12-pip puts pip3.12 on PATH, nodejs22-npm puts npm and node on PATH, cargo puts cargo on PATH. install_weak_deps=0 keeps the layer minimal. A full in-guest build of each line is the live-conformance scenario #74’s acceptance defers to — see the issue.

Cargo is the one that needs a stub: cargo fetch refuses a package with no targets, so the line creates an empty src/main.rs first. The working tree synced at launch lands over it.

Trait Implementations§

Source§

impl Clone for Ecosystem

Source§

fn clone(&self) -> Ecosystem

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 Copy for Ecosystem

Source§

impl Debug for Ecosystem

Source§

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

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

impl Eq for Ecosystem

Source§

impl PartialEq for Ecosystem

Source§

fn eq(&self, other: &Ecosystem) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Ecosystem

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> AsOut<T> for T
where T: Copy,

Source§

fn as_out(&mut self) -> Out<'_, T>

Returns an out reference to self.
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> 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> DynClone for T
where T: Clone,

Source§

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

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
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> 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<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