Files
zegit-forgejo-runner/README.md
T
markusandClaude Opus 4.8 9886437b2f feat: custom toolchain image for host-mode Gitea Actions runner
Adds the Dockerfile (FROM code.forgejo.org/forgejo/runner:12.11.1, plus
node/git/bash/coreutils/curl/tar/make/ca-certificates) and a README with
the multi-arch build/push workflow. Built and pushed as
gitea.langenoja.se/zegit-zoo/zegit-forgejo-runner:12.11.1-ci; consumed by
flux-config applications/forgejo-runner.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-16 11:54:04 +02:00

1.6 KiB

zegit-forgejo-runner

Custom toolchain image for the cluster's self-hosted Gitea Actions (Forgejo) runner, which runs in host mode (Docker disabled) — workflow steps execute inside this image, so it must carry node/git/make/etc. that the stock code.forgejo.org/forgejo/runner image lacks.

This repo lives only on Gitea (zegit-zoo/zegit-forgejo-runner). The cluster-side deployment and rationale live in flux-config (runners.md, applications/forgejo-runner/).

Build & push

The runner needs this image to run any job, so the first build must be done by hand (CI can't bootstrap itself). The cluster is mixed amd64/arm64, so build multi-arch:

docker buildx create --use --name zegit-ci 2>/dev/null || true
docker login gitea.langenoja.se        # username + a Gitea personal access token
docker buildx build --platform linux/amd64,linux/arm64 \
  -t gitea.langenoja.se/zegit-zoo/zegit-forgejo-runner:12.11.1-ci --push .

The Gitea package is public, so the forgejo-runner-system namespace pulls it without an imagePullSecret.

Wire it into the cluster

After the push succeeds, in flux-config applications/forgejo-runner/base/deployment-forgejo-runner.yaml set the image: on both the register initContainer and the forgejo-runner daemon to gitea.langenoja.se/zegit-zoo/zegit-forgejo-runner:12.11.1-ci, then commit (Flux reconciles). Do this only after the image exists, or the pod ImagePullBackOffs.

Tag scheme

<base-runner-version>-ci (e.g. 12.11.1-ci). Must satisfy the cluster's Gatekeeper enforce-semantic-image-tags constraint — never :latest.