snix/ops/nixos.nix
Ilan Joselevich b62838cc75 fix(ops/nixos): Include in CI
Machines created with third_party.nixos would not be added to the
buildkite pipeline because they are not derivations.

Closes: https://git.snix.dev/snix/snix/issues/80
Change-Id: I1e107b83e352244b229e498adc00df373742fb1a
Reviewed-on: https://cl.snix.dev/c/snix/+/30666
Reviewed-by: Florian Klink <flokli@flokli.de>
Reviewed-by: Ilan Joselevich <personal@ilanjoselevich.com>
Tested-by: besadii
Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com>
2025-08-11 10:52:08 +00:00

70 lines
1.8 KiB
Nix

# Helper functions for instantiating depot-compatible NixOS machines.
{
depot,
lib,
pkgs,
...
}@args:
let
inherit (lib) findFirst;
in
rec {
# This provides our standard set of arguments to all NixOS modules.
baseModule =
{ ... }:
{
nix.nixPath =
let
# Due to nixpkgsBisectPath, pkgs.path is not always in the nix store
nixpkgsStorePath =
if lib.hasPrefix builtins.storeDir (toString pkgs.path) then
builtins.storePath pkgs.path # nixpkgs is already in the store
else
pkgs.path; # we need to dump nixpkgs to the store either way
in
[
("nixos=" + nixpkgsStorePath)
("nixpkgs=" + nixpkgsStorePath)
];
};
nixosFor =
configuration:
(depot.third_party.nixos {
configuration =
{ ... }:
{
imports = [
baseModule
configuration
];
};
specialArgs = {
inherit (args) depot;
};
});
findSystem =
hostname:
(findFirst (
system: system.config.networking.hostName == hostname
) (throw "${hostname} is not a known NixOS host") (map nixosFor depot.ops.machines.all-systems));
# Systems that should be built in CI
archivistEC2System = (nixosFor depot.ops.machines.archivist-ec2).system;
gerrit01System = (nixosFor depot.ops.machines.gerrit01).system;
public01System = (nixosFor depot.ops.machines.public01).system;
build01System = (nixosFor depot.ops.machines.build01).system;
meta01System = (nixosFor depot.ops.machines.meta01).system;
nixosSnixCacheSystem = (nixosFor depot.ops.machines.snix-cache).system;
meta.ci.targets = [
"archivistEC2System"
"gerrit01System"
"public01System"
"build01System"
"meta01System"
];
}