Actions reference
An action is pure data: a parameter declaration plus a shell template. Nothing in the execution path knows about actions — a flow is compiled into a plain script when you save the job, which is why remote runners need no knowledge of them.
There are 33 built-in actions in nine categories.
General
| Action | ID | What it does |
|---|---|---|
| Run command | shell.run | Runs a shell command in the working directory. The general-purpose action. |
| Print message | shell.echo | Writes a line into the build log. Useful for marking progress. |
| Wait | shell.sleep | Sleeps for a number of seconds — typically waiting for a service to come up. |
| Set environment variable | shell.env | Sets a variable for subsequent steps by appending to $WALIS_ENV_FILE. |
| Set output | shell.outputs | Writes name=value as this step's output, for later steps to reference as ${{ steps.ID.NAME }}. |
| Change directory | shell.cd | Switches directory; later steps run there too. |
Files
| Action | ID | What it does |
|---|---|---|
| Create directory | file.mkdir | Does not fail if the directory already exists. |
| Copy file | file.copy | Files or directories. |
| Move file | file.move | Move or rename. |
| Delete file | file.remove | Does not fail if the path is absent. |
| Zip | file.zip | Compresses a directory or file into a zip. |
Git
| Action | ID | What it does |
|---|---|---|
| Git clone | git.clone | Optional branch and depth. |
| Git checkout | git.checkout | Switch to a branch or commit. |
| Git pull | git.pull | Fetch and merge the latest commits. |
Node
| Action | ID | What it does |
|---|---|---|
| Install dependencies | node.install | Installs from the lock file. |
| Run npm script | node.script | Runs a script from package.json. |
| Run npx command | node.npx | Runs a command a package provides. |
.NET
| Action | ID | What it does |
|---|---|---|
| dotnet restore | dotnet.restore | Restores NuGet dependencies. |
| dotnet build | dotnet.build | Builds a project or solution. |
| dotnet test | dotnet.test | Runs test projects. |
| dotnet publish | dotnet.publish | Produces publish output. |
Containers
| Action | ID | What it does |
|---|---|---|
| Docker build | docker.build | Builds an image. |
| Docker push | docker.push | Pushes an image to a registry. |
| Docker compose | docker.compose | Brings services up or updates them. |
| Run in a container | container.run | Mounts the working directory into an image and runs a script inside it — the equivalent of Jenkins' agent { docker }. |
Deployment
| Action | ID | What it does |
|---|---|---|
| SSH remote command | deploy.ssh | Runs a command on a remote host — restarting a service, running a deploy script. |
| rsync | deploy.rsync | Syncs a directory to a remote host. |
| scp upload | deploy.scp | Copies files to a remote host. |
| HTTP request | deploy.http | Calls an endpoint — triggering a deploy, posting a notification. |
Data
| Action | ID | What it does |
|---|---|---|
| HTTP request | http.request | Sends a request with curl and publishes status and body as this step's outputs. A 4xx or 5xx does not fail the step — that is a decision for a run condition. |
| Read a JSON field | data.json-get | Pulls a field out of JSON (usually a previous http.request body) and publishes it as value. Path is dot-separated, arrays by number. Needs python3 or node on the runner. |
These two declare their outputs, so they appear in the Insert an output of an earlier step menu. Together with a run condition they are how a flow calls an API, reads a field and branches on the answer.
Checks
| Action | ID | What it does |
|---|---|---|
| File exists | check.file | Fails the build when the file is missing. |
| Command available | check.command | Fails the build when the command is not on PATH. |
Per-step settings
Every step in a flow carries these settings, independent of which action it uses:
- Enable this step — off means it is skipped without failing the build.
- Continue on failure — the build carries on past a non-zero exit.
- Depends on — which steps must finish first. Steps that depend on nothing start together; see the flow is a graph.
- Identifier — a short unique name so later steps can reference this one's outputs.
- Run condition (expression) — evaluated against earlier steps' outputs at run time. False means skipped, not failed.
- Run when — only if everything before succeeded (the default), always, or only after a failure. This is Jenkins'
post { always / failure }: a cleanup or notification step still runs after something has gone wrong, while ordinary steps are markedSkipped. The build still counts as failed. - Retries — 0 to 10 further attempts. Each attempt is a fresh shell, with the earlier output kept above it. Retries never extend the job timeout.
Script mode has none of these: a single compiled script has nowhere to put them.
Custom actions
A custom action is the same shape as a built-in one, stored as JSON in the database. You declare parameters and write a shell template; the template language is documented in the project's Docs/actions.md. Custom actions travel with export and import.
If you need behaviour rather than a template — logic, branching, calling an API — write a plugin instead.
Action packs
Manage actions has an Action packs section with a Reload button. Packs are shared action definitions kept in a repository — the public one is walisayu/walis-actions — pulled in as files rather than installed as code. They are still just parameter declarations and shell templates, so the same thing holds as for any action: you can read what will run before you use it.