Last updated 2026-05-07

Workflow Compatibility

A precise breakdown of what GitHub-Actions YAML the runner supports. "Full" means the implementation matches GitHub's documented behaviour in every test we have. "Stub" means the keyword is parsed but does not do anything functional yet.

Triggers

TriggerSupportNotes
workflow_dispatchFullInputs passed via POST /api/runs.
pushParsedTriggered as workflow_dispatch; trigger metadata reflects current git state.
pull_requestParsedSame as above.
workflow_callFullLocal + remote reusable workflows.
workflow_runNot supported
scheduleNot supported
repository_dispatchNot supported

Job-level keys

FeatureSupportNotes
needs:FullTopological sort with cycle detection.
if:FullAuto-wraps unwrapped expressions.
env:FullMerged: workflow > job > step.
defaults.run.shellFullbash, sh, pwsh, python.
defaults.run.working-directoryFullRelative to workspace.
strategy.matrixFullCartesian + include + exclude.
strategy.fail-fastFullDefault true (matches GitHub).
strategy.max-parallelFullLimits concurrent matrix instances.
outputs:FullExpression-evaluated from step outputs.
services:FullBacked by docker compose.
timeout-minutesFullJob default 360, step default 60.
uses: (reusable)FullLocal ./ and remote org/repo@ref.
with: (reusable)Full
secrets: inheritFullPasses all secrets through.
concurrencyNot supported
permissions / OIDCNot supported
environment deploymentsPartialEnvironment names are parsed for the local deployment ledger; GitHub Environments protection rules are not enforced.

Step-level keys

FeatureSupportNotes
run:FullShell command execution.
uses:FullLocal, marketplace, docker://.
with:FullInputs evaluated through expressions.
env:FullMerged with workflow + job env.
if:FullAll expression functions.
working-directoryFullRelative to workspace.
shellFullbash / sh / pwsh / python.
continue-on-errorFullStep failure does not fail the job.
idFullReferenced via steps.<id>.outputs.
timeout-minutesFullDefault 60.

Expressions

Contexts

ContextAvailable
github.*Yes — event_name, ref, sha, repository, workspace, actor, run_id, token.
env.*Yes — merged workflow + job + step env.
inputs.*Yes — from workflow_dispatch or workflow_call.
steps.<id>.outputs.*Yes
steps.<id>.outcomeYes
steps.<id>.conclusionYes
needs.<job>.outputs.*Yes
needs.<job>.resultYes
jobs.<job>.outputs.*Yes
matrix.*Yes
secrets.*Yes
runner.osYes — macOS, Linux, or Windows.
runner.archYes
runner.nameAlways local-runner.
runner.tempSystem temp directory.

Operators

== != < > <= >= && || !

Functions

FunctionSupportNotes
contains(search, item)FullCase-insensitive.
startsWith(string, prefix)FullCase-insensitive.
endsWith(string, suffix)FullCase-insensitive.
format(string, …)Full{0}, {1} placeholders.
toJSON(value)Full
fromJSON(string)Full
join(array, separator)Full
success()YesAlways true (default assumption).
failure()YesAlways false.
cancelled()YesAlways false.
always()YesAlways true.
hashFiles(pattern)StubReturns 'local-hash-placeholder'.

Workflow commands

The runner parses these from step output:

  • ::set-output name=KEY::VALUE (legacy) and echo KEY=VALUE >> $GITHUB_OUTPUT
  • ::error file=…,line=…::msg / ::warning::msg / ::notice::msg
  • ::group::title / ::endgroup::
  • ::add-mask::value — masked in subsequent log lines.
  • echo VAR=val >> $GITHUB_ENV / echo /path >> $GITHUB_PATH

What's adjusted vs. cloud GitHub Actions

IssueResolution
runs-on: ubuntu-latestIgnored. Steps run on your local OS.
Cloud artifact / cache callsUse the shimmed actions/upload-artifact and actions/cache.
GITHUB_TOKENSet as an env var, or via POST /api/secrets/GITHUB_TOKEN.
Private marketplace actionsSet GITHUB_TOKEN or GH_TOKEN for clone auth.
services: blocksRequire a working docker compose.