Move almost everything over to Nix

Eliminate Xonsh usage
Eliminate usage of the supports.yml files for default.nix
Point ISOs directly to MinIO URLs instead
This commit is contained in:
Greg Hellings
2024-06-26 16:00:57 -05:00
parent 2d124c652a
commit 832c901b9b
37 changed files with 210 additions and 434 deletions
+63 -7
View File
@@ -10,8 +10,30 @@
treefmt-nix.url = "github:numtide/treefmt-nix";
};
outputs = { devshell, flake-parts, flake-root, process-compose, treefmt-nix, ... }@inputs:
flake-parts.lib.mkFlake { inherit inputs; } {
outputs = { devshell, flake-parts, flake-root, process-compose, treefmt-nix, nixpkgs, ... }@inputs: let
lib = nixpkgs.lib;
providers = [
"qemu"
"virtualbox-iso"
"hyperv-iso"
];
distros = import ./distros;
# Inserts the distro name into each element in the list
insertNames = lib.attrsets.mapAttrsToList (distro: val: (builtins.map (x: x // { inherit distro; }) val)) distros;
# Flattens all the distros into a single list
flat = lib.lists.flatten insertNames;
# Combines providers list with flattened list
withProviders = lib.attrsets.mapCartesianProduct
({d, provider}: d // { inherit provider; })
{ d = flat; provider = providers; };
active = builtins.filter (x: (x?eol) && (!x.eol)) withProviders;
name = d: "-${d.distro}-${d.arch}-${d.provider}-${d.version}";
distroFile = d: "distros/${d.distro}/${d.version}/${d.arch}.pkrvars.hcl";
cmd = d: ''
version="''${1:-1}"
packer build -var "build=$version" -only=${d.provider}.${d.arch} -var-file=${distroFile d}'';
in flake-parts.lib.mkFlake { inherit inputs; }
{
imports = [
inputs.devshell.flakeModule
inputs.flake-root.flakeModule
@@ -24,9 +46,8 @@
"x86_64-linux"
"aarch64-linux"
];
perSystem = { config, pkgs, self', system, ... }: let
lib = pkgs.lib;
in {
perSystem = { config, pkgs, self', system, ... }:
{
_module.args.pkgs = import inputs.nixpkgs {
inherit system;
config.allowUnfree = true;
@@ -47,11 +68,46 @@
package = self'.packages.validate;
category = "utils";
help = "Validate all the files";
} ];
} ] ++ (builtins.map (d: { package = self'.packages."build${name d}"; category = "builds"; }) withProviders);
env = [{
name = "EFI_DIR";
value = "${pkgs.OVMF.fd}/FV/";
}];
};
# This is not special, this is just flakes
packages = {
packages = let
base = {
runtimeInputs = with pkgs; [
packer
qemu_full
];
};
build = d: pkgs.writeShellApplication (base // {
name = "build${name d}";
text = ''
set -x
${cmd d} -except=upload -var headless=false sources/
'';
});
upload = d: pkgs.writeShellApplication (base // {
name = "upload${name d}";
text = ''
set -x
${cmd d} sources/
'';
});
builds = lib.lists.foldr (d: acc: acc // { "build${name d}" = (build d); }) {} withProviders;
uploads = lib.lists.foldr (d: acc: acc // { "upload${name d}" = (upload d); }) {} withProviders;
toYAML = x: (pkgs.formats.yaml x).generate;
qemu_list = builtins.toJSON (builtins.map (d: { distro = distroFile d; }) (builtins.filter (x: x.provider == "qemu") active));
vbox_list = builtins.toJSON (builtins.map (d: { distro = distroFile d; }) (builtins.filter (x: x.provider == "virtualbox-iso") active));
hyperv_list = builtins.toJSON (builtins.map (d: { distro = distroFile d; }) (builtins.filter (x: x.provider == "hyperv-iso") active));
in builds // uploads // {
continue = pkgs.writeText "continue.yml"
(builtins.replaceStrings ["QEMU_MATRIX" "VBOX_MATRIX" "HYPERV_MATRIX"] [qemu_list vbox_list hyperv_list]
(builtins.readFile ./.gitlab-ci-build.yml.in)
);
cache = pkgs.writeShellApplication {
name = "cache-isos";
runtimeInputs = with pkgs; [