Actions reference¶
Technical reference for action definition files.
File location¶
Action definitions are YAML files in the data/actions/ directory. The filename (without .yaml) becomes the action's slug.
data/actions/
├── update-copyright.yaml → slug: "update-copyright"
└── sync-templates.yaml → slug: "sync-templates"
Definition schema¶
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
name |
string | Yes | — | Display name shown on the dashboard |
description |
string | Yes | — | What the action does |
targets |
TargetSpec | No | null |
Which repos to run against; null = global action |
script |
string | Yes | — | Bash script to execute |
schedule |
string (cron) | No | null |
Cron schedule; null = manual-only |
enabled |
boolean | No | true |
Whether the action runs on schedule |
Target spec¶
Works identically to checks targeting. Exactly one of list, regex, or script must be set.
If targets is omitted entirely, the action is global — it runs once without iterating over repositories.
Exit codes¶
| Exit code | Result |
|---|---|
0 |
Success |
| Non-zero | Failure |
Script execution environment¶
| Property | Value |
|---|---|
| Working directory | Cloned repo at target branch (or workspace root for global actions) |
| Timeout | 600 seconds (10 minutes) |
| Output cap | 64 KB (stdout + stderr) |
| Shell | /bin/bash |
Environment variables¶
| Variable | Description |
|---|---|
REPO_OWNER |
Repository owner |
REPO_NAME |
Repository name |
REPO_FULL_NAME |
owner/name |
BRANCH |
Current branch |
GH_TOKEN |
GitHub token (for gh CLI) |
The gh CLI is pre-installed in the Docker image.
Concurrency¶
Only one instance of a given action can run at a time. A second trigger returns HTTP 409 Conflict.
API endpoints¶
| Method | Path | Description |
|---|---|---|
GET |
/api/actions |
List all action definitions |
GET |
/api/actions/{slug}/runs |
Run history (reverse chronological) |
GET |
/api/actions/{slug}/runs/{id} |
Specific run details + logs |
POST |
/api/actions/{slug}/run |
Trigger action; optional ?repo=owner/name; 409 if already running |