9c482d6238
We have naturally evolved a distinction between logical and physical targets. Physical targets are those which correspond directly to a tree location on disk and can be built with `-A path.to.files`, while logical targets are those that are exported from within an expression but do not have a corresponding file on disk. This change adds support for exporting logical targets from any tree location by adding a `meta.targets` attribute containing keys into itself, which will be consumed by the CI target gathering logic and included in the generated pipeline. Note that the labels for subtargets are syntactically different to emphasise that they do not correspond to a file location. For example, this change enables 'ops.nixos.whitbySystem' as a subtarget, which is labeled in CI as `ops/nixos:whitbySystem`. Change-Id: Ied09647a62c2ba98e3914548e3742ad422c63ecf Reviewed-on: https://cl.tvl.fyi/c/depot/+/1893 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
52 lines
1.4 KiB
Nix
52 lines
1.4 KiB
Nix
# Most of the Nix expressions in this folder are NixOS modules, which
|
|
# are not readTree compatible.
|
|
#
|
|
# Some things (such as system configurations) are, and we import them
|
|
# here manually.
|
|
#
|
|
# TODO(tazjin): Find a more elegant solution for the whole module
|
|
# situation.
|
|
{ lib, pkgs, depot, ... }@args:
|
|
|
|
let
|
|
inherit (lib) findFirst isAttrs;
|
|
in
|
|
|
|
rec {
|
|
whitby = import ./whitby/default.nix args;
|
|
|
|
# System installation
|
|
|
|
allSystems = import ./all-systems.nix args;
|
|
|
|
nixosFor = configuration: depot.third_party.nixos {
|
|
inherit configuration;
|
|
};
|
|
|
|
findSystem = hostname:
|
|
(findFirst
|
|
(system: system.config.networking.hostName == hostname)
|
|
(throw "${hostname} is not a known NixOS host")
|
|
(map nixosFor allSystems));
|
|
|
|
rebuild-system = pkgs.writeShellScriptBin "rebuild-system" ''
|
|
set -ue
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "Oh no! Only root is allowed to rebuild the system!" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Rebuilding NixOS for $HOSTNAME"
|
|
system=$(nix-build -E "((import ${toString depot.depotPath} {}).ops.nixos.findSystem \"$HOSTNAME\").system" --no-out-link --show-trace)
|
|
|
|
nix-env -p /nix/var/nix/profiles/system --set $system
|
|
$system/bin/switch-to-configuration switch
|
|
'';
|
|
|
|
# Systems that should be built in CI
|
|
#
|
|
# TODO(tazjin): Refactor the whole systems setup, it's a bit
|
|
# inconsistent at the moment.
|
|
whitbySystem = (nixosFor whitby).system;
|
|
meta.targets = [ "whitbySystem" ];
|
|
}
|