Moves the action model, its reference and the action.yml parser out of the
runner, so everything that reads a workflow or an action definition lives in one
place. Repository URLs and revisions come along because a reference is expressed
in them; the runner re-exports them from runner-source.
The parser moves with the model rather than staying behind an artificial set of
public constructors: it builds the model, and splitting the two would have meant
inventing an API whose only purpose was to keep them apart.
Stays in the runner: fetching an action over git, and the mapping from the
declared node12/node16/node20/node24 to the runtimes the job image
actually ships.
NodeAction and CompositeAction gain an environment() reader; the other two
variants already had one and the worker reached for the field directly.
Moves the action model, its reference and the `action.yml` parser out of the
runner, so everything that reads a workflow or an action definition lives in one
place. Repository URLs and revisions come along because a reference is expressed
in them; the runner re-exports them from `runner-source`.
The parser moves with the model rather than staying behind an artificial set of
public constructors: it builds the model, and splitting the two would have meant
inventing an API whose only purpose was to keep them apart.
Stays in the runner: fetching an action over git, and the mapping from the
declared `node12`/`node16`/`node20`/`node24` to the runtimes the job image
actually ships.
`NodeAction` and `CompositeAction` gain an `environment()` reader; the other two
variants already had one and the worker reached for the field directly.
Verification: `cargo fmt --check`, `clippy -D warnings`,
`cargo test --workspace --all-targets --all-features`, `check-architecture.sh`,
`check-rust-loc.sh`.
The compiler already reads action references, so the model, the reference
and the action.yml parser belong next to it. Repository URLs and revisions
come along because a reference is expressed in them.
Co-authored-by: Cursor <cursoragent@cursor.com>
Node 20 is the minimum SynCode ships, so an action declaring node12 or
node16 is rejected instead of being silently upgraded. With the legacy
variants gone the declared runtime and the shipped runtime are one enum.
Co-authored-by: Cursor <cursoragent@cursor.com>
day01
merged commit 1dbf765d15 into %!s()2026-08-05 05:26:57 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Moves the action model, its reference and the
action.ymlparser out of therunner, so everything that reads a workflow or an action definition lives in one
place. Repository URLs and revisions come along because a reference is expressed
in them; the runner re-exports them from
runner-source.The parser moves with the model rather than staying behind an artificial set of
public constructors: it builds the model, and splitting the two would have meant
inventing an API whose only purpose was to keep them apart.
Stays in the runner: fetching an action over git, and the mapping from the
declared
node12/node16/node20/node24to the runtimes the job imageactually ships.
NodeActionandCompositeActiongain anenvironment()reader; the other twovariants already had one and the worker reached for the field directly.
Verification:
cargo fmt --check,clippy -D warnings,cargo test --workspace --all-targets --all-features,check-architecture.sh,check-rust-loc.sh.@@ -0,0 +70,4 @@}#[derive(Clone, Copy, Debug, Eq, PartialEq)]pub enum NodeRuntime {min node20