summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/flake/githubWorkflow.nix96
-rw-r--r--modules/flake/workflowLib.nix95
2 files changed, 117 insertions, 74 deletions
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);
+}