dotfiles

My PC Dotfiles & Website

git-runner.nix (1678B)


## GitHub/GitLab CI Runner Configuration ##
{config, ...}: let
  inherit (config.flake) files;
in {
  flake.modules.nixos.git-runner = {
    config,
    lib,
    pkgs,
    ...
  }: let
    inherit
      (lib)
      mkIf
      mkMerge
      mkOption
      types
      ;
    inherit (config.apps.git) runner;
  in {
    options.apps.git.runner = {
      support = mkOption {
        description = "Support for 'git' Runners";
        type = types.nullOr (
          types.enum [
            "github"
            "gitlab"
          ]
        );
        default = null;
      };
      secret = mkOption {
        description = "Path to Secret for 'git' Runner";
        type = types.str;
        default = "";
      };
    };

    config = mkIf (runner.support != null) (mkMerge [
      {
        assertions = [
          {
            assertion = runner.secret != "";
            message = "Path to Secret for 'git' Runner must be set";
          }
        ];
      }
      (mkIf (runner.support == "github") {
        # GitHub Runner
        environment.systemPackages = [pkgs.act];
        services.github-runners.runner = {
          enable = true;
          url = files.path.repo;
          extraLabels = ["self"];
          tokenFile = runner.secret;
        };
      })

      (mkIf (runner.support == "gitlab") {
        # Docker Support
        virtualisation.docker.enable = true;

        # GitLab Runner
        services.gitlab-runner = {
          enable = true;
          services.default = {
            dockerImage = "alpine";
            tagList = ["self"];
            authenticationTokenConfigFile = runner.secret;
          };
        };
      })
    ]);
  };
}