From 52a87a25411c2e387a873055f3384a55337dfb7e Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Mon, 10 Oct 2022 21:52:10 +0000 Subject: [PATCH] Add local builder --- hosts/linode/git.nix | 63 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/hosts/linode/git.nix b/hosts/linode/git.nix index 0d99d49..52da5f9 100644 --- a/hosts/linode/git.nix +++ b/hosts/linode/git.nix @@ -5,8 +5,16 @@ let ciDomain = "ci.thehellings.com"; ciPort = "17080"; droneDir = "/var/lib/drone"; + execWorkDir = "/var/lib/drone-exec"; + droneWorkerEnvironment = { + DRONE_RPC_PROTO = "https"; + DRONE_RPC_HOST = ciDomain; + DRONE_RUNNER_CAPACITY = "2"; + DRONE_RUNNER_NAME = "docker"; + }; in { + environment.systemPackages = [ pkgs.drone-runner-exec ]; ########################################################################################## ########### # GIT SERVICES @@ -91,13 +99,50 @@ in { ports = [ "${ciPort}:80" ]; volumes = [ "${droneDir}:/data" ]; }; + + "drone-docker" = { + environment = droneWorkerEnvironment; + environmentFiles = [ + "/run/agenix/drone" + ]; + extraOptions = [ "--pull=newer" ]; + image = "drone/drone-runner-docker:1.8"; + volumes = [ "/run/podman/podman.sock:/var/run/docker.sock" ]; + }; }; }; - systemd.services."podman-drone".serviceConfig = { - StateDirectory = "drone"; - StateDirectoryMode = pkgs.lib.mkForce "0777"; - WorkingDirectory = droneDir; + systemd.services = { + "podman-drone".serviceConfig = { + StateDirectory = "drone"; + StateDirectoryMode = pkgs.lib.mkForce "0777"; + WorkingDirectory = droneDir; + }; + + "drone-exec-runner" = { + environment = droneWorkerEnvironment; + description = "Drone pipeline runner that executes locally"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + path = with pkgs; [ + bash + drone-runner-exec + git + podman + ]; + + preStart = '' + mkdir -p ${execWorkDir} + cat /run/agenix/drone > ${execWorkDir}/conf.env + echo "" >> ${execWorkDir}/conf.env + ''; + script = "exec ${pkgs.drone-runner-exec}/bin/drone-runner-exec daemon ${execWorkDir}/conf.env"; + + serviceConfig = { + StateDirectory = "drone-exec"; + StateDirectoryMode = pkgs.lib.mkForce "0777"; + }; + }; }; greg.proxies."${ciDomain}" = { @@ -105,4 +150,14 @@ in { ssl = true; genAliases = false; }; + + ########################################################################################## + ########### + # CI WORKERS + ########## + ########################################################################################## + virtualisation.podman = { + enable = true; + dockerCompat = true; + }; }