From af2ef44e760c25c34c444720c90b75652978c9ab Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 8 Mar 2026 20:12:57 +0100 Subject: [PATCH] flake: add release job to Hydra This job is used to indicate that all relevant Hydra jobs of an architecture have built. The idea is to build some CD mechanism on AFNix's Hydra to e.g. auto-update the nightly manual. See https://hydra.afnix.fr/jobset/lix/demo for the current setup. Change-Id: I41724c5884a068bbe41407ab30f8edf8e4914001 --- flake.nix | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/flake.nix b/flake.nix index c565eeb0d..0f1fe7e74 100644 --- a/flake.nix +++ b/flake.nix @@ -284,6 +284,43 @@ overlays.default = overlayFor (p: p.clangStdenv); hydraJobs = { + # Aggregate job that is finished in Hydra _after_ all constituent jobs (here: grouped by system) + # succeed. + # This is used to run CD scripts once all builds are finished on Hydra. + release = forAllSystems ( + system: + let + pkgs = nixpkgsFor.${system}.native; + in + pkgs.runCommand "release" + { + _hydraAggregate = true; + constituents = lib.filter (x: x != null) ( + lib.mapAttrsToListRecursiveCond + (_: val: !(lib.isDerivation val || builtins.any (system': val ? ${system'}) systems)) + ( + path: drv: + if drv ? ${system} then + lib.concatStringsSep "." (path ++ [ system ]) + else if drv.system or null == system then + lib.concatStringsSep "." path + else + null + ) + ( + removeAttrs self.hydraJobs [ + "devShell" + "release" + "rl-next" + ] + ) + ); + } + '' + touch $out + '' + ); + # Binary package for various platforms. build = forAllSystems (system: self.packages.${system}.nix);