A Phoenix LiveView rewrite of Thoughtworks GoCD — distributed CI/CD with plugin extensibility, built-in observability, and a Go-powered agent.
mix setup # install deps, create DB
mix phx.server # start at localhost:4000docker compose up -d postgres jaeger otel-collector
process-compose upStarts Phoenix server + CI agent (elixir,postgres) + Docker agent (docker).
See process-compose.yaml.
Full GoCD parity — pipelines, stages, jobs, materials, VSM, analytics, config-as-code, elastic agents, RBAC, and more. See PARITY.md.
| Area | Highlights |
|---|---|
| Pipeline engine | Scheduling, fan-in, config diff, locking, manual/auto trigger |
| Agents | WebSocket protocol, Go binary (~10MB), elastic (K8s + Docker) |
| UI | LiveView dashboard, stage overview popups, Gantt charts, VSM |
| Config | XML import/export, YAML config repos, templates, wizard |
| Observability | Built-in OpenTelemetry, Jaeger traces, Grafana dashboards |
| Plugins | Standalone OTP apps — agent selectors, org hierarchy, auth |
| Security | RBAC with Bodyguard, per-environment policies, PAT, encryption |
| Layer | Tech |
|---|---|
| Server | Elixir + Phoenix LiveView + Ecto (PostgreSQL) |
| Agents | Go — statically linked, no cgo |
| Plugins | Standalone OTP apps via libcluster |
| Frontend | Phoenix LiveView + Tailwind CSS + daisyUI |
| Ops | OpenTelemetry, Jaeger, Grafana, Docker Compose |
| Service | URL |
|---|---|
| ex_gocd | localhost:4000 |
| Adminer (DB) | localhost:8092 |
| Grafana | localhost:3000 |
| Jaeger (traces) | localhost:16686 |
| smtp4dev (email) | localhost:8025 |
mix test # full suite (needs Postgres)
EX_GOCD_TEST_NO_DB=1 mix test_no_db # skip DB tests
bash scripts/quality-gate.sh # all static analysis + tests- Feature Parity & Architecture
- Plugin Authoring Guide
- Module Mapping — Elixir ↔ GoCD Java
- Agent Implementation
Mozilla Public License 2.0 — see LICENSE.