A safety-first staged deployment and rollback reference application for Linux fleets.
Live demo: https://fleetpatch.kilobyte.gr/
Portfolio: https://portfolio.kilobyte.gr/
Large remote fleets make apparently simple upgrades risky. A reliable rollout needs explicit stages, independent health checks, human approval, bounded concurrency, rollback readiness, and a durable record of every decision.
FleetPatch demonstrates that workflow without executing commands on real systems.
- Canary, staging, percentage, and production rollout stages
- Human approval before stage transitions
- Health gates for probes, errors, latency, and resource pressure
- Fleet inventory with environment, region, version, health, and presence
- Rollback simulation with audit event generation
- Append-oriented operator activity timeline
- Typed React interface and concurrency-safe Go state transitions
- API tests, UI tests, Docker builds, and GitHub Actions CI
- Control plane: Go 1.23, standard
net/http, structuredslog - Frontend: React 19, TypeScript, Vite
- Testing: Go test, Vitest, Testing Library
- Delivery: multi-stage Docker, Nginx, Compose, GitHub Actions
npm install --prefix web
go run ./cmd/apiIn another terminal:
npm run dev --prefix web- Web console: http://localhost:4400
- API health: http://localhost:4300/api/health
Run all checks:
make check| Method | Route | Purpose |
|---|---|---|
GET |
/api/health |
Control-plane health |
GET |
/api/overview |
Fleet health and compliance |
GET |
/api/nodes |
Fleet inventory |
GET |
/api/deployments |
Rollout state |
GET |
/api/audit |
Operator event trail |
POST |
/api/deployments/:id/advance |
Approve the next stage |
POST |
/api/deployments/:id/rollback |
Stop and roll back a deployment |
State-changing requests require an actor:
curl -X POST http://localhost:4300/api/deployments/dep-2091/advance \
-H 'content-type: application/json' \
-d '{"actor":"release-manager"}'The public demo operates on synthetic browser state. The API also contains only sample nodes and does not implement remote command execution.
A production implementation must add mutual TLS, signed artifacts, strict role-based approval, environment allowlists, independent monitoring gates, and append-only audit storage. See docs/architecture.md.
docker compose up --buildThen open http://localhost:8080.
MIT © 2026 Vasileios Smyrlis
