Skip to content

Local Dev Setup

Prerequisites

ToolVersionPurpose
Go1.23+Build the operator
DockeranyBuild images, run kind
kindanyLocal multi-node cluster
TiltanyLive-reload dev loop
kubectlanyCluster interaction
Helm3.xChart linting/deployment
golangci-lintlatestLinting
chainsawlatestE2E tests

Quick Start

tilt up

That’s it. Tilt handles everything:

  • Creates kind cluster drop-dev (1 control-plane + 2 workers) if it doesn’t exist
  • Compiles the Go binary
  • Builds + loads the Docker image into kind
  • Installs CRDs
  • Deploys the operator via Helm
  • Deploys e2e infrastructure (Prometheus, Registry, Grafana)
  • Applies dev samples from hack/dev-samples.yaml
  • Serves Hugo docs with live-reload
  • Sets up port-forwards:
PortService
8443Operator metrics
8081Health probes
9090Prometheus
5000OCI Registry
3000Grafana
1314Hugo docs

Build Commands

make codegen       # regenerate deepcopy + CRD manifests + docs
make generate      # deepcopy only
make manifests     # CRD + RBAC YAML only
go build ./...     # compile
make docker-build  # build container image
make docs-gen      # regenerate AI docs (llms.txt, AGENTS.md, etc.)

When to run what

Changed…Run
api/v1alpha1/*_types.gomake codegen
Any Go codego build ./...
Controller RBAC markersmake manifests
Makefile or typesmake docs-gen

Useful Make Targets

make help          # list all targets
make kind-create   # create dev cluster (Tilt does this automatically)
make install       # apply CRDs to cluster
make e2e-infra     # deploy Prometheus + Registry for testing
make helm-lint     # lint the Helm chart
make lint          # golangci-lint
make codegen       # full code generation
make docs-gen      # regenerate AI-friendly docs

Without Tilt

If you prefer not to use Tilt:

# Create cluster
make kind-create

# Install CRDs
make install

# Run operator locally (uses ~/.kube/config)
go run ./cmd/ --metrics-bind-address=:8443

# Apply dev samples
kubectl apply -f hack/dev-samples.yaml
Last updated on