This repository provides a complete, automated environment for managing Actions Runner Controller (ARC) on Kubernetes (targeted at Minikube), featuring custom runner images, shared tool persistence, and comprehensive infrastructure testing.
- Purpose: Deploy and maintain custom GitHub Actions runner scale sets with persistent tool caching (Rust, uv).
- Core Technologies: ARC (Actions Runner Controller), Kubernetes (Minikube), Docker, Helm, Shell scripting.
- Architecture:
- Custom Images: Ubuntu 26.04 (Resolute) based runners.
- Persistence: Shared PVC (
tool-cache-runnerset) mounted to/opt/hostedtoolcache. - Tooling: Automated setup of Rust (stable/nightly) and
uvvia a dedicated debug pod. - Monitoring: Integrated Prometheus stack for metrics.
- Watchdog: Systemd service to ensure Minikube auto-restarts on failure/OOM.
make build: Build custom runner images locally.make push: Push verified images to GHCR (restricted tomainin CI).
make deploy-base: Deploy the base ARC runner set.make deploy-qtile: Fully automate the Qtile environment (PVC -> Tools -> Runner Set).make undeploy-qtile: Gracefully uninstall the scale set.
make test-manifests: Lint Helm charts and verify template substitution.make test-images: Verify binaries (git,rustc,uv) and permissions in local images.make test-cluster: Verify live cluster health and PVC write access.make test-all: Run all automated verification gates.
make cleanup-qtile-tools: Clear persistent data in the PVC and remove the debug pod.make cleanup-qtile: Forcefully remove the runner namespace if stuck.
- Branching: New features and infrastructure changes should be developed on
setup-arcand merged via PR. - CI/CD:
lintjob runs on all branches.buildandtestrun on all branches to ensure integrity.pushis strictly limited to themainbranch.
- Configuration:
- Use a
.envfile for localGITHUB_TOKENstorage (ignored by git). - Use
fsGroup: 123in manifests to maintain volume write permissions for therunneruser.
- Use a
- Idempotency: All deployment scripts (
deploy.sh,setup-qtile-tools.sh) must be idempotent and handle existing resources gracefully. - Safety: Always include confirmation prompts in cleanup scripts (
cleanup-ns.sh,cleanup-qtile-tools.sh).
- Environment: Arch Linux with Docker running as root.
- Minikube Profile:
prod-docker(using thedockerdriver with--force). - GPG Keys: Ensure
archlinux-keyringis updated to avoid signature trust issues during local builds.