- Go 1.25.0 or later
- Node.js 18+ and npm for frontend development
- mkcert for local TLS certificates
- grpcurl for testing RPC endpoints
A fresh Debian 13 VM requires additional packages for development. Install them in this order:
Go tests run with CGO_ENABLED=1 for race detection, which requires a C compiler:
sudo apt-get update
sudo apt-get install -y build-essentialsudo apt-get install -y mkcertmake certscd ui && npm install
cd ..make toolsmake testAll tests should pass after completing these steps.
Clone the repository and install tool dependencies:
git clone https://github.com/holos-run/holos-console.git
cd holos-console
make toolsThis project uses Go modules to pin tool versions. Tool dependencies are declared in tools.go using the standard Go tools pattern. This ensures all contributors use the same tool versions.
To install all pinned tools:
make toolsThis installs tools to $GOPATH/bin. Ensure $GOPATH/bin is in your PATH.
- Add the import to
tools.go:
import (
_ "github.com/bufbuild/buf/cmd/buf"
_ "github.com/example/newtool" // Add new tool
)- Run
go mod tidyto update go.mod and go.sum - Run
make toolsto install
make build # Build the executable
make debug # Build with debug symbolsGenerate TLS certificates (one-time setup):
make certsStart the server:
make runFor frontend development with hot reloading, run the Vite dev server alongside the Go backend. See docs/dev-server.md for detailed instructions.
Quick start:
# Terminal 1: Start Go backend
make run
# Terminal 2: Start Vite dev server
make devThen open https://localhost:5173/ui/ in your browser.
Protocol buffer code is generated using buf. After modifying .proto files:
make generateThis runs go generate ./... which invokes buf via the directive in generate.go.
make test # Run tests
make rpc-version # Test version RPC with grpcurlE2E tests use Playwright. The test runner automatically starts and stops both servers:
make test-e2eThis command:
- Builds the Go binary
- Starts the Go backend on https://localhost:8443
- Starts the Vite dev server on https://localhost:5173
- Runs all Playwright tests
- Cleans up both servers when tests finish
For debugging, you can start the servers manually and reuse them across test runs:
# Terminal 1: Start Go backend
make run
# Terminal 2: Start Vite dev server
make dev
# Terminal 3: Run E2E tests (reuses existing servers)
cd ui && npm run test:e2eThe reuseExistingServer option detects when servers are already running and skips starting new ones. This is useful for iterating on tests quickly or debugging specific failures.
The console uses an embedded OIDC identity provider (Dex) for development and testing.
For local development, use these credentials to log in:
- Username:
admin - Password:
verysecret
Override the default credentials via environment variables:
export HOLOS_DEX_INITIAL_ADMIN_USERNAME=myuser
export HOLOS_DEX_INITIAL_ADMIN_PASSWORD=mypassword
make runFor production, point to an external OIDC provider:
./holos-console \
--issuer=https://dex.example.com \
--client-id=holos-console \
--cert-file=server.crt \
--key-file=server.keyThe embedded Dex provider still runs but is ignored when --issuer points to an external URL.
See docs/authentication.md for detailed documentation.
All commit messages must follow this format and include the root-cause analysis for why the issue happened, with citations to sources (for example, deep links to GitHub issues that describe the problem and its cause):
Without this patch ... This patch fixes the problem by ... Result: ... [AGENT INCLUDE VERIFICATION steps and output pasted into the commit]
make fmt # Format code
make vet # Run go vet
make lint # Run linters (requires golangci-lint)Run make help to see all available targets:
make build Build executable
make tools Install tool dependencies
make generate Generate code
make test Run tests
make run Run the server with generated certificates
make help Display help menu