Read CI results and logs
Push and read results
Push to a triggering branch or tag as usual. The receive hook queues one job per
updated branch head or tag; the runner picks it up within ci_poll_seconds.
In the dashboard, open a project and follow the CI tab:
/<...>/project/<id>/cilists runs with an at-a-glance status icon, branch, commit, and timing — how long a finished run took, or how long a running one has been going. The list refreshes itself while a run is in progress./<...>/project/<id>/ci/<run-id>is one run's live status page: overall status with elapsed time, each step's result, the running step's output tail, and artifacts. While the run is active the page auto-refreshes (no JavaScript — a plain<meta refresh>that fits the dashboard's strict content policy) and stops once the run is terminal./<...>/project/<id>/ci/<run-id>/<step>.logshows one step's full output, with a Follow live button that tails the running step in real time over Server-Sent Events (<step>.stream). This is the one page that runs a small, nonce-scoped script under a relaxed policy; the static log still works without JavaScript, and the number of concurrent live streams is capped so followers cannot starve the dashboard.
The projects index also carries a Last CI column with each project's newest run status and timing, so a running or failed build is visible without opening the project.
Run status is one of success, failure (a step exited non-zero), timeout (a
step exceeded its budget), error (the run could not be set up — for example a
malformed workflow), cancelled (stopped on request — see below), or skipped
(no workflow, or a non-triggering branch). A running build whose runner stops
reporting is shown as interrupted until the next runner sweep settles it.
Watch and cancel a run
Progress and cancellation are available three ways, all reading the same run
records and, for a stop, dropping one cooperative cancel marker that the runner
honours between and within steps — it kills the current step's process group and
records the run cancelled, well before a long step would finish on its own.
A run still queued is cancelled before it starts.
- Dashboard — the live run page has a Cancel run button. It is the read-
only dashboard's one mutating action: a loopback-only, same-origin
POSTto/project/<id>/ci/<run-id>/cancel, which the daemon answers by writing the marker directly. Any paired device —
ckgit ciworks from a checkout of the project (or with--project NAMEanywhere) over the same restricted SSH account asckgit sync; no server login is needed:ckgit ci status # CI on or off, latest and active run ckgit ci status --all # the same for every hosted project ckgit ci list --limit 10 # runs, newest first, with their ids ckgit ci show RUN # steps, exit codes, detail, artifacts ckgit ci log RUN --follow # the running step's raw log, live, then the next ckgit ci watch # wait for the newest active run; exit 0 on success, 5 otherwise ckgit ci cancel RUN # preview, confirm, then request the stopStatuses follow the dashboard's rules, judged by the server's clock: a running run whose runner has not reported for 90 seconds is shown as interrupted.
ci cancelpreviews the run and asks before it acts (--dry-runonly previews,--yesconfirms without asking); any paired device may cancel any project's run, which is weaker than the push access every device already has, and the project page records which device asked.status,list,show, andartifactstake--jsonfor scripts. Enabling or disabling CI, rerunning or triggering runs, and secrets stay with the administrator on the server.Server —
ckgit-admin, as theckgitservice account, reads and cancels the records directly:sudo -u ckgit ckgit-admin ci runs myproject --config /etc/ck-git-hosting/server.ini sudo -u ckgit ckgit-admin ci log myproject <run-id> --follow --config /etc/ck-git-hosting/server.ini sudo -u ckgit ckgit-admin ci cancel myproject <run-id> --config /etc/ck-git-hosting/server.inici runslists recent runs with status and timing;ci logprints a step's output and, with--follow, streams the running step live;ci cancelrequests cancellation.
ckgit ci uses the five ci-* control operations documented in the
SSH and control protocol.
On the server, the records are also plain files under the state root:
sudo ls /var/lib/ck-git-hosting/state/ci/runs/myproject
sudo cat /var/lib/ck-git-hosting/state/ci/runs/myproject/<run-id>/run.ini