| name | local-development |
| description | Set up a local development environment for tekton-pruner. Use when onboarding, bootstrapping a kind cluster, deploying the operator locally, or iterating on controller and webhook changes. Covers kind, ko, Tekton Pipelines, and the observability stack (Prometheus + Jaeger). |
| license | Apache-2.0 |
| compatibility | Requires go, kind, ko, kubectl, docker (or podman) |
| metadata | {"project":"tekton-pruner","maintainers":"tektoncd"} |
| allowed-tools | Bash(kind:*) Bash(ko:*) Bash(kubectl:*) Bash(docker:*) Bash(make:*) Read |
Local Development
tekton-pruner is a Kubernetes controller and admission webhook that prunes
Tekton PipelineRun and TaskRun resources based on TTL or history limits
configured via a ConfigMap or per-namespace annotations.
Prerequisites
Install the following tools before proceeding:
| Tool | Purpose |
|---|
go (≥ 1.26) | Build language |
kind | Local Kubernetes cluster |
ko | Build and push Go container images |
kubectl | Interact with the cluster |
docker or podman | Container runtime (podman sets CONTAINER_RUNTIME=podman) |
Quick-Start: Full Cluster Setup
The recommended path for a fresh local environment:
cd hack/dev/kind/
./install.sh
This script:
- Starts a local container registry on port
5000 (kind-registry)
- Creates a
kind cluster named kind (override with KIND_CLUSTER_NAME)
- Wires the cluster to the registry
- Sets
KUBECONFIG to ~/.kube/config.kind
- Deploys Tekton Pipelines and the pruner controller via
ko apply
After it completes, verify:
export KUBECONFIG=~/.kube/config.kind
kubectl get pods -n tekton-pipelines
Deploy Only the Pruner
If you already have a cluster with Tekton Pipelines running:
export KO_DOCKER_REPO=<your-registry>
ko apply -f config/
To redeploy individual components after code changes:
ko apply -f config/controller.yaml
ko apply -f config/webhook.yaml
Observability Stack (Optional)
For metrics and tracing during development:
./hack/setup-observability-dev.sh
Endpoints after setup:
Iterating on Code
- Edit Go source under
pkg/ or cmd/.
- Run unit tests to verify:
make test-unit
- Format code:
make fmt
- Rebuild and redeploy (ensure
KO_DOCKER_REPO is set — see
"Deploy Only the Pruner" above): ko apply -f config/controller.yaml
- Check controller logs:
kubectl -n tekton-pipelines logs deployment/tekton-pruner-controller -f
Tear Down
ko delete -f config/
kind delete cluster --name kind
Environment Variables
| Variable | Default | Purpose |
|---|
KO_DOCKER_REPO | (required) | Image registry for ko builds |
KIND_CLUSTER_NAME | kind | Name of the kind cluster |
CONTAINER_RUNTIME | docker | Set to podman for rootless builds |
Common Issues
ko not found: Run make apply — it auto-installs ko into .bin/.
- Registry not reachable: Ensure
kind-registry container is running:
docker ps | grep kind-registry
- Webhook TLS errors: The webhook cert is managed by the operator. If
invalid, delete the
Secret and restart the webhook pod.