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
| Trigger | Support | Notes |
|---|---|---|
workflow_dispatch | Full | Inputs passed via POST /api/runs. |
push | Parsed | Triggered as workflow_dispatch; trigger metadata reflects current git state. |
pull_request | Parsed | Same as above. |
workflow_call | Full | Local + remote reusable workflows. |
workflow_run | Not supported | |
schedule | Not supported | |
repository_dispatch | Not supported |
Job-level keys
| Feature | Support | Notes |
|---|---|---|
needs: | Full | Topological sort with cycle detection. |
if: | Full | Auto-wraps unwrapped expressions. |
env: | Full | Merged: workflow > job > step. |
defaults.run.shell | Full | bash, sh, pwsh, python. |
defaults.run.working-directory | Full | Relative to workspace. |
strategy.matrix | Full | Cartesian + include + exclude. |
strategy.fail-fast | Full | Default true (matches GitHub). |
strategy.max-parallel | Full | Limits concurrent matrix instances. |
outputs: | Full | Expression-evaluated from step outputs. |
services: | Full | Backed by docker compose. |
timeout-minutes | Full | Job default 360, step default 60. |
uses: (reusable) | Full | Local ./ and remote org/repo@ref. |
with: (reusable) | Full | |
secrets: inherit | Full | Passes all secrets through. |
concurrency | Not supported | |
permissions / OIDC | Not supported | |
environment deployments | Partial | Environment names are parsed for the local deployment ledger; GitHub Environments protection rules are not enforced. |
Step-level keys
| Feature | Support | Notes |
|---|---|---|
run: | Full | Shell command execution. |
uses: | Full | Local, marketplace, docker://. |
with: | Full | Inputs evaluated through expressions. |
env: | Full | Merged with workflow + job env. |
if: | Full | All expression functions. |
working-directory | Full | Relative to workspace. |
shell | Full | bash / sh / pwsh / python. |
continue-on-error | Full | Step failure does not fail the job. |
id | Full | Referenced via steps.<id>.outputs. |
timeout-minutes | Full | Default 60. |
Expressions
Contexts
| Context | Available |
|---|---|
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>.outcome | Yes |
steps.<id>.conclusion | Yes |
needs.<job>.outputs.* | Yes |
needs.<job>.result | Yes |
jobs.<job>.outputs.* | Yes |
matrix.* | Yes |
secrets.* | Yes |
runner.os | Yes — macOS, Linux, or Windows. |
runner.arch | Yes |
runner.name | Always local-runner. |
runner.temp | System temp directory. |
Operators
== != < > <= >= && || !Functions
| Function | Support | Notes |
|---|---|---|
contains(search, item) | Full | Case-insensitive. |
startsWith(string, prefix) | Full | Case-insensitive. |
endsWith(string, suffix) | Full | Case-insensitive. |
format(string, …) | Full | {0}, {1} placeholders. |
toJSON(value) | Full | |
fromJSON(string) | Full | |
join(array, separator) | Full | |
success() | Yes | Always true (default assumption). |
failure() | Yes | Always false. |
cancelled() | Yes | Always false. |
always() | Yes | Always true. |
hashFiles(pattern) | Stub | Returns 'local-hash-placeholder'. |
Workflow commands
The runner parses these from step output:
::set-output name=KEY::VALUE(legacy) andecho 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
| Issue | Resolution |
|---|---|
runs-on: ubuntu-latest | Ignored. Steps run on your local OS. |
| Cloud artifact / cache calls | Use the shimmed actions/upload-artifact and actions/cache. |
GITHUB_TOKEN | Set as an env var, or via POST /api/secrets/GITHUB_TOKEN. |
| Private marketplace actions | Set GITHUB_TOKEN or GH_TOKEN for clone auth. |
services: blocks | Require a working docker compose. |