Skip to content

Steps

A step has exactly one of run, uses or template.

steps:
- name: Checkout
uses: slipway/checkout@v1
with: { depth: 1 }
- name: Build
id: build
run: go build ./...
shell: bash # bash | sh | pwsh | python | node
working_directory: ./svc
env: { X: y }
timeout: 10m
continue_on_error: false
if: ${{ git.branch == "main" }}
- name: Upload binary
uses: slipway/artifact-upload@v1
with: { name: api, path: bin/api, retention: 7d }

A shell script. The default shell comes from defaults.shell. Secrets must never be interpolated into run; pass them through env:

- run: ./deploy.sh
env:
TOKEN: ${{ secrets.DEPLOY_TOKEN }}

Direct use of secrets.* in run, name or if is rejected at validation time. This stops accidental disclosure through shell history, process listings and log lines.

Form Meaning
owner/name@ref A step from the Slipway registry (OCI-distributed step.yaml plus image or JS bundle)
docker://image:tag Run an image as a step; with becomes environment variables
./.slipway/steps/foo A local step in the repository
github://actions/checkout@v4 A GitHub Action through the compatibility shim (JavaScript and Docker actions)

Built-in steps you will meet quickly: slipway/checkout@v1, slipway/artifact-upload@v1, slipway/docker-build@v1, slipway/release-create@v1 and slipway/deploy@v1.

template: org/name@v1 pulls an org-level template with parameters. See Templates.

Write key=value lines to the file named by $SLIPWAY_OUTPUT:

- id: ver
run: echo "version=$(git describe --tags)" >> "$SLIPWAY_OUTPUT"
- run: echo "building ${{ steps.ver.outputs.version }}"

Export a job output so other jobs can read it:

outputs:
version: ${{ steps.ver.outputs.version }}

Other conventions: $SLIPWAY_ENV (environment for later steps), $SLIPWAY_PATH (prepend to PATH). Logging commands on stdout (::mask::, ::group::, ::error::) are covered in Workflow commands.

  • if: defaults to success(). Use always() for cleanup, failure() for diagnostics.
  • continue_on_error: true marks a step’s failure as non-fatal. It can be an expression.
  • timeout: applies per step and cannot exceed the job timeout.

Environment variables merge from broad to narrow: pipeline env, container env, job env, step env. The runner also sets SLIPWAY_* variables, including SLIPWAY_ID_TOKEN when the job has permissions: { id_token: write }.