尚未检测到更新。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