dotfiles

My PC Dotfiles & Website

modules/apps/git/git-runner.nix (1678B)


 1## GitHub/GitLab CI Runner Configuration ##
 2{config, ...}: let
 3  inherit (config.flake) files;
 4in {
 5  flake.modules.nixos.git-runner = {
 6    config,
 7    lib,
 8    pkgs,
 9    ...
10  }: let
11    inherit
12      (lib)
13      mkIf
14      mkMerge
15      mkOption
16      types
17      ;
18    inherit (config.apps.git) runner;
19  in {
20    options.apps.git.runner = {
21      support = mkOption {
22        description = "Support for 'git' Runners";
23        type = types.nullOr (
24          types.enum [
25            "github"
26            "gitlab"
27          ]
28        );
29        default = null;
30      };
31      secret = mkOption {
32        description = "Path to Secret for 'git' Runner";
33        type = types.str;
34        default = "";
35      };
36    };
37
38    config = mkIf (runner.support != null) (mkMerge [
39      {
40        assertions = [
41          {
42            assertion = runner.secret != "";
43            message = "Path to Secret for 'git' Runner must be set";
44          }
45        ];
46      }
47      (mkIf (runner.support == "github") {
48        # GitHub Runner
49        environment.systemPackages = [pkgs.act];
50        services.github-runners.runner = {
51          enable = true;
52          url = files.path.repo;
53          extraLabels = ["self"];
54          tokenFile = runner.secret;
55        };
56      })
57
58      (mkIf (runner.support == "gitlab") {
59        # Docker Support
60        virtualisation.docker.enable = true;
61
62        # GitLab Runner
63        services.gitlab-runner = {
64          enable = true;
65          services.default = {
66            dockerImage = "alpine";
67            tagList = ["self"];
68            authenticationTokenConfigFile = runner.secret;
69          };
70        };
71      })
72    ]);
73  };
74}