DevHub is an internal developer platform control plane for scaffolding services, creating releases, and deploying those releases through a plugin-driven workflow.
Built with Go, Vue 3, TypeScript, Python plugins, PostgreSQL, Redis, Gitea, and Argo CD.
- Register projects with environment ownership and lifecycle metadata
- Scaffold new services from platform templates
- Create releases for a selected service
- Deploy a chosen release version into
dev,staging, orprod - Track deployment and release history from the control plane UI
- Review approval requests before gated scaffold and deployment actions proceed
- Browse services across projects from a dedicated service inventory page
- Inspect cross-service release activity from a dedicated releases page with a timeline view
- Drive automation through plugin types:
scaffolderreleaserdeployer
The current control-plane UI is organized around this lifecycle:
Dashboardsurfaces team members, project counts, and plugin inventory.Approvalslists pending approval requests and lets operators approve or reject with a required comment.Projectslists registered projects with ownership and environment filters.Servicesaggregates services across projects.Releasesaggregates release activity across services and shows a release timeline chart.- Clicking a project opens project details with services, recent releases, and recent deployments.
- From project details, you can open a service.
- From service details, you can:
- create a release
- select a release
- deploy based on that release version
- inspect deployments filtered by the selected release tag
GitHub release notes can be refreshed automatically through the workflow at release-notes.yml.
When a GitHub Release is published or edited, the workflow regenerates the release body from GitHub's generated release notes API and updates the release in place.
The current DevHub console looks like this:
Detailed docs live in docs/:
This keeps the main project page readable on GitHub while still exposing the deeper documentation from the README.
# Clone the repo
git clone https://github.com/phamphihungbk/devhub.git
cd devhub
# Discover available commands
make help
# Prepare local environment files
make bootstrap
# Install local Git hooks for Conventional Commit messages
make install-git-hooks
# Start the local platform stack
make up
# Run database migrations
make migrate
# Seed local roles, permissions, teams, and demo users
make seed-dataLocal access points after startup:
- DevHub UI: https://devhub.local
- DevHub API host: https://api.devhub.local
- Gitea UI: https://gitea.devhub.local
- Grafana UI: https://grafana.devhub.local
- Argo CD UI: https://argocd.devhub.local
Local development credentials:
| Service | URL | User | Password |
|---|---|---|---|
| DevHub | https://devhub.local | admin@devhub.local |
admindevhub123 |
| Grafana | https://grafana.devhub.local | admin |
admin |
Grafana may ask you to change the default password on first login. The DevHub account above is created by make seed-data.
To view backend traces in Grafana:
- Open https://grafana.devhub.local/explore.
- Select the
Tempodatasource. - Set the time range to cover recent DevHub API activity, such as
Last 15 minutes. - Run a Tempo search for service
devhub-backend.
If the search is empty, generate fresh traces by opening the DevHub UI or calling any API endpoint, then search again. The local tracing path is backend -> otel-collector -> tempo -> grafana.
Scaffold prompt suggestions return instantly from local prompt parsing and enabled plugin metadata. The optional Ollama Compose service is available for experiments, but it is not required for the scaffold suggestion flow.
To configure those local domains and trust the generated certificate on macOS:
make setup-local-httpsUseful follow-up commands:
# Validate commit messages locally
make install-git-hooks
# Backend with file watch
make backend-watch
# Frontend watch
make frontend-watch
# Argo CD local UI
make argocd-ui
# Recreate minikube with the local registry enabled
make minikube-registrymake minikube-registry starts devhub-registry, recreates the Minikube cluster with host.minikube.internal:5001 allowed as an insecure registry, and verifies the registry is reachable from inside Minikube.
devhub/
βββ backend/ # Go API, workers, domain logic, migrations
βββ frontend/ # Vue admin console
βββ plugins/ # Python scaffold, release, and deploy plugins
βββ infra/ # Helm charts, Argo CD manifests, Docker assets
βββ scripts/ # Local development helpers
βββ docs/ # Project documentation
- Local Postgres is exposed on
localhost:5433by default. - The backend and worker rely on
.envfor Argo CD, SCM, and CI/CD integration settings. - GitOps and Argo CD setup details are documented in Getting Started.
