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
Budget - What the host’s memory leaves the runners (ADR 0055). New runners fit in the lower of
MemoryMaxandlimit; running ones are never stopped for it. - Host
Memory - The host’s memory at one moment, beside the slice’s: what admission fits new runners in besides
MemoryMax(ADR 0055). Read every few seconds; not kept in the history. - 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.
- Pressure
- One line of a pressure stall file, in hundredths of a percent: 250 is 2.5% of the time.
- 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, or plusPAGE_CACHE_ROOMwhen that is more, 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. - Hold
Cause - What failed, that holds a repository’s runners back for a while.
- 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. - PAGE_
CACHE_ ROOM - What a cap keeps at least over the largest peak, for page cache: 1G. Peaks leave page cache out, and a container whose memory past them leaves the kernel less than about 500M of page cache to reclaim at its cap reclaims badly, which throttles its sockets and slows its downloads (ADR 0055).
- SHELL_
PROTOCOL - The
Upgradeprotocol ofPOST /v1/records/{job}/shell: after101 Switching Protocolsthe connection carries the shell’s terminal, raw bytes both ways.