summary refs log tree commit diff
path: root/pkgs/top-level
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-03-26 11:02:29 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-03-26 11:58:59 +0100
commitcffc126e140eea1a0bc01a1419c5609c619f5326 (patch)
tree0c3ea3d870c73e51131730508a68a962bdda2c91 /pkgs/top-level
parentb38647766db69308c789da46fe9f3f2b89e782d9 (diff)
downloadnixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.tar
nixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.tar.gz
nixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.tar.bz2
nixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.tar.lz
nixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.tar.xz
nixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.tar.zst
nixpkgs-cffc126e140eea1a0bc01a1419c5609c619f5326.zip
Make Nixpkgs jobs unique
That is, there are now distinct jobs like ‘coreutils.x86_64-linux’ and
‘coreutils.x86_64-darwin’, rather than a single job ‘coreutils’ with
multiple builds.  This means that testing a job is simpler:

  $ nix-build pkgs/top-level/release.nix -A coreutils.x86_64-linux

See https://github.com/NixOS/hydra/issues/60 for the motivation.
Diffstat (limited to 'pkgs/top-level')
-rw-r--r--pkgs/top-level/release-lib.nix69
-rw-r--r--pkgs/top-level/release.nix20
2 files changed, 48 insertions, 41 deletions
diff --git a/pkgs/top-level/release-lib.nix b/pkgs/top-level/release-lib.nix
index fed9a1d673b..ed523d235b8 100644
--- a/pkgs/top-level/release-lib.nix
+++ b/pkgs/top-level/release-lib.nix
@@ -7,7 +7,8 @@ rec {
 
   pkgs = allPackages { };
 
-  /* !!! Hack: poor man's memoisation function.  Necessary for prevent
+
+  /* !!! Hack: poor man's memoisation function.  Necessary to prevent
      Nixpkgs from being evaluated again and again for every
      job/platform pair. */
   pkgsFor = system:
@@ -26,33 +27,39 @@ rec {
   pkgs_i686_freebsd = allPackages { system = "i686-freebsd"; };
   pkgs_i686_cygwin = allPackages { system = "i686-cygwin"; };
 
+
   /* The working or failing mails for cross builds will be sent only to
      the following maintainers, as most package maintainers will not be
      interested in the result of cross building a package. */
   crossMaintainers = with pkgs.lib.maintainers; [ viric ];
 
+
   /* Set the Hydra scheduling priority for a job.  The default
-     priority (10) should be used for most jobs.  A different
-     priority should only be used for a few particularly interesting
-     jobs (in terms of giving feedback to developers), such as stdenv.
-  */
+     priority (10) should be used for most jobs.  A different priority
+     should only be used for a few particularly interesting jobs (in
+     terms of giving feedback to developers), such as stdenv. */
   prio = level: job: toJob job // { schedulingPriority = level; };
 
+
   toJob = x: if builtins.isAttrs x then x else
     { type = "job"; systems = x; schedulingPriority = 10; };
 
+
   /* Perform a job on the given set of platforms.  The function `f' is
      called by Hydra for each platform, and should return some job
      to build on that platform.  `f' is passed the Nixpkgs collection
      for the platform in question. */
-  testOn = systems: f: {system ? builtins.currentSystem}:
-    if pkgs.lib.elem system systems then f (pkgsFor system) else {};
+  testOn = systems: f: pkgs.lib.genAttrs systems (system: f (pkgsFor system));
 
-  /* Similar to the testOn function, but with an additional 'crossSystem'
-   * parameter for allPackages, defining the target platform for cross builds */
+
+  /* Similar to the testOn function, but with an additional
+     'crossSystem' parameter for allPackages, defining the target
+     platform for cross builds. */
   testOnCross = crossSystem: systems: f: {system ? builtins.currentSystem}:
-    if pkgs.lib.elem system systems then f (allPackages {inherit system
-                crossSystem;}) else {};
+    if pkgs.lib.elem system systems
+    then f (allPackages { inherit system crossSystem; })
+    else {};
+
 
   /* Map an attribute of the form `foo = [platforms...]'  to `testOn
      [platforms...] (pkgs: pkgs.foo)'. */
@@ -82,29 +89,28 @@ rec {
           (pkgs.lib.getAttrFromPath path pkgs));
       in testOnCross crossSystem job.systems getPkg);
 
+
   /* Find all packages that have a meta.platforms field listing the
      supported platforms. */
   packagesWithMetaPlatform = attrSet:
-    if builtins ? tryEval then
-      let pairs = pkgs.lib.concatMap
-        (x:
-          let pair = builtins.tryEval
-                (let
-                   attrVal = (builtins.getAttr x attrSet);
-                 in
-                   {val=(processPackage attrVal);
-                    attrVal = attrVal;
-                    attrValIsAttrs = builtins.isAttrs attrVal;
-                    });
-              success = (builtins.tryEval pair.value.attrVal).success;
-          in
-          if success && pair.value.attrValIsAttrs &&
-              pair.value.val != [] then
-            [{name= x; value=pair.value.val;}] else [])
-        (builtins.attrNames attrSet);
-      in
-        builtins.listToAttrs pairs
-    else {};
+    let pairs = pkgs.lib.concatMap
+      (x:
+        let pair = builtins.tryEval
+              (let
+                 attrVal = (builtins.getAttr x attrSet);
+               in
+                 { val = processPackage attrVal;
+                   attrVal = attrVal;
+                   attrValIsAttrs = builtins.isAttrs attrVal;
+                 });
+            success = (builtins.tryEval pair.value.attrVal).success;
+        in
+        pkgs.lib.optional (success && pair.value.attrValIsAttrs && pair.value.val != [])
+          { name = x; value = pair.value.val; })
+      (builtins.attrNames attrSet);
+    in
+      builtins.listToAttrs pairs;
+
 
   # May fail as much as it wishes, we will catch the error.
   processPackage = attrSet:
@@ -117,6 +123,7 @@ rec {
         then attrSet.meta.platforms
         else [];
 
+
   /* Common platform groups on which to test packages. */
   inherit (pkgs.lib.platforms) linux darwin cygwin allBut all mesaPlatforms;
 
diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix
index 595c6b427a2..d1b5d8254c4 100644
--- a/pkgs/top-level/release.nix
+++ b/pkgs/top-level/release.nix
@@ -1,13 +1,15 @@
-/*
-  This file will be evaluated by hydra with a call like this:
-  hydra_eval_jobs --gc-roots-dir \
-    /nix/var/nix/gcroots/per-user/hydra/hydra-roots --argstr \
-    system i686-linux --argstr system x86_64-linux --arg \
-    nixpkgs "{outPath = ./}" .... release.nix
+/* This file defines the builds that constitute the Nixpkgs.
+   Everything defined here ends up in the Nixpkgs channel.  Individual
+   jobs can be tested by running:
 
-  Hydra can be installed with "nix-env -i hydra".
+   $ nix-build pkgs/top-level/release.nix -A <jobname>.<system>
+
+   e.g.
+
+   $ nix-build pkgs/top-level/release.nix -A coreutils.x86_64-linux
 */
-with (import ./release-lib.nix);
+
+with import ./release-lib.nix;
 
 {
 
@@ -20,8 +22,6 @@ with (import ./release-lib.nix);
   apacheHttpd = linux;
   aspell = all;
   at = linux;
-  aterm25 = all;
-  aterm28 = all;
   audacious = linux;
   autoconf = all;
   automake110x = all;