mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-10 04:49:19 -08:00
67 lines
1.8 KiB
Nix
67 lines
1.8 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
inputs,
|
|
...
|
|
}: let
|
|
inherit (lib.options) mkOption mkEnableOption;
|
|
inherit (lib.modules) mkIf mkMerge mkDefault;
|
|
inherit (lib.attrsets) listToAttrs nameValuePair;
|
|
inherit (lib.lists) genList;
|
|
inherit (inputs.self.lib.lib) unmerged;
|
|
cfg = config.services.github-runner-zone;
|
|
in {
|
|
options.services.github-runner-zone = with lib.types; {
|
|
enable = mkEnableOption "github-runners.zone" // {
|
|
default = true;
|
|
};
|
|
count = mkOption {
|
|
type = int;
|
|
default = 4;
|
|
};
|
|
user = mkOption {
|
|
type = nullOr str;
|
|
default = "github-runner-zone";
|
|
};
|
|
runnerSettings = mkOption {
|
|
type = unmerged.type;
|
|
};
|
|
};
|
|
|
|
config = {
|
|
services.github-runner-zone = {
|
|
runnerSettings = {
|
|
enable = mkDefault true;
|
|
extraLabels = [ "ubuntu-latest" ];
|
|
tokenFile = mkDefault config.sops.secrets.github-runner-gensokyo-zone-token.path;
|
|
url = mkDefault "https://github.com/gensokyo-zone";
|
|
user = mkDefault cfg.user;
|
|
extraEnvironment = {
|
|
GIT_TEXTDOMAINDIR = "${config.programs.git.package}/share/locale";
|
|
};
|
|
};
|
|
};
|
|
|
|
services.github-runners = listToAttrs (genList (i: nameValuePair "zone-${toString i}" (mkMerge [
|
|
(unmerged.merge cfg.runnerSettings)
|
|
{
|
|
name = mkDefault "${config.networking.hostName}-${toString i}";
|
|
}
|
|
])) cfg.count);
|
|
|
|
users = mkIf (cfg.enable && cfg.user != null) {
|
|
users.${cfg.user} = {
|
|
group = cfg.user;
|
|
isSystemUser = true;
|
|
};
|
|
groups.${cfg.user} = { };
|
|
};
|
|
|
|
sops.secrets = {
|
|
github-runner-gensokyo-zone-token = mkIf cfg.enable {
|
|
sopsFile = mkDefault ../secrets/github-runner.yaml;
|
|
owner = mkIf (cfg.user != null) cfg.user;
|
|
};
|
|
};
|
|
};
|
|
}
|