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:
@@ -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; [
|
||||
|
||||
Reference in New Issue
Block a user