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
kindcluster namedkind(override withKIND_CLUSTER_NAME) - Wires the cluster to the registry
- Sets
KUBECONFIGto~/.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> # e.g. ko.local or localhost:5000
ko apply -f config/
To redeploy individual components after code changes:
# Controller only
ko apply -f config/controller.yaml
# Webhook only
ko apply -f config/webhook.yaml
Observability Stack (Optional)
For metrics and tracing during development:
./hack/setup-observability-dev.sh
Endpoints after setup:
| Service | URL |
|---|---|
| Prometheus | http://localhost:9091 |
| Jaeger (tracing) | http://localhost:16686 |
| Pruner metrics | http://localhost:9090/metrics |
Iterating on Code
- Edit Go source under
pkg/orcmd/. - Run unit tests to verify:
make test-unit - Format code:
make fmt - Rebuild and redeploy (ensure
KO_DOCKER_REPOis 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/
# or to destroy the entire kind cluster:
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
konot found: Runmake apply— it auto-installskointo.bin/.- Registry not reachable: Ensure
kind-registrycontainer is running:docker ps | grep kind-registry - Webhook TLS errors: The webhook cert is managed by the operator. If
invalid, delete the
Secretand restart the webhook pod.