diff options
| author | seth <[email protected]> | 2023-11-07 21:39:13 -0500 |
|---|---|---|
| committer | seth <[email protected]> | 2023-11-07 21:47:01 -0500 |
| commit | b7254760ccedc8fc81a21b4e707c628556df1f6c (patch) | |
| tree | 8a1b17a663e86cb9625c2fceddf0010c2cb2554c /module.nix | |
initial commit
Diffstat (limited to 'module.nix')
| -rw-r--r-- | module.nix | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/module.nix b/module.nix new file mode 100644 index 0000000..189dc69 --- /dev/null +++ b/module.nix @@ -0,0 +1,113 @@ +workflowLib': { + config, + lib, + self, + ... +}: let + cfg = config.githubWorkflowGenerator; + + inherit + (builtins) + attrNames + elem + ; + + inherit + (lib) + filter + getAttrs + mapAttrsToList + mdDoc + mkOption + literalExpression + types + ; + + workflowLib = workflowLib' ( + {inherit self;} + // lib.mkIf (cfg.platforms != {}) { + inherit (cfg) platforms; + } + ); + + supportedOutputs = [ + "apps" + "checks" + "devShells" + "darwinConfigurations" + "homeConfigurations" + "nixosConfigurations" + "packages" + ]; + + platformMap = { + options = { + arch = mkOption { + description = mdDoc "the architecture of a system"; + type = types.str; + default = null; + example = literalExpression "x86_64"; + }; + + os = mkOption { + description = mdDoc "the name of an os supported by github runners"; + type = types.str; + default = null; + example = literalExpression "ubuntu-latest"; + }; + }; + }; + + overrides = { + options = { + systems = mkOption { + description = mdDoc "list of systems to build an output for"; + type = types.listOf types.str; + default = builtins.attrNames cfg.platforms; + }; + }; + }; + + jobs = lib.concatLists ( + mapAttrsToList ( + output: _: + workflowLib.mkMatrix ({inherit output;} // cfg.overrides.${output} or {}) + ) + (getAttrs cfg.outputs self) + ); +in { + options = { + githubWorkflowGenerator = { + outputs = mkOption { + description = mdDoc "outputs to include in workflow"; + type = types.listOf types.str; + default = filter (output: elem output supportedOutputs) (attrNames self); + }; + + platforms = mkOption { + description = mdDoc '' + an attrset that can map a nix system to an architecture and os supported by github + ''; + type = types.attrsOf (types.submodule platformMap); + default = {}; + }; + + overrides = mkOption { + description = mdDoc "overrides for mkMatrix args"; + type = types.attrsOf (types.submodule overrides); + default = {}; + example = literalExpression '' + { + githubWorkflowGenerator.overrides = { + checks.systems = [ "x86_64-linux" ]; + }; + } + ''; + }; + }; + }; + + config.flake.githubWorkflow = { + matrix.include = jobs; + }; +} |
