Shipfox
Reference

Workflow YAML reference

Define when Shipfox runs and what each workflow does.

Look up supported fields, accepted values, and nested blocks while writing a workflow.

Enable editor autocomplete

Add # yaml-language-server: $schema=https://www.shipfox.io/docs/workflow.schema.json as the first line of a workflow file.

Top-level fields

Prop

Type

Workflow and job names

Workflow and job names use separate static and dynamic fields.

FieldNamesExpressionsRequired
nameWorkflow definitionNot allowedYes
run_nameWorkflow runAllowedNo
jobs.<job_key>.nameJobNot allowedNo
jobs.<job_key>.execution_nameJob executionAllowedNo

Static names

Workflow name and job name values are literal labels. A job name is optional. Add one when the job key is not a useful label. The job key is the fallback when no job name is set.

Interpolation in a static name is invalid. Use the matching dynamic field:

Workflow name must be literal. Move runtime interpolation to run_name.
Job name must be literal. Move runtime interpolation to execution_name.

Dynamic run names

run_name resolves when Shipfox creates a workflow run. It can use trigger metadata, trigger event data, workflow inputs, referenced workflow variables, and stable run facts that already exist at creation time.

The allocated run.number is one of those run facts. It is a positive, sequential number scoped to the workflow definition. Use it in a dynamic field when the field can read the run context.

It cannot use job, execution, step, or job-output values that do not exist when the run is created. A rerun keeps the original resolved run name.

Dynamic execution names

execution_name resolves when Shipfox creates a job execution. It can use run context, trigger data, inputs, referenced variables, stable job facts, the execution sequence, listener events, and prior executions.

It cannot use the current execution name, future executions, step results, or job outputs that do not exist at execution creation.

Listening jobs resolve execution_name separately for each execution. The template can therefore include the event batch or execution sequence.

Fallbacks and reruns

Dynamic names are optional and affect display labels only. If a dynamic field is omitted or resolves to an empty value, Shipfox uses the matching static fallback. A runtime resolution failure also uses that fallback and records a diagnostic without changing execution status.

Dynamic fieldStatic fallback
run_nameWorkflow name
execution_nameJob name, or the job key

Dynamic-name expressions that use unavailable context or invalid syntax are definition validation errors. Rerunning a workflow keeps its resolved run name. Rerunning a job execution keeps its resolved execution name.

Run number

run.number is a display label for the current run. It starts at 1 for each workflow definition and increases for later runs of that definition. It is not a URL or API identifier. Run routes continue to use the run UUID.

For example, a job execution can include the number in its display name:

# yaml-language-server: $schema=https://www.shipfox.io/docs/workflow.schema.json
name: Deploy
jobs:
  deploy:
    execution_name: 'Deploy #${{ run.number }}'
    steps:
      - run: ./deploy.sh
# yaml-language-server: $schema=https://www.shipfox.io/docs/workflow.schema.json
name: Pull request review
run_name: 'Review PR #${{ event.pull_request.number }}'

jobs:
  reviews:
    name: Process review
    execution_name: Review batch ${{ execution.index }}
    listening:
      on:
        - source: github
          event: pull_request_review
    steps:
      - prompt: Summarize ${{ execution.events[0].data.body }}

Trigger fields

Prop

Type

Job fields

Prop

Type

Job outputs values are templates. A value that contains exactly one expression preserves its inferred non-string type, including arrays and objects. An expression without an inferred type resolves to a string. Mixed literal and expression templates also resolve to strings. A downstream job must declare a direct needs edge before it reads the output.

Job checkout fields

The job-level checkout block supports repository permissions and credential persistence. checkout: false is accepted by the document schema but is not supported by the workflow model yet.

Prop

Type

Checkout fields

These fields apply to an explicit checkout step.

Prop

Type

Checkout permissions fields

These permissions apply to both job-level checkout and explicit checkout steps.

Prop

Type

Step fields

Each step is either a run step, an agent step, or a checkout step. The schema rejects unknown fields and invalid field combinations.

Run step fields

Prop

Type

A ${{ }} value in run reaches the command as a quoted shell variable, so the shell reads it as text and not as part of the command.

Keep run data out of code positions

Some programs read their argument as code again, which puts an interpolated value back in a code position: eval, sh -c, bash -c, source, let, declare -i, shell arithmetic, awk, jq, sed, and xargs sh -c. A value that reaches one of them runs on the runner with the job's credentials and workspace. Event payloads, trigger inputs, and step outputs come from outside the workflow, so pass them as arguments to a fixed program instead: deploy "$TARGET" rather than eval "deploy $TARGET". A workflow sync warns when it finds one of these positions.

Checkout step fields

Prop

Type

Agent step fields

Prop

Type

Agent integration fields

Prop

Type

Gate fields

Prop

Type

A gate must define success, on_failure, or both.

Gate failure fields

Prop

Type

Step outputs

Prop

Type

Each output declaration can be its type directly (for example, sha: string) or an object with required type. Only json declarations can include schema.

Listening fields

Prop

Type

Listening batch fields

Prop

Type

A batch must set at least one of debounce, max_size, or max_wait.

Environment variables

Prop

Type

Was this page helpful?
Edit this page on GitHub

On this page