| 
									
										
										
										
											2025-03-31 03:03:41 -04:00
										 |  |  | { pulls, branches, ... }: | 
					
						
							| 
									
										
										
										
											2024-04-03 02:34:17 -04:00
										 |  |  | let | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  |   # create the json spec for the jobset | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |   makeSpec = | 
					
						
							|  |  |  |     contents: | 
					
						
							|  |  |  |     builtins.derivation { | 
					
						
							|  |  |  |       name = "spec.json"; | 
					
						
							|  |  |  |       system = "x86_64-linux"; | 
					
						
							|  |  |  |       preferLocalBuild = true; | 
					
						
							|  |  |  |       allowSubstitutes = false; | 
					
						
							|  |  |  |       builder = "/bin/sh"; | 
					
						
							|  |  |  |       args = [ | 
					
						
							|  |  |  |         (builtins.toFile "builder.sh" ''
 | 
					
						
							|  |  |  |           echo "$contents" > $out | 
					
						
							|  |  |  |         '')
 | 
					
						
							|  |  |  |       ]; | 
					
						
							|  |  |  |       contents = builtins.toJSON contents; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2024-04-03 02:34:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-20 15:21:40 -04:00
										 |  |  |   prs = readJSONFile pulls; | 
					
						
							| 
									
										
										
										
											2025-03-31 03:03:41 -04:00
										 |  |  |   refs = readJSONFile branches; | 
					
						
							| 
									
										
										
										
											2024-04-03 02:34:17 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  |   # template for creating a job | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |   makeJob = | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       schedulingshares ? 10, | 
					
						
							|  |  |  |       keepnr ? 3, | 
					
						
							|  |  |  |       description, | 
					
						
							|  |  |  |       flake, | 
					
						
							| 
									
										
										
										
											2025-03-26 15:09:02 -04:00
										 |  |  |       enabled ? 1, | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |     }: | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       inherit | 
					
						
							|  |  |  |         description | 
					
						
							|  |  |  |         flake | 
					
						
							|  |  |  |         schedulingshares | 
					
						
							|  |  |  |         keepnr | 
					
						
							| 
									
										
										
										
											2025-03-26 15:09:02 -04:00
										 |  |  |         enabled | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |         ; | 
					
						
							|  |  |  |       type = 1; | 
					
						
							|  |  |  |       hidden = false; | 
					
						
							| 
									
										
										
										
											2024-07-27 12:35:10 -04:00
										 |  |  |       checkinterval = 300; # every 5 minutes | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |       enableemail = false; | 
					
						
							|  |  |  |       emailoverride = ""; | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-31 15:03:38 -04:00
										 |  |  |   giteaHost = "ssh://gitea@nayeonie.com:2222"; | 
					
						
							| 
									
										
										
										
											2025-03-31 03:03:41 -04:00
										 |  |  |   repo = "ahuston-0/nix-dotfiles"; | 
					
						
							| 
									
										
										
										
											2025-03-26 02:43:56 -04:00
										 |  |  |   # # Create a hydra job for a branch | 
					
						
							| 
									
										
										
										
											2025-03-31 03:03:41 -04:00
										 |  |  |   jobOfRef = | 
					
						
							|  |  |  |     name: | 
					
						
							|  |  |  |     { ref, ... }: | 
					
						
							|  |  |  |     if ((builtins.match "^refs/heads/(.*)$" ref) == null) then | 
					
						
							|  |  |  |       null | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         name = builtins.replaceStrings [ "/" ] [ "-" ] "branch-${name}"; | 
					
						
							|  |  |  |         value = makeJob { | 
					
						
							|  |  |  |           description = "Branch ${name}"; | 
					
						
							|  |  |  |           flake = "git+${giteaHost}/${repo}?ref=${ref}"; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Create a hydra job for a PR | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |   jobOfPR = id: info: { | 
					
						
							| 
									
										
										
										
											2024-08-06 09:09:51 -04:00
										 |  |  |     name = if info.draft then "draft-${id}" else "pr-${id}"; | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |     value = makeJob { | 
					
						
							| 
									
										
										
										
											2024-04-20 15:21:40 -04:00
										 |  |  |       description = "PR ${id}: ${info.title}"; | 
					
						
							| 
									
										
										
										
											2025-03-31 15:03:38 -04:00
										 |  |  |       flake = "git+${giteaHost}/${repo}?ref=${info.head.ref}"; | 
					
						
							|  |  |  |       enabled = info.state == "open"; | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2024-04-03 02:34:17 -04:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # some utility functions | 
					
						
							|  |  |  |   # converts json to name/value dicts | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |   attrsToList = l: builtins.attrValues (builtins.mapAttrs (name: value: { inherit name value; }) l); | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  |   # wrapper function for reading json from file | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |   readJSONFile = f: builtins.fromJSON (builtins.readFile f); | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  |   # remove null values from a set, in-case of branches that don't exist | 
					
						
							| 
									
										
										
										
											2025-03-31 03:03:41 -04:00
										 |  |  |   mapFilter = f: l: builtins.filter (x: (x != null)) (map f l); | 
					
						
							| 
									
										
										
										
											2024-04-20 16:45:37 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   # Create job set from PRs and branches | 
					
						
							| 
									
										
										
										
											2024-04-20 15:41:38 -04:00
										 |  |  |   jobs = makeSpec ( | 
					
						
							| 
									
										
										
										
											2024-04-20 15:25:36 -04:00
										 |  |  |     builtins.listToAttrs (map ({ name, value }: jobOfPR name value) (attrsToList prs)) | 
					
						
							| 
									
										
										
										
											2025-03-31 03:03:41 -04:00
										 |  |  |     // builtins.listToAttrs (mapFilter ({ name, value }: jobOfRef name value) (attrsToList refs)) | 
					
						
							| 
									
										
										
										
											2024-04-20 13:23:49 -04:00
										 |  |  |   ); | 
					
						
							| 
									
										
										
										
											2024-04-20 15:41:38 -04:00
										 |  |  | in | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-04-20 16:33:13 -04:00
										 |  |  |   jobsets = jobs; | 
					
						
							| 
									
										
										
										
											2024-04-03 02:34:17 -04:00
										 |  |  | } |