From 39410c4baeb985e06906badf8f02b21a90902bae Mon Sep 17 00:00:00 2001 From: Pim Kunis Date: Wed, 17 Apr 2024 23:19:08 +0200 Subject: [PATCH] add forgejo runner --- kubenix-modules/forgejo.nix | 171 +++++++++++++++++++++++++++++------- secrets/sops.yaml | 5 +- 2 files changed, 142 insertions(+), 34 deletions(-) diff --git a/kubenix-modules/forgejo.nix b/kubenix-modules/forgejo.nix index 6375527..cea6e7b 100644 --- a/kubenix-modules/forgejo.nix +++ b/kubenix-modules/forgejo.nix @@ -1,5 +1,7 @@ { myLib, ... }: { kubernetes.resources = { + secrets.runner-secret.stringData.token = "ref+sops://secrets/sops.yaml#/forgejo/runnerToken"; + configMaps = { forgejo-config.data = { # TODO: Generate from nix code? @@ -117,41 +119,143 @@ }; }; - deployments.forgejo = { - metadata.labels.app = "forgejo"; + deployments = { + forgejo = { + metadata.labels = { + app = "forgejo"; + component = "forgejo"; + }; - spec = { - selector.matchLabels.app = "forgejo"; + spec = { + selector.matchLabels = { + app = "forgejo"; + component = "forgejo"; + }; - template = { - metadata.labels.app = "forgejo"; - - spec = { - containers.forgejo = { - image = "codeberg.org/forgejo/forgejo:1.20"; - envFrom = [{ configMapRef.name = "forgejo-env"; }]; - - ports = { - web.containerPort = 3000; - ssh.containerPort = 22; - }; - - volumeMounts = [ - { - name = "data"; - mountPath = "/data"; - } - { - name = "config"; - mountPath = "/data/gitea/conf/app.ini"; - subPath = "config"; - } - ]; + template = { + metadata.labels = { + app = "forgejo"; + component = "forgejo"; }; - volumes = { - data.persistentVolumeClaim.claimName = "forgejo"; - config.configMap.name = "forgejo-config"; + spec = { + containers.forgejo = { + image = "codeberg.org/forgejo/forgejo:1.21"; + envFrom = [{ configMapRef.name = "forgejo-env"; }]; + + ports = { + web.containerPort = 3000; + ssh.containerPort = 22; + }; + + volumeMounts = [ + { + name = "data"; + mountPath = "/data"; + } + { + name = "config"; + mountPath = "/data/gitea/conf/app.ini"; + subPath = "config"; + } + ]; + }; + + volumes = { + data.persistentVolumeClaim.claimName = "forgejo"; + config.configMap.name = "forgejo-config"; + }; + }; + }; + }; + }; + + # Forgejo-runner for docker in docker (dind) on Kubernetes: + # https://code.forgejo.org/forgejo/runner/src/branch/main/examples/kubernetes/dind-docker.yaml + forgejo-runner = { + metadata.labels = { + app = "forgejo"; + component = "runner"; + }; + + spec = { + selector.matchLabels = { + app = "forgejo"; + component = "runner"; + }; + + template = { + metadata.labels = { + app = "forgejo"; + component = "runner"; + }; + + spec = { + restartPolicy = "Always"; + + volumes = { + docker-certs.emptyDir = { }; + runner-data.emptyDir = { }; + }; + + initContainers.runner-register = { + image = "code.forgejo.org/forgejo/runner:3.2.0"; + command = [ "forgejo-runner" "register" "--no-interactive" "--token" "$(RUNNER_SECRET)" "--name" "$(RUNNER_NAME)" "--instance" "$(FORGEJO_INSTANCE_URL)" ]; + + env = { + RUNNER_NAME.value = "runner"; + FORGEJO_INSTANCE_URL.value = "https://git.kun.is"; + RUNNER_SECRET.valueFrom.secretKeyRef = { + name = "runner-secret"; + key = "token"; + }; + }; + + resources.limits = { + cpu = "0.50"; + memory = "64Mi"; + }; + + volumeMounts = [{ + name = "runner-data"; + mountPath = "/data"; + }]; + }; + + containers = { + runner = { + image = "code.forgejo.org/forgejo/runner:3.0.0"; + command = [ "sh" "-c" "while ! nc -z localhost 2376