Expand description
The daemon’s JSON API, version 1: the request and response types every client deserializes, and the
principal a transport authenticates. Plain data only: no I/O, no Docker or GitHub types, no secrets but a
Pairing’s one-time link, which its Debug leaves out.
Routes, all under the authenticated principal:
| Route | Body |
|---|---|
GET /v1/status | Status |
POST /v1/repositories/{owner}/{name}/pause?PauseQuery | Paused; 409 Busy while it runs a job |
POST /v1/repositories/{owner}/{name}/resume | none, 204 |
POST /v1/repositories/pause?PauseQuery | Paused; 409 Busy while any runs a job, pausing none |
POST /v1/repositories/resume | none, 204: every repository resumed |
POST /v1/profiles/{name}/reseed | none, 202; 409 while it reseeds; cache.reseeded when done |
POST /v1/caches/{name}/clean | none, 204; 409 Busy while a runner uses it |
GET /v1/config | ConfigFile |
POST /v1/config/check | TOML in, ConfigCheck |
PUT /v1/config | TOML in, ConfigCheck; 422 ConfigCheck when invalid |
GET /v1/doctor | Doctor |
POST /v1/shutdown | ShutdownRequest in, 202 |
GET /v1/dashboard | Dashboard |
POST /v1/dashboard/sign-out | none, 204 |
POST /v1/dashboard/pairings?PairingQuery | Pairings; 409 when the dashboard is off or has no [web] origins |
GET /v1/jobs?JobQuery | JobPage |
GET /v1/jobs/{id} | Job |
GET /v1/jobs/{id}/samples | SampleSeries |
GET /v1/jobs/{id}/logs?LogQuery | text/plain, one line per log line |
GET /v1/host/samples?HostSampleQuery | HostSamples |
GET /v1/stats?StatsQuery | Stats |
GET /v1/activity?ActivityQuery | Activity |
GET /v1/sizing?SizingQuery | Sizing |
GET /v1/insights?InsightsQuery | Insights |
GET /v1/digest | Digest |
POST /v1/notify/test?NotifyTestQuery | NotifyTest; 404 without [notify] targets or with no such one |
GET /v1/caches | Caches |
GET /v1/caches/history?CacheHistoryQuery | CacheHistory |
GET /v1/events?EventQuery | text/event-stream of EventEnvelope |
GET /v1/records | Records |
DELETE /v1/records/{job} | RemovedRecords; 409 while a shell is open in it |
DELETE /v1/records?RemoveRecordsQuery | RemovedRecords; records with an open shell stay |
POST /v1/records/{job}/shell?ShellQuery | Upgrade: SHELL_PROTOCOL, 101, then the shell’s terminal; 409 when the budget is full |
Errors carry an ErrorResponse.
Structs§
- Activity
GET /v1/activity: every job runnerd’s runners started or finished in a window, by when that happened rather than when the job was queued, so a job that waited or ran long counts in the window it started or ended in.- Activity
Query GET /v1/activityquery parameters.- Admission
- How a job’s runner was admitted.
- Auto
Plan - What auto sizing will do: its rules, the changes its next look would make as the history and config are now, and the profiles a recent change holds.
- Budget
- The memory budget runners and the mirror share, in bytes.
- Build
Cache Counts - What the shared build cache served one runner and took from it (ADR 0052), counted by the cache itself.
- Build
Cache Stats - The shared build cache (ADR 0052): its size now, and what it served the jobs of the last 7 days.
- Busy
- The body of a 409 refused because runners use what the request would change. Has the
messageof anErrorResponse, so a client that reads only that still gets it. - Cache
History GET /v1/caches/history: every measurement, oldest first.- Cache
History Query GET /v1/caches/historyquery parameters.- Cache
Size - One volume’s size at one measurement.
- Cache
Volume - One cache volume and its size.
- Caches
GET /v1/caches: every cache volume of the configured profiles, as last measured. Docker measures volumes slowly, so runnerd measures them at start and whenever no runner runs after jobs ended.- Check
- One thing the host needs to run runners. Its
Displayis the linerunnerd doctorprints. - Config
Check POST /v1/config/checkandPUT /v1/config: whatrunnerd check-configprints for a config.PUTrefuses an invalid one with 422 and this body, which has anErrorResponse’smessage.- Config
File GET /v1/config: the config the daemon runs with. Parsetextwithconfig::Config::parsefor its fields.- CpuAdmission
- What a runner reserved of the CPU budget. CPU in millicores, times in seconds.
- CpuBudget
- The CPU budget runners share, in millicores.
- Dashboard
GET /v1/dashboard: the dashboard’s[web]settings, as the daemon read them when it started.- Delivery
- What one target did with a message.
- Digest
GET /v1/digest: the last 24 hours.- Doctor
GET /v1/doctor: whatrunnerd doctorchecks, for the config the daemon runs with.- Error
Response - The body of every error response.
- Event
Envelope - One event as
GET /v1/eventssends it: the SSEdatafield. The SSEeventfield isevent.kind()and the SSEidfield isid. - Event
Query GET /v1/eventsquery parameters. Resume with theLast-Event-IDheader.- Host
Sample - One sample of the whole slice runners run in.
- Host
Sample Query GET /v1/host/samplesquery parameters.- Host
Samples GET /v1/host/samples: the slice’s use over time, oldest first.- Insight
- One thing the history says, about one job or one repository.
- Insights
GET /v1/insights: what the history says about the window.- Insights
Query GET /v1/insightsquery parameters.- Job
GET /v1/jobs/{id}: a job with its steps.- JobMetrics
- What a job used, over the samples taken while it ran (every few seconds).
Noneuntil a sample exists. - JobPage
GET /v1/jobs: one page of jobs.- JobQuery
GET /v1/jobsquery parameters. Jobs come newest first (by ID, which grows with time).- JobRunner
- The runner a job ran on.
- JobSizing
- The jobs of one name in one workflow of one repository.
- JobSummary
- A job without its steps: what lists and events carry.
- LogQuery
GET /v1/jobs/{id}/logsquery parameters. The response istext/plain, one log line per line.- LogSummary
- A job’s stored log.
- Long
Wait - A job that waited.
- Notification
- What a webhook target is posted, as JSON; an ntfy target gets its title, message, priority and link.
- Notify
Test POST /v1/notify/test: what each target did with a test message.- Notify
Test Query POST /v1/notify/testquery parameters.- Pairing
- A link that signs one device in to the dashboard on
origin, and nowhere else, withinlifetime. - Pairing
Query POST /v1/dashboard/pairings: which of[web] originsto make a link for.- Pairings
POST /v1/dashboard/pairings: fresh one-time links that sign a device in to the dashboard.- Pause
Query POST /v1/repositories/{owner}/{name}/pauseandPOST /v1/repositories/pausequery parameters.- Paused
POST /v1/repositories/{owner}/{name}/pauseandPOST /v1/repositories/pause: the repository, or every one, is paused, and stays paused when the daemon restarts.- Peaks
- The peaks of a set of jobs, each the highest of its samples.
- Profile
Sizing - One profile: its limits now, its jobs’ peaks and waits, and the advice.
- Profile
Status - A runner profile and what runs in its slots.
- Queued
Job - A queued job runners of this daemon can take, as GitHub listed it at the last poll.
- Record
- One record: the runner of a failed job as the job left it.
- Record
Limits - The limits on records, from
[records]in the config. - Record
Note - What the job history keeps about a failed job’s record, after the record is gone too.
- Records
GET /v1/records: every record, oldest first, and the limits they are kept within.- Remove
Records Query DELETE /v1/recordsquery parameters: exactly one of them.- Removed
Records DELETE /v1/records…: what was removed.- Replace
Query PUT /v1/configquery parameters.- Repository
Status - A configured repository and its queue.
- Repository
Waits - A repository’s waits this week against the week before.
- Resize
- A profile’s new
memory,slotsand, when auto sizing changed them,cpus. - RunLink
- One run of a job, to open in the history or on GitHub.
- Runner
Failure - A runner that could not be registered or started (
runner.failed). - Runner
Status - A runner registered for one job, in its container.
- Running
Job - A runner of this daemon that holds a slot, and the job it runs, if it took one.
- Sample
- One sample of a container’s use.
- Sample
Series GET /v1/jobs/{id}/samples: what the job’s container used over time, from its start to its removal. Samples older thanhistory.samplesare deleted; the job’s metrics stay.- Seed
Memory - A running seed container’s memory cap: its profile’s limit when the reseed started.
- Shell
Memory - A shell container’s memory cap: its record’s profile’s limit when the shell opened.
- Shell
Query POST /v1/records/{job}/shellquery parameters.- Shutdown
Request POST /v1/shutdown.- Sizing
GET /v1/sizing: what the job history says each configured profile needs.- Sizing
Change - A profile’s
memoryandslotsas auto sizing changed them in the config file. - Sizing
Hold - A profile auto sizing changes nothing in before
until, and lowers nothing in beforelower_until. - Sizing
Query GET /v1/sizingquery parameters.- Slot
Status - One slot of a profile: room for one job.
- Spread
- Percentiles of a set of values, by nearest rank: each is one of the values, and with fewer than 100 values
p99is the largest. - Started
- A job that started: when, and how long it had waited since it was queued.
- Starts
- A profile’s jobs by whether their runner was already up when GitHub queued them (ADR 0050).
- Stats
GET /v1/stats: finished jobs per repository and time bucket, for trends. Sums, so clients can average.- Stats
Query GET /v1/statsquery parameters.- Stats
Row - The finished jobs of one repository in one bucket.
- Status
GET /v1/status: what the daemon serves and runs right now.- Step
- One step of a job, as GitHub reports it.
- Timeline
- A job’s phases, in the order they happen. A runner’s container starts before GitHub gives it a job.
- Wait
Spread - How long some jobs waited.
- Week
Waits - The waits of the jobs that started in a week, from queued to started.
Enums§
- Admission
Policy [host] admission, as a job’s record and the budget name it.- Advice
- What to set a profile’s
memoryandslotsto.memoryis the largest sampled peak plus the margin, rounded up to 256M: the cap kills a job that goes over it, so it is sized for the heaviest run, not a percentile. - Auto
Note - What auto sizing does about a job near its cap.
- Basis
- What a runner reserved goes by, in the order measured admission falls back.
- Bucket
- How
GET /v1/statsgroups jobs in time. - Cache
Kind - What a cache volume holds.
- Check
Status - How a
Checkcame out. - Event
- Everything that happens, tagged by
type. - Insight
Kind - What an insight is, tagged by
kind. - JobPeak
- Which of a job’s own peaks
Basis::Jobgoes by. - JobState
- Where a job is in its life, as this daemon saw it.
- Notify
Event - What a notification target is sent, and the events
[notify]targets choose from. - Principal
- Who sent a request, as the transport authenticated it. Handlers get it from one place, so a new transport only has to produce one.
- Priority
- How urgent a notification is, as ntfy ranks it.
- Record
Removal - Why a record was removed.
- Severity
- How much an insight matters.
- Wait
Kind - What a
Waitingreason waits on, which clients draw it by. - Waiting
- Why a queued job has no runner of its own yet. Jobs are served oldest first; each takes the first of these that holds for it.
Constants§
- INSIGHT_
DAYS - The window
GET /v1/insightsreads by default, in days. - INSIGHT_
DAYS_ MAX - The longest window
GET /v1/insightsreads, in days. - SHELL_
PROTOCOL - The
Upgradeprotocol ofPOST /v1/records/{job}/shell: after101 Switching Protocolsthe connection carries the shell’s terminal, raw bytes both ways.