Ported/merged properties from the TUD configuration's hydra-module
This commit is contained in:
parent
f4ae655ee6
commit
d8e2dfc0ed
129
hydra-module.nix
129
hydra-module.nix
@ -13,16 +13,19 @@ let
|
|||||||
max_servers 25
|
max_servers 25
|
||||||
'';
|
'';
|
||||||
|
|
||||||
env = ''export NIX_REMOTE=daemon ''
|
env =
|
||||||
+ ''HYDRA_DBI="${cfg.dbi}" ''
|
{ NIX_REMOTE = "daemon";
|
||||||
+ ''HYDRA_CONFIG=${cfg.baseDir}/data/hydra.conf ''
|
HYDRA_DBI = cfg.dbi;
|
||||||
+ ''HYDRA_DATA=${cfg.baseDir}/data ''
|
HYDRA_CONFIG = "${cfg.baseDir}/data/hydra.conf";
|
||||||
+ ''HYDRA_PORT="${toString cfg.port}" ''
|
HYDRA_DATA = "${cfg.baseDir}/data";
|
||||||
+ (if cfg.logo != null
|
HYDRA_PORT = "${toString cfg.port}";
|
||||||
then ''HYDRA_LOGO="${cfg.logo}" ''
|
OPENSSL_X509_CERT_FILE = "/etc/ssl/certs/ca-bundle.crt";
|
||||||
else "")
|
};
|
||||||
+ ''HYDRA_TRACKER="${cfg.tracker}" ;'';
|
|
||||||
|
|
||||||
|
serverEnv = env //
|
||||||
|
{ HYDRA_LOGO = if cfg.logo != null then cfg.logo else "";
|
||||||
|
HYDRA_TRACKER = cfg.tracker;
|
||||||
|
};
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -60,7 +63,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
hydra = mkOption {
|
hydra = mkOption {
|
||||||
default = pkgs.hydra;
|
#default = pkgs.hydra;
|
||||||
description = ''
|
description = ''
|
||||||
Location of hydra
|
Location of hydra
|
||||||
'';
|
'';
|
||||||
@ -122,6 +125,13 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
useWAL = mkOption {
|
||||||
|
default = true;
|
||||||
|
description = ''
|
||||||
|
Whether to use SQLite's Write-Ahead Logging, which may improve performance.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -157,45 +167,70 @@ in
|
|||||||
|
|
||||||
build-poll-interval = 10
|
build-poll-interval = 10
|
||||||
|
|
||||||
use-sqlite-wal = false
|
# Online log compression makes it impossible to get the tail of
|
||||||
|
# builds that are in progress.
|
||||||
|
build-compress-log = false
|
||||||
|
|
||||||
|
use-sqlite-wal = ${if cfg.useWAL then "true" else "false"}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
jobs.hydra_init =
|
jobs."hydra-init" =
|
||||||
{ description = "hydra-init";
|
{ wantedBy = [ "multi-user.target" ];
|
||||||
startOn = "started network-interfaces";
|
script = ''
|
||||||
preStart = ''
|
|
||||||
mkdir -p ${cfg.baseDir}/data
|
mkdir -p ${cfg.baseDir}/data
|
||||||
chown ${cfg.user} ${cfg.baseDir}/data
|
chown ${cfg.user} ${cfg.baseDir}/data
|
||||||
ln -sf ${hydraConf} ${cfg.baseDir}/data/hydra.conf
|
ln -sf ${hydraConf} ${cfg.baseDir}/data/hydra.conf
|
||||||
'';
|
'';
|
||||||
exec = ''
|
task = true;
|
||||||
echo done
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
jobs.hydra_server =
|
systemd.services."hydra-server" =
|
||||||
{ description = "hydra-server";
|
{ wantedBy = [ "multi-user.target" ];
|
||||||
startOn = if cfg.autoStart then "started network-interfaces hydra-init" else "never";
|
wants = [ "hydra-init.service" ];
|
||||||
exec = ''
|
after = [ "hydra-init.service" ];
|
||||||
${pkgs.su}/bin/su - ${cfg.user} -c '${env} ${cfg.hydra}/bin/hydra-server > ${cfg.baseDir}/data/server.log 2>&1'
|
environment = serverEnv;
|
||||||
'';
|
serviceConfig =
|
||||||
|
{ ExecStart = "@${cfg.hydra}/bin/hydra-server hydra-server -f -h \* --max_spare_servers 5 --max_servers 25 --max_requests 100";
|
||||||
|
User = cfg.user;
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
jobs.hydra_queue_runner =
|
systemd.services."hydra-queue-runner" =
|
||||||
{ description = "hydra-queue-runner";
|
{ wantedBy = [ "multi-user.target" ];
|
||||||
startOn = if cfg.autoStart then "started network-interfaces hydra-init" else "never";
|
wants = [ "hydra-init.service" ];
|
||||||
preStart = "${pkgs.su}/bin/su - ${cfg.user} -c '${env} ${cfg.hydra}/bin/hydra-queue-runner --unlock'";
|
after = [ "hydra-init.service" "network.target" ];
|
||||||
exec = ''
|
path = [ pkgs.nettools pkgs.ssmtp ];
|
||||||
${pkgs.su}/bin/su - ${cfg.user} -c '${env} nice -n 8 ${cfg.hydra}/bin/hydra-queue-runner > ${cfg.baseDir}/data/queue-runner.log 2>&1'
|
environment = env;
|
||||||
'';
|
serviceConfig =
|
||||||
|
{ ExecStartPre = "${cfg.hydra}/bin/hydra-queue-runner --unlock";
|
||||||
|
ExecStart = "@${cfg.hydra}/bin/hydra-queue-runner hydra-queue-runner";
|
||||||
|
User = cfg.user;
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
jobs.hydra_evaluator =
|
systemd.services."hydra-evaluator" =
|
||||||
{ description = "hydra-evaluator";
|
{ wantedBy = [ "multi-user.target" ];
|
||||||
startOn = if cfg.autoStart then "started network-interfaces hydra-init" else "never";
|
wants = [ "hydra-init.service" ];
|
||||||
exec = ''
|
after = [ "hydra-init.service" "network.target" ];
|
||||||
${pkgs.su}/bin/su - ${cfg.user} -c '${env} nice -n 5 ${cfg.hydra}/bin/hydra-evaluator > ${cfg.baseDir}/data/evaluator.log 2>&1'
|
path = [ pkgs.nettools pkgs.ssmtp ];
|
||||||
'';
|
environment = env;
|
||||||
|
serviceConfig =
|
||||||
|
{ ExecStart = "@${cfg.hydra}/bin/hydra-evaluator hydra-evaluator";
|
||||||
|
User = cfg.user;
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services."hydra-update-gc-roots" =
|
||||||
|
{ wants = [ "hydra-init.service" ];
|
||||||
|
after = [ "hydra-init.service" ];
|
||||||
|
environment = env;
|
||||||
|
serviceConfig =
|
||||||
|
{ ExecStart = "@${cfg.hydra}/bin/hydra-update-gc-roots hydra-update-gc-roots";
|
||||||
|
User = cfg.user;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.cron.systemCronJobs =
|
services.cron.systemCronJobs =
|
||||||
@ -213,31 +248,15 @@ in
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
collect = pkgs.writeScript "collect-some-garbage"
|
|
||||||
# Arrange to always have at least 100 GiB free.
|
|
||||||
'' #!/bin/sh -e
|
|
||||||
available="$(df -B1 /nix/store | tail -n 1 | awk '{ print $4 }')"
|
|
||||||
target="$((100 * 1024**3))"
|
|
||||||
to_free="$(($available > $target ? 200 * 1024**2 : $target - $available))"
|
|
||||||
|
|
||||||
echo "$available B available, and targeting $target B available"
|
|
||||||
echo "thus, freeing $to_free B"
|
|
||||||
exec "${pkgs.nix}/bin/nix-collect-garbage" --max-freed "$to_free"
|
|
||||||
'';
|
|
||||||
|
|
||||||
compressLogs = pkgs.writeScript "compress-logs" ''
|
compressLogs = pkgs.writeScript "compress-logs" ''
|
||||||
#! /bin/sh -e
|
#! /bin/sh -e
|
||||||
touch -d 'last month' r
|
touch -d 'last month' r
|
||||||
find /nix/var/log/nix/drvs -type f -a ! -newer r -name '*.drv' | xargs bzip2 -v
|
find /nix/var/log/nix/drvs -type f -a ! -newer r -name '*.drv' | xargs bzip2 -v
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
[ "15 03 * * * root ${collect} &> ${cfg.baseDir}/data/gc.log"
|
[ "*/5 * * * * root ${checkSpace} &> ${cfg.baseDir}/data/checkspace.log"
|
||||||
"15 13 * * * root ${collect} &> ${cfg.baseDir}/data/gc.log"
|
|
||||||
|
|
||||||
"*/5 * * * * root ${checkSpace} &> ${cfg.baseDir}/data/checkspace.log"
|
|
||||||
|
|
||||||
"15 5 * * * root ${compressLogs} &> ${cfg.baseDir}/data/compress.log"
|
"15 5 * * * root ${compressLogs} &> ${cfg.baseDir}/data/compress.log"
|
||||||
"15 02 * * * ${cfg.user} ${env} ${cfg.hydra}/bin/hydra-update-gc-roots &> ${cfg.baseDir}/data/gc-roots.log"
|
"15 2 * * * root ${pkgs.systemd}/bin/systemctl start hydra-update-gc-roots.service"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user