尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Pipeline health dashboard for GitLab™: history, trends, MTTR and inline failure logs. Not affiliated with GitLab Inc.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Pipeline health dashboard for GitLab™.
GITLAB is a trademark of GitLab Inc. in the United States and other countries and regions. pipepulse is an independent project, not affiliated with, endorsed, sponsored or approved by GitLab Inc.
Monitor multiple GitLab projects from a single view — with history, trends, and inline failure logs.
Live demo: pipepulse.morv.dev (generated sample data, no GitLab token needed)
Most CI dashboards show only the current state. pipepulse stores pipeline history in Postgres and surfaces:
Inspired by larscom/gitlab-ci-dashboard and ci-dashboard/gitlab-ci-dashboard. pipepulse adds persistent history, trend analytics, and a premium-grade UI.
| Layer | Tech |
|---|---|
| Backend | Python · FastAPI · async background worker |
| Database | PostgreSQL |
| Frontend | Next.js · TypeScript · Recharts |
| Infra | Docker · Helm (k3s) · GitHub Actions |
| Demo | Vercel (dashboard only, snapshot data) · pipepulse.morv.dev |
read_api token: every accessible project by default, or a chosen listprefers-reduced-motion respected┌─────────────────────────────────────────────────────────────────┐
│ Projects: 6 Active failures: 2 Avg build: 4m 12s ✓ 94% │
├────────────────┬──────────────────────┬────────────┬────────────┤
│ Project │ Pulse (last 20) │ Status │ Duration │
├────────────────┼──────────────────────┼────────────┼────────────┤
│ api-service │ ▁▃▂█▂▁▃▂▁▁▂▃▁▂█▂▁▃▂▁│ ✓ success │ 3m 48s │
│ web-frontend │ ▂▁▃█▁▂▃▁▂▃▁▂▁▃▁▂▁▃▁▂│ ✗ failed │ 6m 02s │ ← expanded
│ └─ test:e2e │ Error: Cannot find module './auth' ... │
│ infra-deploy │ ▁▁▂▁▃▁▁▂▁▃▁▁▂▁▁▃▁▁▂▁│ ✓ success │ 1m 15s │
└────────────────┴──────────────────────┴────────────┴────────────┘
The public demo is the dashboard alone, deployed on Vercel with PIPEPULSE_DEMO=true. It needs
no backend or database: it serves web/src/demo/snapshot.json, a snapshot recorded from the
real API on generated data (6 projects, 60 days of history). Timestamps are shifted to "now" on
every request, so the demo never looks stale.
Regenerate the snapshot after changing the API or the demo data:
docker compose up -d postgres migrate
cd api && uv run python -m pipepulse.seed.snapshot ../web/src/demo/snapshot.json
To run pipepulse for real against your GitLab, use docker-compose (below) or the Kubernetes guide.
Prerequisites: Docker with the Compose plugin. For working on the API outside containers also uv. Postgres runs in Docker, so you don't need to install it locally.
cp .env.example .env
docker compose up --build # everything: dashboard on :3000, API on :8000
open http://localhost:3000
API without Docker (needs a reachable Postgres, see PIPEPULSE_DATABASE_URL):
cd api
uv sync
uv run alembic upgrade head
uv run uvicorn pipepulse.main:app --reload
uv run pytest
Dashboard (Next.js, needs the API running):
cd web
npm install
npm run dev # http://localhost:3000
npm test # unit tests (ANSI log parser, formatting)
DB-backed tests use a separate database. Create it once and they'll run against it, otherwise they're skipped:
docker compose exec postgres psql -U pipepulse -c 'CREATE DATABASE pipepulse_test'
read_api scope..env:
PIPEPULSE_GITLAB_URL=https://gitlab.com # or your self-managed instance
PIPEPULSE_GITLAB_TOKEN=glpat-...
PIPEPULSE_PROJECTS=my-team/backend, my-team/frontend # optional
Leave PIPEPULSE_PROJECTS empty to track every project the token can see pipelines of
(Reporter access and up, not archived, CI enabled); ones that never ran a pipeline stay
off the dashboard until they do. To pick projects, list their paths from
the GitLab URL: https://gitlab.com/my-team/backend → my-team/backend (subgroups
included, e.g. my-team/apps/mobile).docker compose up --build -d and open http://localhost:3000.The worker checks the token's scopes at startup, then every 2 minutes picks up new projects
(backfilling 30 days of history) and syncs pipelines and failed job logs. Follow it with
docker compose logs -f worker. Changing .env needs docker compose up -d to take effect.
A project that's no longer configured (or no longer accessible) isn't deleted: it stops being polled and moves to a "Removed from configuration" section on the dashboard, history intact. Configure it again and it resumes; or delete it there, confirming with its path, to drop its history for good.
The dashboard has no login, and job logs can contain sensitive output: keep it on a private network, or put it behind your reverse proxy's authentication.
API docs: http://localhost:8000/api/docs
GET /metrics on the API (port 8000, deliberately not under /api, so the dashboard's
public routes never expose it) serves per-project gauges computed from the stored history:
pipepulse_project_failing, _running_pipelines, _pipelines{status}, _success_ratio,
_duration_avg_seconds, _duration_p90_seconds, _mttr_median_seconds (default branches,
7-day window, ?days= to change) and _last_polled_timestamp_seconds, which makes a good
staleness alert, e.g. time() - pipepulse_project_last_polled_timestamp_seconds > 900.
The Helm chart annotates the API pods for annotation-based scraping.
Repo layout: api/ (FastAPI + poller), web/ (Next.js dashboard), deploy/ (Helm chart and self-hosting guide).
MIT