summaryrefslogtreecommitdiff
path: root/module.nix
diff options
context:
space:
mode:
authorseth <[email protected]>2023-11-07 21:39:13 -0500
committerseth <[email protected]>2023-11-07 21:47:01 -0500
commitb7254760ccedc8fc81a21b4e707c628556df1f6c (patch)
tree8a1b17a663e86cb9625c2fceddf0010c2cb2554c /module.nix
initial commit
Diffstat (limited to 'module.nix')
-rw-r--r--module.nix113
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;
+ };
+}