2023-02-24 16:16:15 +02:00
|
|
|
{ config, inputs, lib, self, withSystem, ... }:
|
|
|
|
|
|
|
|
let
|
|
|
|
inherit (lib) elem mapAttrs toLower;
|
2023-03-20 20:11:42 +02:00
|
|
|
inherit (config) gods defaultEffectSystem;
|
2023-02-24 16:16:15 +02:00
|
|
|
inherit (self) nixosConfigurations;
|
|
|
|
|
2023-03-20 20:11:42 +02:00
|
|
|
meta = import ../tools/meta.nix;
|
|
|
|
|
2023-02-24 16:16:15 +02:00
|
|
|
chosenHours = gods.fromLight;
|
|
|
|
|
|
|
|
withEffectSystem = withSystem defaultEffectSystem;
|
|
|
|
|
2023-03-21 18:10:27 +02:00
|
|
|
callUpon = name: host: withEffectSystem ({ config, hci-effects, ... }: let
|
2023-02-24 16:16:15 +02:00
|
|
|
inherit (hci-effects) runIf runNixOS;
|
|
|
|
inherit (host.enterprise) subdomain;
|
|
|
|
|
2023-03-20 20:11:42 +02:00
|
|
|
hostname = "${toLower name}.${subdomain}.${meta.domain}";
|
2023-02-24 16:16:15 +02:00
|
|
|
|
|
|
|
deploy-rs = inputs.deploy-rs.lib."${host.system}";
|
|
|
|
in {
|
2023-03-21 18:10:27 +02:00
|
|
|
effect = { branch, ... }: runIf (elem branch [ "master" "staging" ])
|
|
|
|
(runNixOS {
|
2023-02-24 16:16:15 +02:00
|
|
|
requiredSystemFeatures = [ "hci-deploy-agent-nixos" ];
|
|
|
|
|
|
|
|
inherit (nixosConfigurations.${name}) config;
|
|
|
|
|
|
|
|
secretsMap.ssh = "deploy-ssh";
|
|
|
|
|
|
|
|
userSetupScript = ''
|
|
|
|
writeSSHKey ssh
|
|
|
|
cat >>~/.ssh/known_hosts <<EOF
|
|
|
|
${hostname} ${host.ssh.id.publicKey}
|
|
|
|
EOF
|
|
|
|
'';
|
|
|
|
|
|
|
|
ssh.destination = "root@${hostname}";
|
|
|
|
});
|
|
|
|
|
|
|
|
deploy = {
|
|
|
|
inherit hostname;
|
|
|
|
profiles.system = {
|
|
|
|
user = "root";
|
|
|
|
sshUser = "deploy";
|
|
|
|
path = deploy-rs.activate.nixos self.nixosConfigurations.${name};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
calledUponHours = mapAttrs callUpon chosenHours;
|
|
|
|
|
|
|
|
pick = format: _: calledUponHour: calledUponHour.${format};
|
|
|
|
in
|
|
|
|
|
|
|
|
{
|
2023-03-21 18:10:27 +02:00
|
|
|
herculesCI = { config, ... }: let
|
|
|
|
powers = mapAttrs (pick "effect") calledUponHours;
|
|
|
|
wield = mapAttrs (_: wieldPowerWith: wieldPowerWith config.repo);
|
|
|
|
in {
|
|
|
|
onPush.default.outputs.effects = wield powers;
|
|
|
|
};
|
2023-02-24 16:16:15 +02:00
|
|
|
|
|
|
|
flake.deploy.nodes = mapAttrs (pick "deploy") calledUponHours;
|
|
|
|
}
|