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.
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.