Gitea runner
This commit is contained in:
parent
feb6270952
commit
832894edfc
@ -10,6 +10,7 @@
|
|||||||
./matrix.nix
|
./matrix.nix
|
||||||
./zerobin.nix
|
./zerobin.nix
|
||||||
./gitea.nix
|
./gitea.nix
|
||||||
|
./gitea-runner.nix
|
||||||
./privatebin/privatebin.nix
|
./privatebin/privatebin.nix
|
||||||
./radio.nix
|
./radio.nix
|
||||||
./samba.nix
|
./samba.nix
|
||||||
|
98
common/server/gitea-runner.nix
Normal file
98
common/server/gitea-runner.nix
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.gitea-runner;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.gitea-runner = {
|
||||||
|
enable = lib.mkEnableOption "Enables gitea runner";
|
||||||
|
dataDir = lib.mkOption {
|
||||||
|
default = "/var/lib/gitea-runner";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = lib.mdDoc "gitea runner data directory.";
|
||||||
|
};
|
||||||
|
instanceUrl = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
};
|
||||||
|
registrationTokenFile = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
users.users.gitea-runner = {
|
||||||
|
description = "Gitea Runner Service";
|
||||||
|
home = cfg.dataDir;
|
||||||
|
useDefaultShell = true;
|
||||||
|
group = "gitea-runner";
|
||||||
|
isSystemUser = true;
|
||||||
|
createHome = true;
|
||||||
|
extraGroups = [
|
||||||
|
"docker" # allow creating docker containers
|
||||||
|
];
|
||||||
|
};
|
||||||
|
users.groups.gitea-runner = { };
|
||||||
|
|
||||||
|
# registration token
|
||||||
|
services.gitea-runner.registrationTokenFile = "/run/agenix/gitea-runner-registration-token";
|
||||||
|
age.secrets.gitea-runner-registration-token = {
|
||||||
|
file = ../../secrets/gitea-runner-registration-token.age;
|
||||||
|
owner = "gitea-runner";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.gitea-runner = {
|
||||||
|
description = "Gitea Runner";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
WorkingDirectory = cfg.dataDir;
|
||||||
|
User = "gitea-runner";
|
||||||
|
Group = "gitea-runner";
|
||||||
|
};
|
||||||
|
|
||||||
|
requires = [ "network-online.target" ];
|
||||||
|
after = [ "network.target" "network-online.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
path = with pkgs; [ gitea-actions-runner ];
|
||||||
|
|
||||||
|
# based on https://gitea.com/gitea/act_runner/src/branch/main/run.sh
|
||||||
|
script = ''
|
||||||
|
. ${cfg.registrationTokenFile}
|
||||||
|
|
||||||
|
if [[ ! -s .runner ]]; then
|
||||||
|
try=$((try + 1))
|
||||||
|
success=0
|
||||||
|
|
||||||
|
LOGFILE="$(mktemp)"
|
||||||
|
|
||||||
|
# The point of this loop is to make it simple, when running both act_runner and gitea in docker,
|
||||||
|
# for the act_runner to wait a moment for gitea to become available before erroring out. Within
|
||||||
|
# the context of a single docker-compose, something similar could be done via healthchecks, but
|
||||||
|
# this is more flexible.
|
||||||
|
while [[ $success -eq 0 ]] && [[ $try -lt ''${10:-10} ]]; do
|
||||||
|
act_runner register \
|
||||||
|
--instance "${cfg.instanceUrl}" \
|
||||||
|
--token "$GITEA_RUNNER_REGISTRATION_TOKEN" \
|
||||||
|
--name "${config.networking.hostName}" \
|
||||||
|
--no-interactive > $LOGFILE 2>&1
|
||||||
|
|
||||||
|
cat $LOGFILE
|
||||||
|
|
||||||
|
cat $LOGFILE | grep 'Runner registered successfully' > /dev/null
|
||||||
|
if [[ $? -eq 0 ]]; then
|
||||||
|
echo "SUCCESS"
|
||||||
|
success=1
|
||||||
|
else
|
||||||
|
echo "Waiting to retry ..."
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec act_runner daemon
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -39,6 +39,9 @@ in
|
|||||||
USER = "robot@runyan.org";
|
USER = "robot@runyan.org";
|
||||||
FROM = "no-reply@neet.dev";
|
FROM = "no-reply@neet.dev";
|
||||||
};
|
};
|
||||||
|
actions = {
|
||||||
|
ENABLED = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
mailerPasswordFile = "/run/agenix/robots-email-pw";
|
mailerPasswordFile = "/run/agenix/robots-email-pw";
|
||||||
};
|
};
|
||||||
|
@ -6,4 +6,8 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
networking.hostName = "phil";
|
networking.hostName = "phil";
|
||||||
|
services.gitea-runner = {
|
||||||
|
enable = true;
|
||||||
|
instanceUrl = "https://git.neet.dev";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -21,24 +21,24 @@
|
|||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
boot.initrd.luks.devices."enc-pv" = {
|
boot.initrd.luks.devices."enc-pv" = {
|
||||||
device = "/dev/disk/by-uuid/9f1727c7-1e95-47b9-9807-8f38531eed47";
|
device = "/dev/disk/by-uuid/d26c1820-4c39-4615-98c2-51442504e194";
|
||||||
allowDiscards = true;
|
allowDiscards = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" =
|
||||||
{
|
{
|
||||||
device = "/dev/mapper/vg-root";
|
device = "/dev/disk/by-uuid/851bfde6-93cd-439e-9380-de28aa87eda9";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot" =
|
fileSystems."/boot" =
|
||||||
{
|
{
|
||||||
device = "/dev/disk/by-uuid/EC6B-53AA";
|
device = "/dev/disk/by-uuid/F185-C4E5";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices =
|
swapDevices =
|
||||||
[{ device = "/dev/disk/by-uuid/b916094f-cf2a-4be7-b8f1-674ba6473061"; }];
|
[{ device = "/dev/disk/by-uuid/d809e3a1-3915-405a-a200-4429c5efdf87"; }];
|
||||||
|
|
||||||
networking.interfaces.enp0s6.useDHCP = lib.mkDefault true;
|
networking.interfaces.enp0s6.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
@ -8,12 +8,13 @@
|
|||||||
|
|
||||||
systemRoles = [
|
systemRoles = [
|
||||||
"server"
|
"server"
|
||||||
|
"gitea-runner"
|
||||||
];
|
];
|
||||||
|
|
||||||
hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBlOs6mTZCSJL/XM6NysHN0ZNQAyj2GEwBV2Ze6NxRmr";
|
hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBlgRPpuUkZqe8/lHugRPm/m2vcN9psYhh5tENHZt9I2";
|
||||||
|
|
||||||
remoteUnlock = {
|
remoteUnlock = {
|
||||||
hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAqy9X/m67oXJBX+OMdIqpiLONYc5aQ2nHeEPAaj/vgN";
|
hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK0RodotOXLMy/w70aa096gaNqPBnfgiXR5ZAH4+wGzd";
|
||||||
clearnetHost = "unlock.phil.neet.dev";
|
clearnetHost = "unlock.phil.neet.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
BIN
secrets/gitea-runner-registration-token.age
Normal file
BIN
secrets/gitea-runner-registration-token.age
Normal file
Binary file not shown.
@ -18,6 +18,9 @@ with roles;
|
|||||||
"hashed-robots-email-pw.age".publicKeys = email-server;
|
"hashed-robots-email-pw.age".publicKeys = email-server;
|
||||||
"robots-email-pw.age".publicKeys = gitea;
|
"robots-email-pw.age".publicKeys = gitea;
|
||||||
|
|
||||||
|
# gitea
|
||||||
|
"gitea-runner-registration-token.age".publicKeys = gitea-runner;
|
||||||
|
|
||||||
# vpn
|
# vpn
|
||||||
"iodine.age".publicKeys = iodine;
|
"iodine.age".publicKeys = iodine;
|
||||||
"pia-login.age".publicKeys = pia;
|
"pia-login.age".publicKeys = pia;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user