From 602193a4d8d0c8a886f9bb4f7e2bca2b968771fc Mon Sep 17 00:00:00 2001 From: seth Date: Sun, 5 Nov 2023 13:54:06 -0500 Subject: modules/githubWorkflow: separate lib --- modules/flake/githubWorkflow.nix | 96 +++++++++------------------------------- modules/flake/workflowLib.nix | 95 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 74 deletions(-) create mode 100644 modules/flake/workflowLib.nix (limited to 'modules') diff --git a/modules/flake/githubWorkflow.nix b/modules/flake/githubWorkflow.nix index bb36bf7..923682d 100644 --- a/modules/flake/githubWorkflow.nix +++ b/modules/flake/githubWorkflow.nix @@ -1,4 +1,4 @@ -{ +workflowLib': { config, lib, self, @@ -15,15 +15,22 @@ inherit (lib) elem - flatten getAttrs literalExpression mapAttrsToList mdDoc + mkIf mkOption types ; + workflowLib = workflowLib' ( + {inherit self;} + // mkIf (cfg.platforms != {}) { + inherit (cfg) platforms; + } + ); + supportedOutputs = [ "apps" "checks" @@ -61,60 +68,6 @@ }; }; }; - - mkMatrix = { - output, - systems ? (attrNames cfg.platforms), - }: - if (lib.elem output ["nixosConfigurations" "darwinConfigurations"]) - then - mkMatrixFlat { - inherit output; - suffix = ".config.system.build.toplevel"; - } - else if (output == "homeConfigurations") - then - mkMatrixFlat { - inherit output; - suffix = ".activationPackage"; - } - else - flatten ( - mapAttrsToList - ( - system: - mapAttrsToList ( - attr: _: { - inherit (cfg.platforms.${system}) os arch; - attr = "${output}.${system}.${attr}"; - } - ) - ) - (getAttrs systems self.${output}) - ); - - mkMatrixFlat = { - output, - suffix ? "", - }: - mapAttrsToList ( - attr: deriv: { - inherit (cfg.platforms.${deriv.pkgs.system}) os arch; - attr = "${output}.${attr}${suffix}"; - } - ) - self.${output}; - - jobs = let - self' = getAttrs cfg.outputs self; - in - flatten ( - mapAttrsToList ( - output: _: - mkMatrix ({inherit output;} // cfg.overrides.${output} or {}) - ) - self' - ); in { options = { githubWorkflowGenerator = { @@ -129,22 +82,7 @@ in { an attrset that can map a nix system to an architecture and os supported by github ''; type = types.attrsOf (types.submodule platformMap); - default = { - "x86_64-linux" = { - arch = "x86_64"; - os = "ubuntu-latest"; - }; - - "aarch64-linux" = { - arch = "aarch64"; - os = "ubuntu-latest"; - }; - - "x86_64-darwin" = { - arch = "x86_64"; - os = "macos-latest"; - }; - }; + default = {}; }; overrides = mkOption { @@ -153,7 +91,7 @@ in { default = {}; example = literalExpression '' { - githubworkflowGenerator.overrides = { + githubWorkflowGenerator.overrides = { checks.systems = [ "x86_64-linux" ]; }; } @@ -162,5 +100,15 @@ in { }; }; - config.flake.githubWorkflow = {matrix.include = jobs;}; + config.flake = { + githubWorkflow = { + matrix.include = lib.concatLists ( + mapAttrsToList ( + output: _: + workflowLib.mkMatrix ({inherit output;} // cfg.overrides.${output} or {}) + ) + (getAttrs cfg.outputs self) + ); + }; + }; } diff --git a/modules/flake/workflowLib.nix b/modules/flake/workflowLib.nix new file mode 100644 index 0000000..d8cc4c4 --- /dev/null +++ b/modules/flake/workflowLib.nix @@ -0,0 +1,95 @@ +lib: { + self, + platforms ? { + "x86_64-linux" = { + os = "ubuntu-latest"; + arch = "x64"; + }; + + "aarch64-linux" = { + os = "ubuntu-latest"; + arch = "aarch64"; + }; + + "x86_64-darwin" = { + os = "macos-latest"; + arch = "x64"; + }; + }, + ... +}: let + inherit + (lib) + flatten + getAttrs + mapAttrsToList + warn + ; + + platforms' = + platforms + // { + fallback = warn "an output in the job matrix is not supported!" { + os = null; + arch = null; + }; + }; + + mkMatrixMulti = systems: output: + flatten ( + mapAttrsToList ( + system: + mapAttrsToList ( + attr: _: { + inherit (platforms'.${system} or platforms'.fallback) arch os; + attr = "${output}.${system}.${attr}"; + } + ) + ) + (getAttrs systems self.${output}) + ); + + mkMatrixFlat = { + output, + suffix ? "", + }: + mapAttrsToList ( + attr: deriv: { + inherit (platforms'.${deriv.pkgs.system} or platforms'.fallback) os arch; + attr = "${output}.${attr}${suffix}"; + } + ) + self.${output}; + + mkMatrixSystem = output: + mkMatrixFlat { + inherit output; + suffix = ".config.system.build.toplevel"; + }; + + mkMatrixUser = mkMatrixFlat { + output = "homeConfigurations"; + suffix = ".activationPackage"; + }; +in { + inherit + mkMatrixMulti + mkMatrixFlat + mkMatrixSystem + mkMatrixUser + ; + + platforms = platforms'; + + mkMatrix = { + output, + systems ? (builtins.attrNames platforms), + }: + { + "nixosConfigurations" = mkMatrixSystem output; + "darwinConfigurations" = mkMatrixSystem output; + "homeConfigurations" = mkMatrixUser; + } + .${output} + or (mkMatrixMulti systems output); +} -- cgit v1.2.3