nixos/hydra: incorporate upstream changes and update test
During the last update, `hydra-notify` was rewritten as a daemon which listens to postgresql notifications for each build[1]. The module uses the `hydra-notify.service` unit from upstream's Hydra module and the VM test ensures that email notifications are sent properly. Also updated `hydra-init.service` to install `pg_trgm` on a local database if needed[2]. [1]c7861b85c4
[2]8a0a5ec3a3
This commit is contained in:
parent
7f136b5a56
commit
ce37a040c2
@ -275,6 +275,7 @@ in
|
||||
${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -O hydra hydra
|
||||
touch ${baseDir}/.db-created
|
||||
fi
|
||||
echo "create extension if not exists pg_trgm" | ${pkgs.sudo}/bin/sudo -u ${config.services.postgresql.superUser} -- ${config.services.postgresql.package}/bin/psql hydra
|
||||
''}
|
||||
|
||||
if [ ! -e ${cfg.gcRootsDir} ]; then
|
||||
@ -379,6 +380,23 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.hydra-notify =
|
||||
{ wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "hydra-init.service" ];
|
||||
after = [ "hydra-init.service" ];
|
||||
restartTriggers = [ hydraConf ];
|
||||
environment = env // {
|
||||
PGPASSFILE = "${baseDir}/pgpass-queue-runner";
|
||||
};
|
||||
serviceConfig =
|
||||
{ ExecStart = "@${cfg.package}/bin/hydra-notify hydra-notify";
|
||||
# FIXME: run this under a less privileged user?
|
||||
User = "hydra-queue-runner";
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
};
|
||||
};
|
||||
|
||||
# If there is less than a certain amount of free disk space, stop
|
||||
# the queue/evaluator to prevent builds from failing or aborting.
|
||||
systemd.services.hydra-check-space =
|
||||
@ -416,6 +434,8 @@ in
|
||||
hydra-users hydra-queue-runner hydra
|
||||
hydra-users hydra-www hydra
|
||||
hydra-users root hydra
|
||||
# The postgres user is used to create the pg_trgm extension for the hydra database
|
||||
hydra-users postgres postgres
|
||||
'';
|
||||
|
||||
services.postgresql.authentication = optionalString haveLocalDB
|
||||
|
@ -44,6 +44,8 @@ cat >data.json <<EOF
|
||||
"enabled": "1",
|
||||
"visible": "1",
|
||||
"keepnr": "1",
|
||||
"enableemail": true,
|
||||
"emailoverride": "hydra@localhost",
|
||||
"nixexprinput": "trivial",
|
||||
"nixexprpath": "trivial.nix",
|
||||
"inputs": {
|
||||
|
@ -55,7 +55,12 @@ let
|
||||
notificationSender = "example@example.com";
|
||||
|
||||
package = pkgs.hydra.override { inherit nix; };
|
||||
|
||||
extraConfig = ''
|
||||
email_notification = 1
|
||||
'';
|
||||
};
|
||||
services.postfix.enable = true;
|
||||
nix = {
|
||||
buildMachines = [{
|
||||
hostName = "localhost";
|
||||
@ -70,12 +75,12 @@ let
|
||||
# let the system boot up
|
||||
$machine->waitForUnit("multi-user.target");
|
||||
# test whether the database is running
|
||||
$machine->succeed("systemctl status postgresql.service");
|
||||
$machine->waitForUnit("postgresql.service");
|
||||
# test whether the actual hydra daemons are running
|
||||
$machine->succeed("systemctl status hydra-queue-runner.service");
|
||||
$machine->succeed("systemctl status hydra-init.service");
|
||||
$machine->succeed("systemctl status hydra-evaluator.service");
|
||||
$machine->succeed("systemctl status hydra-send-stats.service");
|
||||
$machine->waitForUnit("hydra-init.service");
|
||||
$machine->requireActiveUnit("hydra-queue-runner.service");
|
||||
$machine->requireActiveUnit("hydra-evaluator.service");
|
||||
$machine->requireActiveUnit("hydra-notify.service");
|
||||
|
||||
$machine->succeed("hydra-create-user admin --role admin --password admin");
|
||||
|
||||
@ -86,6 +91,8 @@ let
|
||||
$machine->succeed("create-trivial-project.sh");
|
||||
|
||||
$machine->waitUntilSucceeds('curl -L -s http://localhost:3000/build/1 -H "Accept: application/json" | jq .buildstatus | xargs test 0 -eq');
|
||||
|
||||
$machine->waitUntilSucceeds('journalctl -eu hydra-notify.service -o cat | grep -q "sending mail notification to hydra@localhost"');
|
||||
'';
|
||||
})));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user