diff --git a/hosts/trinkgenossin/default.nix b/hosts/trinkgenossin/default.nix index a1699f1..0ef346c 100644 --- a/hosts/trinkgenossin/default.nix +++ b/hosts/trinkgenossin/default.nix @@ -7,6 +7,7 @@ ./networking.nix ./wireguard.nix + ./forgejo-actions-runner.nix #./backups.nix ]; } diff --git a/hosts/trinkgenossin/forgejo-actions-runner.nix b/hosts/trinkgenossin/forgejo-actions-runner.nix new file mode 100644 index 0000000..efac672 --- /dev/null +++ b/hosts/trinkgenossin/forgejo-actions-runner.nix @@ -0,0 +1,58 @@ +{ + config, + pkgs, + lib, + flake, + ... +}: +let + hostname = config.networking.hostName; +in +{ + age.secrets."forgejo-actions-runner-token.age" = { + file = "${flake.self}/secrets/trinkgenossin-forgejo-actions-runner-token.age"; + mode = "440"; + }; + + # Trust docker bridge interface traffic + # Needed for the docker runner to communicate with the act_runner cache + networking.firewall.trustedInterfaces = [ "br-+" ]; + + users.users.gitea-runner = { + home = "/var/lib/gitea-runner/${hostname}"; + useDefaultShell = true; + group = "gitea-runner"; + # Required to interact with nix daemon + extraGroups = [ "wheel" ]; + isSystemUser = true; + }; + + users.groups.gitea-runner = { }; + + systemd.tmpfiles.rules = [ "d '/var/lib/gitea-runner' 0750 gitea-runner gitea-runner - -" ]; + + systemd.services."gitea-runner-${hostname}" = { + serviceConfig.DynamicUser = lib.mkForce false; + }; + + # forgejo actions runner + # https://forgejo.org/docs/latest/admin/actions/ + # https://docs.gitea.com/usage/actions/quickstart + services.gitea-actions-runner = { + package = pkgs.forgejo-runner; + instances."${hostname}" = { + enable = true; + name = hostname; + url = "https://git.pub.solar"; + tokenFile = config.age.secrets."forgejo-actions-runner-token.age".path; + labels = [ + # provide a debian 12 bookworm base with Node.js for actions + "debian-latest:docker://git.pub.solar/pub-solar/actions-base-image:20-bookworm" + # fake the ubuntu name, commonly used in actions examples + "ubuntu-latest:docker://git.pub.solar/pub-solar/actions-base-image:20-bookworm" + # alpine with Node.js + "alpine-latest:docker://node:20-alpine" + ]; + }; + }; +} diff --git a/secrets/secrets.nix b/secrets/secrets.nix index 9bf2f9d..99ee152 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -60,6 +60,7 @@ in "keycloak-database-password.age".publicKeys = nachtigallKeys ++ adminKeys; "tankstelle-forgejo-actions-runner-token.age".publicKeys = tankstelleKeys ++ adminKeys; + "trinkgenossin-forgejo-actions-runner-token.age".publicKeys = trinkgenossinKeys ++ adminKeys; "forgejo-database-password.age".publicKeys = nachtigallKeys ++ adminKeys; "forgejo-mailer-password.age".publicKeys = nachtigallKeys ++ adminKeys; "forgejo-ssh-private-key.age".publicKeys = nachtigallKeys ++ adminKeys; diff --git a/secrets/trinkgenossin-forgejo-actions-runner-token.age b/secrets/trinkgenossin-forgejo-actions-runner-token.age new file mode 100644 index 0000000..3ea5375 --- /dev/null +++ b/secrets/trinkgenossin-forgejo-actions-runner-token.age @@ -0,0 +1,43 @@ +age-encryption.org/v1 +-> ssh-ed25519 NID4eA G60TNVhWvI+QzXInAd8kg8j0+EE1cR+6atLIiw1VyDs +KCBzEW/BYOof8NBZcr12iMddmd5Tig8YuGIG6jGG1pg +-> ssh-ed25519 uYcDNw mqqw6npuWLyo++kS8jR/5Q6lfL6li9AM3obvA+nXSRg +8WKsgwSxkgRDDZfGIMqbEhZHFVDQEcn7Sfe2rwIIvDY +-> ssh-rsa f5THog +Ili0z1+VgwarPNwCFymp0e6slngNzePjqxrIGpwKyN2o4nVnlxDfSFz0CShdBIRf +IzOFJmxjjAfSFMvC79py9lb9mP1fcLx08TKMHQUHZY0yjSPtpN94dVTVPOtXVcB0 +PTeUUD/95Toij0JNhkS95TAcd95h6ha5SH0OtcojqAKqRKZSymR1zWNh64KG50tr +OE2uHCySjHGPQ+mczguKfSO1803yuG+ACf9GJmykXIPhi9AY6AuQOfOvvBoe883z +YKhPbbhfQ2gI9JmQdRb43vznGIjbG++EDuSpbNBWcLpKuOGbNvZTKzDHFFvu/wau +nKAg+SsIGwS5jyYSPG6w0JA2i54u0GcbJJep1aqnvZHmgV2FZ/QXOCe7G4tnHguP +QyHaTk4c0sWW+qS+3mDvctpUGpIr/By4xg5txNSiO7kG2cKkLfU34bmaL3kE91RU +qvyUSu0qSoq40HKQfj+DUyJ4qKb4Nj3fabY2l9oQr+ztp1yZuQd9A+wvzOvcKw8G +PWCHkRT7DLsa9DqsZvOGDWpV99OHH43xUszq8kezO+bygTQkdqrBB/0z74WfcUl/ +D6TPx6VMS3UWiMWHMknwSwmqffSK0TT3q0CxwFl45JhRKSp3tUM4dfRa11PEBkbU +5fWizRSBqrTdHabwU4bhsUi45SGxfPT0oEc1xHpx7g8 +-> ssh-rsa kFDS0A +L9sqpzeiodEU1RVAmkqdqGWyOU3sSTy6ncNWA8P0CRlOakDTqJNbZf/XzfbT0SSN +AA2wZ37+bdWAR64aW0wugbUQOhnhzDoSpxqIxT77eucc3I+tP+cwyNo5hRXHRe68 +T8qjBxG8iGSdqgzQ+Tkskfy38A6bV6zhUDpBNTeXY3UdtyxgjicLq5WZ0Yx38e+1 +/wdqpTC/OOJpnTb60s1iR5zAgeqh0y/QR2iGqYyt3h1nt2LRru4iUPa/9rPqSrVu +f35HeHQEEYTdWFyqc6PM0753f75mtg5EAj1mdv4o1TAoYf0ck2AGSbLSNEJCh+GU +hu20PVEG8OwbB8IvwE3DH2Qt8MXSDS3+6hiLyXJbK5U58Tm+h51B7MISCSOw9S0S +8ctDipFxYZwc7PAckEHndDl8OYe2yp9W5j0gwTyHV1so9hwEpXEHJ1abgUlBAQGI +Lm2J2C4/hz5oyzAIkOiYzkJ7gBiVZi8wI97EXiq0BFGvmdkn1VLn3XtTYahXdNzi +Gz4vp5J9NLhtJhrETkcX4r0EUYv+j4er3RNALvWzlTmZ3EEoA4ptugGF8SLweiZX +zZrWcE/moeilnC8bmzf1hnCOwE6fQHWultbZbPKQNbim1BrZC6C8bvYiFY1AkR/W +UDjSRA7Hydb2wqGkElDdjRk7Ezbth5sA3sZManG01XM +-> piv-p256 vRzPNw AxYR6N9jLofIa1qwSR9Ft7N9ITC01Us0uPwjQHx6YqTG +rRuEsVxmefZ1EZcH6lbUSvPEKsNGA0KnLCrHDng8gGM +-> piv-p256 zqq/iw As0et/SUsQcWKnGWCaEHs8Al3o7hghcIhAlttuUEmJTw +pXIrNBmaNq6DZ27F8vASQIOCqEQMA/AWkl4Jtcbasdo +-> ssh-ed25519 YFSOsg xC7ALIoz9Shq+6AFye6OUenRhsHXKvKNCpz8RjEbxVE +PVUuHJVa/BSASGS7JUE6lHYop8tAi+LOkJo/iDNatHQ +-> ssh-ed25519 iHV63A zKjNyuhtPAMTyd+9jGYaD4wkx4NO8MlDGw+cHqg+8Fo +8Zlli5FfeSM862nKQVe8hBpl3dEozghw6Tnw+/xCD38 +-> ssh-ed25519 BVsyTA 2LOd7Ef2fIDA1UC0bob18itdA6MaIng1onJPVYrRnV4 +Lkm42Jw4N+442LsFUSyIhnlvFySfeHbS42OhHv6wCPU +-> ssh-ed25519 +3V2lQ 0xjkyKGk+tCmBgYOrDfnK3Pq+++ZcbUCTtdCJEmgXkU +1BqLJpq7z85P0thWO1IY4ZfHCbHRSOMdKIyfUs3QI5c +--- kht+vkycoDy8VjM63ohrTYHSfNz15+UzrNEVirhbMsk +�l��Q��*qG�qJ�bW��PD2�y�a��]���!�^�%���!v_3��������p��r#�z��I�d \ No newline at end of file