182 lines
5 KiB
Nix
182 lines
5 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
namespace,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib.${namespace};
|
|
let
|
|
cfg = config.${namespace}.services.gitea-runner;
|
|
inherit (lib) mkIf mkOption mkEnableOption;
|
|
inherit (lib.types)
|
|
attrsOf
|
|
package
|
|
path
|
|
submodule
|
|
str
|
|
;
|
|
in
|
|
{
|
|
options.${namespace}.services.gitea-runner = {
|
|
enable = mkEnableOption "Enable gitea/forgejo runner";
|
|
git-url = mkOption {
|
|
type = str;
|
|
default = "https://git.christophhollizeck.dev";
|
|
};
|
|
sopsFile = mkOption {
|
|
type = path;
|
|
default = lib.snowfall.fs.get-file "secrets/secrets.yaml";
|
|
description = "SecretFile";
|
|
};
|
|
runner-package = mkOption {
|
|
type = package;
|
|
default = pkgs.forgejo-actions-runner;
|
|
description = "Which runner to use Gitea/Forgjo";
|
|
};
|
|
## taken from nixos/modules/services/continuous-integration/gitea-actions-runner.nix
|
|
runner-instances = mkOption {
|
|
default = { };
|
|
description = ''
|
|
Gitea Actions Runner instances.
|
|
'';
|
|
type = attrsOf (submodule {
|
|
options = {
|
|
enable = mkEnableOption "Gitea Actions Runner instance";
|
|
name = mkOption {
|
|
type = str;
|
|
example = literalExpression "config.networking.hostName";
|
|
description = ''
|
|
The name identifying the runner instance towards the Gitea/Forgejo instance.
|
|
'';
|
|
};
|
|
url = mkOption {
|
|
type = str;
|
|
example = "https://forge.example.com";
|
|
description = ''
|
|
Base URL of your Gitea/Forgejo instance.
|
|
'';
|
|
};
|
|
tokenFile = mkOption {
|
|
type = nullOr (either str path);
|
|
default = null;
|
|
description = ''
|
|
Path to an environment file, containing the `TOKEN` environment
|
|
variable, that holds a token to register at the configured
|
|
Gitea/Forgejo instance.
|
|
'';
|
|
};
|
|
labels = mkOption {
|
|
type = listOf str;
|
|
example = literalExpression ''
|
|
[
|
|
# provide a debian base with nodejs for actions
|
|
"debian-latest:docker://node:18-bullseye"
|
|
# fake the ubuntu name, because node provides no ubuntu builds
|
|
"ubuntu-latest:docker://node:18-bullseye"
|
|
# provide native execution on the host
|
|
#"native:host"
|
|
]
|
|
'';
|
|
description = ''
|
|
Labels used to map jobs to their runtime environment. Changing these
|
|
labels currently requires a new registration token.
|
|
|
|
Many common actions require bash, git and nodejs, as well as a filesystem
|
|
that follows the filesystem hierarchy standard.
|
|
'';
|
|
};
|
|
settings = mkOption {
|
|
description = ''
|
|
Configuration for `act_runner daemon`.
|
|
See https://gitea.com/gitea/act_runner/src/branch/main/internal/pkg/config/config.example.yaml for an example configuration
|
|
'';
|
|
|
|
type = types.submodule {
|
|
freeformType = settingsFormat.type;
|
|
};
|
|
|
|
default = { };
|
|
};
|
|
|
|
hostPackages = mkOption {
|
|
type = listOf package;
|
|
default = with pkgs; [
|
|
bash
|
|
coreutils
|
|
curl
|
|
gawk
|
|
gitMinimal
|
|
gnused
|
|
nodejs
|
|
wget
|
|
];
|
|
defaultText = literalExpression ''
|
|
with pkgs; [
|
|
bash
|
|
coreutils
|
|
curl
|
|
gawk
|
|
gitMinimal
|
|
gnused
|
|
nodejs
|
|
wget
|
|
]
|
|
'';
|
|
description = ''
|
|
List of packages, that are available to actions, when the runner is configured
|
|
with a host execution label.
|
|
'';
|
|
};
|
|
};
|
|
});
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
sops = {
|
|
secrets = {
|
|
"forgejo/runner/token" = {
|
|
inherit (cfg) sopsFile;
|
|
};
|
|
};
|
|
};
|
|
|
|
services.gitea-actions-runner = {
|
|
package = cfg.runner-package;
|
|
instances = {
|
|
native = {
|
|
enable = true;
|
|
name = "monolith";
|
|
url = cfg.git-url;
|
|
tokenFile = config.sops.secrets."forgejo/runner/token".path;
|
|
labels = [
|
|
"native:host"
|
|
];
|
|
hostPackages = with pkgs; [
|
|
bash
|
|
coreutils
|
|
curl
|
|
gawk
|
|
gitMinimal
|
|
gnused
|
|
nodejs
|
|
wget
|
|
lix
|
|
];
|
|
settings = {
|
|
log.level = "info";
|
|
runner = {
|
|
capacity = 1;
|
|
timeout = "3h";
|
|
shutdown_timeout = "5s";
|
|
fetch_timeout = "10s";
|
|
fetch_inteval = "5s";
|
|
};
|
|
};
|
|
};
|
|
} // cfg.runner-instances;
|
|
};
|
|
|
|
};
|
|
}
|