Files
machine_setup/nix/configuration/roles/hydra/default.nix

143 lines
4.3 KiB
Nix
Raw Normal View History

2025-03-28 17:26:50 -04:00
{
config,
lib,
pkgs,
nix_builder,
2025-03-28 17:26:50 -04:00
...
}:
{
imports = [ ];
options.me = {
hydra.enable = lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = "Whether we want to install hydra.";
};
};
config = lib.mkIf config.me.hydra.enable {
environment.systemPackages = with pkgs; [
nix_builder.packages.x86_64-linux.default
sqlite # For manually inspecting the database.
];
environment.persistence."/persist" = lib.mkIf (config.me.mountPersistence) {
hideMounts = true;
users.nixworker = {
directories = [
{
directory = "persist";
user = "nixworker";
group = "nixworker";
mode = "0700";
}
];
};
};
# Nix 2.30.0 (2025-07-07) changed the build directory from /tmp to /nix/var/nix/builds which broke a number of builds because my ZFS datasets were utf8only.
fileSystems."/.disk/root/nix/var/nix/builds" = {
device = "tmpfs";
fsType = "tmpfs";
options = [
"size=50G" # adjust for your situation and needs
"mode=700"
"uid=11400"
"gid=11400"
];
};
2025-03-28 17:26:50 -04:00
systemd.timers."build-cache" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "*-*-* 03:00:00 America/New_York";
Unit = "build-cache.service";
};
};
systemd.services."build-cache" =
let
enabled_targets = [
"odo"
"odo_update"
"odowork"
"odowork_update"
"quark"
"quark_update"
"hydra"
"hydra_update"
"controller0"
"controller0_update"
"controller1"
"controller1_update"
"controller2"
"controller2_update"
"worker0"
"worker0_update"
"worker1"
"worker1_update"
"worker2"
"worker2_update"
"family_disks"
"family_disks_update"
# "nixbsd" # Disabled due to onetbb tests hanging on one-cpu machines.
];
build_flags = lib.concatMap (target: [
"--target"
(lib.escapeShellArg target)
]) enabled_targets;
in
{
script = ''
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "''${BASH_SOURCE[0]}" )" && pwd )"
NIX_REMOTE='local?root=/.disk/root' RUST_BACKTRACE=1 RUST_LOG=nix_builder=DEBUG ${nix_builder.packages.x86_64-linux.default}/bin/nix-builder build --config ${./files/nix_builder.toml} ${builtins.concatStringsSep " " build_flags}
'';
restartIfChanged = false;
serviceConfig = {
Type = "simple";
User = "nixworker";
# restartIfChanged = false;
# RemainAfterExit = true; # Prevents the service from automatically starting on rebuild. See https://discourse.nixos.org/t/how-to-prevent-custom-systemd-service-from-restarting-on-nixos-rebuild-switch/43431
LimitNOFILE = 8192;
};
};
# TODO: This should move into nix-builder so we can only run clean when builds are passing. Otherwise partial builds will lose progress.
# TODO: In nix-builder maybe include setting to auto delete to make room during builds if we run out of space, just in case builds are failing for a long time and prevent cleanup from running.
# systemd.timers."clean-cache" = {
# wantedBy = [ "timers.target" ];
# timerConfig = {
# OnCalendar = "*-*-01 02:00:00 America/New_York";
# Unit = "clean-cache.service";
# };
# };
systemd.services."clean-cache" = {
script = ''
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "''${BASH_SOURCE[0]}" )" && pwd )"
NIX_REMOTE='local?root=/.disk/root' nix-collect-garbage -d
'';
path = with pkgs; [
pkgs.nix
];
restartIfChanged = false;
serviceConfig = {
Type = "simple";
User = "nixworker";
# restartIfChanged = false;
# RemainAfterExit = true; # Prevents the service from automatically starting on rebuild. See https://discourse.nixos.org/t/how-to-prevent-custom-systemd-service-from-restarting-on-nixos-rebuild-switch/43431
LimitNOFILE = 8192;
};
};
};
2025-03-28 17:26:50 -04:00
}