Pipelines
The Pipelines page (/pipelines) tracks CI activity for a tenant's own repositories — it's meant for a customer's external CI (their own GitHub Actions, GitLab CI, or anything else) to report into, not a KubeOpera-hosted build system. Every pipeline you register belongs to your tenant alone; kubeopera-api resolves your tenant from your session and never trusts a client-supplied tenant ID, so there's no way to see or write another tenant's pipelines.
A pipeline gets created two ways: manually, via the Create Pipeline form described below, or automatically the first time you deploy a GitHub-sourced app through the Deploy Application Wizard — a matching Pipeline and Build Config are registered for you with no extra step, and the build's real progress reports into it. See App Creation Flow for that path.
Summary cards
Four cards, togglable between the tenant-wide 7-day rollup and one specific pipeline's own numbers via the dropdown above them: Total Runs, Success Rate, Failed Runs, and Avg Duration.
Reporting into a pipeline
After creating a pipeline, the confirmation panel shows two things, once, that are never shown again: the webhook URL to configure at your Git host (https://cicd.kubeopera.io/webhook/{github|gitlab}, triggered on Push), and a one-time reporting token for direct API reporting from your own CI. Copy the token immediately — it isn't retrievable again after this screen.
Two ways to use the token, both shown as ready-to-use curl snippets with your real pipeline ID and token already filled in:
Option A — your CI creates and owns the run:
RUN_ID=$(curl -s -X POST https://cicd.kubeopera.io/api/v1/pipelines/<id>/runs \
-H "X-Pipeline-Token: <token>" -H "Content-Type: application/json" \
-d '{"commit":"'"$GIT_SHA"'","branch":"'"$GIT_BRANCH"'","trigger_type":"manual"}' | jq -r .id)
curl -s -X PATCH https://cicd.kubeopera.io/api/v1/runs/$RUN_ID \
-H "X-Pipeline-Token: <token>" -H "Content-Type: application/json" \
-d '{"status":"success","stages":[{"name":"build","status":"success"}]}'
Option B — correlate with the run a push webhook already created:
RUN_ID=$(curl -s "https://cicd.kubeopera.io/api/v1/pipelines/<id>/runs/find?commit=$GIT_SHA" \
-H "X-Pipeline-Token: <token>" | jq -r .id)
Either way, a stage report can include real failure diagnostics — error_message, a short log_excerpt (keep it to the last ~20 lines or the failing assertion, not a full log), exit_code, and a log_url pointing at the real source of truth (for GitHub Actions, ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} needs no extra setup to construct). PATCHing the same stage name twice updates that one stage in place rather than creating a duplicate — so an incremental "running → success/failed" report for the same stage works as expected.
The repository string you register (owner/repo for GitHub, group/project for GitLab) must exactly match what the webhook payload reports, since that's how an inbound webhook event gets correlated to your pipeline.
Webhook signature verification (GITHUB_WEBHOOK_SECRET/GITLAB_WEBHOOK_TOKEN) isn't provisioned on every deployment today — if it isn't configured, anyone who discovers your webhook URL could post a fake run. The reporting-token path (Option A/B above) doesn't have this exposure, since the token is generated per-pipeline and never guessable.
Run list and detail
The run list and its detail view are a master/detail split, the same pattern used on the Incidents and Traces pages: select a run on the left, see its full detail on the right — there's no inline accordion-expand here.
The detail panel includes a Gantt-style timeline: one horizontal bar per reported stage, positioned and sized by its real started_at/finished_at timestamps against the run's own total duration, colored by status (running/success/failed). For each stage, the panel also shows any error_message, log_excerpt, and a link to the real log (log_url) — when a stage carries none of these, it just shows its status and timing, no fabricated detail.
The "closed browser" guarantee
For an app deployed via the wizard's GitHub-source path, the Kaniko build's own progress is reported into its pipeline by build-service itself, server-side — not by the browser tab that started the deploy. If you close the wizard, or the whole browser, before the build finishes, the run in the Pipelines dashboard still reaches a correct final state with full stage data, because nothing about reporting depends on that tab staying open.