Custom runner images were never needed. Forgejo runners pull label images
(golang:1.26-bookworm, node:22-bookworm, rust:1-bookworm) from Docker Hub
at job time. Node.js/docker are installed in workflow steps.
Removes dead-end Dockerfiles and build workflow that couldn't push through
Cloudflare's 100MB payload limit.
## Problem
Init container skips registration if `.runner` file exists on PVC:
```
test -f /data/.runner || forgejo-runner register ...
```
This means changing runner labels in `values.yaml` (e.g. the label image fix from PR #1) has **no effect** until PVCs are manually deleted — not GitOps-friendly.
## Fix
Always delete `.runner` and re-register on every pod start:
```
rm -f /data/.runner
forgejo-runner register --no-interactive ...
```
Labels now stay in sync with `values.yaml` automatically. ArgoCD syncs → pods restart → init re-registers with current labels.
## Files Changed
- `k8s/infra/forgejo-runner/templates/deployment.yaml` (init container logic)
## After Merge
ArgoCD syncs → deployment spec changes → pods restart → init re-registers with new labels from PR #1 → CI works across all repos.Reviewed-on: #2
Co-authored-by: rock <[email protected]>
1. Forgejo CI is broken across all repos
Every workflow fails because runner labels point to a bare Alpine image with nothing in it.
┌────────────────────────────────────────┬──────────────────────────────────────┐
│ Before │ After │
├────────────────────────────────────────┼──────────────────────────────────────┤
│ golang:docker://forgejo/runner:6 │ golang:docker://golang:1.26-bookworm │
├────────────────────────────────────────┼──────────────────────────────────────┤
│ No Go, no Node.js, no apt-get, no root │ Go, git, apt-get, root │
└────────────────────────────────────────┴──────────────────────────────────────┘
Plus the docker socket isn't shared between dind sidecar and runner, so even if docker CLI existed, it can't reach the daemon.
┌───────────────────────────────────────────┬─────────────────────────────────────────────────────────────┐
│ Before │ After │
├───────────────────────────────────────────┼─────────────────────────────────────────────────────────────┤
│ dind creates socket in its own filesystem │ Shared /run emptyDir volume │
├───────────────────────────────────────────┼─────────────────────────────────────────────────────────────┤
│ Runner can't see it │ Both containers see /run/docker.sock │
├───────────────────────────────────────────┼─────────────────────────────────────────────────────────────┤
│ No docker_host config │ docker_host: automount passes socket to workflow containers │
Co-authored-by: rock <[email protected]>
- All runners now based on code.forgejo.org/forgejo/runner:6 (has runner binary)
- Dockerfile adds Node.js + specialized tools (Go, Rust, docker)
- CI workflow will build custom images and push to registry
- Image Updater will auto-detect and update values.yaml
- ArgoCD will sync new custom images when available
- Dockerfile.node extends node:22-bookworm with docker.io
- No need for install step in every workflow
- Values-node.yaml references custom image
- Build and push manually (no CI needed)
privileged:true# required for DinD; cicd namespace is labelled privileged
env:
- name:DOCKER_TLS_CERTDIR
value:""
value:/docker-certs
volumeMounts:
- name:docker-certs
mountPath:/docker-certs
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.