Skip to content

Jobs and steps

A build is a list of steps. Each step is an independent shell with its own status, log, exit code and duration.

Steps are derived from the job when the build starts — the job itself stores no steps, so nothing had to be migrated when this was introduced:

  • a job written as a script becomes one step
  • a job built from an action flow becomes one step per action

Each step is a fresh shell

The working directory is shared, but environment variables do not carry over. To pass a value on, append to $WALIS_ENV_FILE:

bash
echo "BUILT_VERSION=1.2.3" >> "$WALIS_ENV_FILE"

The next step reads it as $BUILT_VERSION. This matches how other CI systems behave, and it keeps a step from silently depending on the shell state of the one before it.

Failure and parallelism

  • A failed step marks the rest Skipped, unless the action is set to continue on error.
  • Steps marked run alongside the previous step form one parallel group. They share the working directory but each gets its own environment file, so they cannot overwrite each other.
  • The job timeout covers the whole build; each step receives what is left of it.

Matrix builds

Give a job a matrix and one trigger produces one build per combination:

json
{ "NODE": ["20", "22"], "OS": ["mac", "linux"] }

Each build gets the values as environment variables and carries a label such as NODE=20, OS=mac. Capped at 50 combinations, because four axes of five values is 625 builds and rarely what anyone meant.

Caching

List paths to keep between builds, relative to the working directory. On success they are stored and restored on the next run. The order matters: Walis cleans the workspace first, then restores — the other way round would wipe what it just restored. Absolute paths and .. are ignored.

Released under the MIT License.