summary refs log tree commit diff
path: root/pkgs/build-support/release
diff options
context:
space:
mode:
authorJoachim F <joachifm@users.noreply.github.com>2017-07-02 09:46:17 +0100
committerGitHub <noreply@github.com>2017-07-02 09:46:17 +0100
commitd88f83de6b90e7d96b357287d252e5f746d57433 (patch)
tree8ca9c1a89a3d98af862385097ff07b1c2837d93c /pkgs/build-support/release
parente7c38c14b1bc98ed439b6d93654c5826338390c3 (diff)
parent37f0aafc56c3357213833c43edc45c33e71a0f15 (diff)
downloadnixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.tar
nixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.tar.gz
nixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.tar.bz2
nixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.tar.lz
nixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.tar.xz
nixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.tar.zst
nixpkgs-d88f83de6b90e7d96b357287d252e5f746d57433.zip
Merge pull request #17681 from ericsagnes/feat/releaseTools.channel
releaseTools: add channel function
Diffstat (limited to 'pkgs/build-support/release')
-rw-r--r--pkgs/build-support/release/default.nix52
1 files changed, 52 insertions, 0 deletions
diff --git a/pkgs/build-support/release/default.nix b/pkgs/build-support/release/default.nix
index 82919cf819f..5e3eb751b81 100644
--- a/pkgs/build-support/release/default.nix
+++ b/pkgs/build-support/release/default.nix
@@ -73,4 +73,56 @@ rec {
         done
       '';
 
+  /* Create a channel job which success depends on the success of all of
+     its contituents. Channel jobs are a special type of jobs that are
+     listed in the channel tab of Hydra and that can be suscribed.
+     A tarball of the src attribute is distributed via the channel.
+     
+     - constituents: a list of derivations on which the channel success depends.
+     - name: the channel name that will be used in the hydra interface.
+     - src: should point to the root folder of the nix-expressions used by the
+            channel, typically a folder containing a `default.nix`.
+
+       channel {
+         constituents = [ foo bar baz ];
+         name = "my-channel";
+         src = ./.;
+       };
+     
+  */
+  channel =
+    { name, src, constituents ? [], meta ? {}, isNixOS ? true, ... }@args:
+    stdenv.mkDerivation ({
+      preferLocalBuild = true;
+      _hydraAggregate = true;
+
+      phases = [ "unpackPhase" "patchPhase" "installPhase" ];
+
+      patchPhase = stdenv.lib.optionalString isNixOS ''
+        touch .update-on-nixos-rebuild
+      '';
+
+      installPhase = ''
+        mkdir -p $out/{tarballs,nix-support}
+
+        tar cJf "$out/tarballs/nixexprs.tar.xz" \
+          --owner=0 --group=0 --mtime="1970-01-01 00:00:00 UTC" \
+          --transform='s!^\.!${name}!' .
+
+        echo "channel - $out/tarballs/nixexprs.tar.xz" > "$out/nix-support/hydra-build-products"
+        echo $constituents > "$out/nix-support/hydra-aggregate-constituents"
+
+        # Propagate build failures.
+        for i in $constituents; do
+          if [ -e "$i/nix-support/failed" ]; then
+            touch "$out/nix-support/failed"
+          fi
+        done
+      '';
+
+      meta = meta // {
+        isHydraChannel = true;
+      };
+    } // removeAttrs args [ "meta" ]);
+
 }