Jobs
A job is a name, a script, a place to run it, and the rules for when it runs. Jobs do not store steps — those are derived when a build starts, which is why changing a job never needs a migration of past builds.
The list
Filter by status (enabled, paused) and by trigger (manual, on push, on schedule). Each row shows the last build, the trigger configuration, and a success rate.
The list only shows jobs your role can see. A job you cannot see is not merely hidden: requesting it by identifier returns 404, not 403, so the response does not confirm that it exists.
Export and Import move jobs and custom actions between machines as JSON. Import matches by name, not identifier — with overwrite off, a name that already exists is skipped; with it on, the existing job is updated in place and keeps its identifier and build history.
The editor
Basics
Name, project, default branch, description and source repository. The repository address is what push triggers match against, after normalisation — [email protected]:x/y.git and https://github.com/x/y are the same repository.
Build script
Two modes, switchable at any time:
- Flow mode — assemble the script from actions. The flow is compiled into a plain shell script when you save.
- Script mode — edit that shell directly.
Switching flow → script keeps the compiled output. Switching script → flow restores the steps and discards manual edits made in script mode. If you have hand-tuned a script, stay in script mode.
AI check script sends the script to your configured provider and reports what looks wrong. It does not modify the script.
Build settings
| Field | Notes |
|---|---|
| Runner | local or a registered remote runner. Work for an offline runner stays queued. |
| Working directory | Use an absolute path. Must be inside Allowed working directories if that list is set, or the build fails immediately. |
| Timeout | A budget for the whole build, not per step. Each step gets what is left. |
| Artifact paths | Copied out on success. Capped at 200 files / 64 MB. |
| Build cache | One relative path per line. Absolute paths and .. are ignored. |
| Matrix | {"NODE":["20","22"],"OS":["mac"]} fans out into one build per combination. Capped at 50. |
Permissions
Roles that can see this job defaults to viewer; roles that can run this job defaults to operator. These are per job, so a deployment job can be administrator-only while the rest of the list stays visible to everyone.
Triggers and notifications
Manual, on push, and cron can all be on at once. Create paused makes a job that will not run and will not be scheduled until you enable it — useful when you are still writing the script.
The push webhook URL lives in Settings → Security, not here.