infra/hosts/forgejo-runner/forgejo-runner.nix
2026-08-22 15:28:56 +02:00

91 lines
2.6 KiB
Nix

{ config, pkgs, ... }:
{
services.gitea-actions-runner = {
package = pkgs.forgejo-runner;
instances.snowden = {
enable = true;
name = "snowden";
url = "https://git.berlin.ccc.de";
labels = [
"debian-stable:docker://docker.io/debian:stable-slim"
"alpine-latest:docker://docker.io/alpine:latest"
"nix-latest:docker://docker.io/nixos/nix:latest"
"buildkit:docker://docker.io/moby/buildkit:rootless"
];
tokenFile = config.age.secrets.forgejo-runner-token-env.path;
settings = {
runner.labels = {
debian-stable = {
backend = "docker";
backend-options = {
image = "docker.io/debian:stable-slim";
platform = "linux/amd64";
};
};
alpine-latest = {
backend = "docker";
backend-options = {
image = "docker.io/alpine:latest";
platform = "linux/amd64";
};
};
buildkit = {
backend = "docker";
backend-options = {
image = "docker.io/moby/buildkit:rootless";
platform = "linux/amd64";
};
};
};
server.connections.forgejo = {
url = "https://git.berlin.ccc.de/";
uuid = "78cbc26a-09d3-4226-b239-9c2ee146a63f";
token_url = "file://${config.age.secrets.forgejo-runner-token.path}";
};
container = {
enable_ipv6 = true;
network = "forgejo";
privileged = true;
force_pull = true;
docker_host = "unix:///run/podman/podman.sock";
};
};
};
};
systemd = {
services."forgejo-runner-container-updater" = {
description = "Update forgejo runner container images";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig.Type = "oneshot";
script = ''
set -uo pipefail
failed=0
images=(
docker.io/library/debian:stable-slim
docker.io/library/alpine:latest
docker.io/nixos/nix:latest
docker.io/moby/buildkit:latest
)
for image in "''${images[@]}"; do
echo "Pulling $image..."
if ! ${pkgs.podman}/bin/podman pull "$image"; then
echo "Failed to pull $image"
failed=1
fi
done
exit $failed
'';
};
timers."forgejo-runner-container-updater" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
RandomizedDelaySec = "30m";
Persistent = true;
};
};
};
}