Skip to content

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 ​

ActionIDWhat it does
Run commandshell.runRuns a shell command in the working directory. The general-purpose action.
Print messageshell.echoWrites a line into the build log. Useful for marking progress.
Waitshell.sleepSleeps for a number of seconds — typically waiting for a service to come up.
Set environment variableshell.envSets a variable for subsequent steps by appending to $WALIS_ENV_FILE.
Set outputshell.outputsWrites name=value as this step's output, for later steps to reference as ${{ steps.ID.NAME }}.
Change directoryshell.cdSwitches directory; later steps run there too.

Files ​

ActionIDWhat it does
Create directoryfile.mkdirDoes not fail if the directory already exists.
Copy filefile.copyFiles or directories.
Move filefile.moveMove or rename.
Delete filefile.removeDoes not fail if the path is absent.
Zipfile.zipCompresses a directory or file into a zip.

Git ​

ActionIDWhat it does
Git clonegit.cloneOptional branch and depth.
Git checkoutgit.checkoutSwitch to a branch or commit.
Git pullgit.pullFetch and merge the latest commits.

Node ​

ActionIDWhat it does
Install dependenciesnode.installInstalls from the lock file.
Run npm scriptnode.scriptRuns a script from package.json.
Run npx commandnode.npxRuns a command a package provides.

.NET ​

ActionIDWhat it does
dotnet restoredotnet.restoreRestores NuGet dependencies.
dotnet builddotnet.buildBuilds a project or solution.
dotnet testdotnet.testRuns test projects.
dotnet publishdotnet.publishProduces publish output.

Containers ​

ActionIDWhat it does
Docker builddocker.buildBuilds an image.
Docker pushdocker.pushPushes an image to a registry.
Docker composedocker.composeBrings services up or updates them.
Run in a containercontainer.runMounts the working directory into an image and runs a script inside it — the equivalent of Jenkins' agent { docker }.

Deployment ​

ActionIDWhat it does
SSH remote commanddeploy.sshRuns a command on a remote host — restarting a service, running a deploy script.
rsyncdeploy.rsyncSyncs a directory to a remote host.
scp uploaddeploy.scpCopies files to a remote host.
HTTP requestdeploy.httpCalls an endpoint — triggering a deploy, posting a notification.

Data ​

ActionIDWhat it does
HTTP requesthttp.requestSends 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 fielddata.json-getPulls 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 ​

ActionIDWhat it does
File existscheck.fileFails the build when the file is missing.
Command availablecheck.commandFails 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 marked Skipped. 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.

Released under the MIT License.