summary refs log tree commit diff
diff options
context:
space:
mode:
authorsternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2021-05-01 18:00:40 +0200
committersternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2021-05-03 11:40:03 +0200
commitef9631e5232f43973c37e7664dd814f96bef1cc4 (patch)
treef1d853dc81060e1002cf112d8a98a78079e73bcd
parent387387aa20d40acdd94a8e693a108d723f8cd018 (diff)
downloadnixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.tar
nixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.tar.gz
nixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.tar.bz2
nixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.tar.lz
nixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.tar.xz
nixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.tar.zst
nixpkgs-ef9631e5232f43973c37e7664dd814f96bef1cc4.zip
pkgs/top-level: init expression for haskell-updates jobset
release-haskell.nix is intended to be a replacement for
https://github.com/peti/ci/blob/master/haskell-nixpkgs.nix
which is currently the main expression for the haskell-updates jobset
on hydra (in the nixpkgs project).

It has the same jobs as the old haskell-nixpkgs.nix file:

* haskellPackages.*
* haskell.compiler.*
* Some extra haskell packages for certain compilers

The following jobs are new:

* tests.haskell.*
* A manually maintained list of top-level haskell packages (most of them
  using justStaticExecutables)
* An aggregate job which is intended to aid merging the haskell-updates
  branch: It holds an arbitrary list of haskell-related packages and
  tests we intend have working at all times. This is still somewhat
  incomplete and should be extendend in the future.

Additionally a lot of refactoring has been done and some unnecessary
code has been eliminated. Due to the increased set of jobs and my
ideas of convenience however, the code size has grown overall.
I've tried document the individual parts and would be happy about
feedback in general.

One future improvement could be making adding top-level haskell packages
more convenient and adding them all to the aggregate job automatically.
-rw-r--r--.github/CODEOWNERS1
-rw-r--r--.github/labeler.yml1
-rw-r--r--pkgs/top-level/release-haskell.nix201
3 files changed, 203 insertions, 0 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 6cde8c6fde0..256abac7b41 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -84,6 +84,7 @@
 /pkgs/development/compilers/ghc               @cdepillabout @sternenseemann @maralorn
 /pkgs/development/haskell-modules             @cdepillabout @sternenseemann @maralorn
 /pkgs/test/haskell                            @cdepillabout @sternenseemann @maralorn
+/pkgs/top-level/release-haskell.nix           @cdepillabout @sternenseemann @maralorn
 /pkgs/top-level/haskell-packages.nix          @cdepillabout @sternenseemann @maralorn
 
 # Perl
diff --git a/.github/labeler.yml b/.github/labeler.yml
index ef95fe66832..3637d05f48b 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -56,6 +56,7 @@
   - pkgs/development/tools/haskell/**/*
   - pkgs/test/haskell/**/*
   - pkgs/top-level/haskell-packages.nix
+  - pkgs/top-level/release-haskell.nix
 
 "6.topic: kernel":
   - pkgs/build-support/kernel/**/*
diff --git a/pkgs/top-level/release-haskell.nix b/pkgs/top-level/release-haskell.nix
new file mode 100644
index 00000000000..ac89af71b51
--- /dev/null
+++ b/pkgs/top-level/release-haskell.nix
@@ -0,0 +1,201 @@
+/*
+  To debug this expression you can use `hydra-eval-jobs` from
+  `pkgs.hydra-unstable` which prints the jobset description
+  to `stdout`:
+
+  $ hydra-eval-jobs -I . pkgs/top-level/release-haskell.nix
+*/
+{ supportedSystems ? [ "x86_64-linux" ] }:
+
+let
+
+  releaseLib = import ./release-lib.nix {
+    inherit supportedSystems;
+  };
+
+  inherit (releaseLib)
+    pkgs
+    packagePlatforms
+    mapTestOn
+    aggregate
+    ;
+
+  inherit (pkgs) lib;
+
+  # helper function which traverses a (nested) set
+  # of derivations produced by mapTestOn and flattens
+  # it to a list of derivations suitable to be passed
+  # to `releaseTools.aggregate` as constituents.
+  accumulateDerivations = jobList:
+    lib.concatMap (
+      attrs:
+        if lib.isDerivation attrs
+        then [ attrs ]
+        else if lib.isAttrs attrs
+        then accumulateDerivations (lib.attrValues attrs)
+        else []
+    ) jobList;
+
+  # names of all subsets of `pkgs.haskell.packages`
+  compilerNames = lib.mapAttrs (name: _: name) pkgs.haskell.packages;
+
+  # list of all compilers to test specific packages on
+  all = with compilerNames; [
+    ghc884
+    ghc8104
+    ghc901
+  ];
+
+  # packagePlatforms applied to `haskell.packages.*`
+  compilerPlatforms = lib.mapAttrs
+    (_: v: packagePlatforms v)
+    pkgs.haskell.packages;
+
+  # This function lets you specify specific packages
+  # which are to be tested on a list of specific GHC
+  # versions and returns a job set for all specified
+  # combinations. See `jobs` below for an example.
+  versionedCompilerJobs = config: mapTestOn {
+    haskell.packages =
+      (lib.mapAttrs (
+        ghc: jobs:
+        lib.filterAttrs (
+          jobName: platforms:
+          lib.elem ghc (config."${jobName}" or [])
+        ) jobs
+      ) compilerPlatforms);
+  };
+
+  # hydra jobs for `pkgs` of which we import a subset of
+  pkgsPlatforms = packagePlatforms pkgs // {
+    gitAndTools = packagePlatforms pkgs.gitAndTools;
+  };
+
+  jobs = mapTestOn {
+    haskellPackages = packagePlatforms pkgs.haskellPackages;
+    haskell.compiler = packagePlatforms pkgs.haskell.compiler;
+
+    tests.haskell = packagePlatforms pkgs.tests.haskell;
+
+    # top-level haskell packages
+    inherit (pkgsPlatforms)
+      bench
+      cabal-install
+      cabal2nix
+      cachix
+      darcs
+      dhall
+      dhall-bash
+      dhall-docs
+      dhall-lsp-server
+      dhall-json
+      dhall-nix
+      dhall-text
+      elm2nix
+      fffuu
+      futhark
+      glirc
+      hadolint
+      haskell-ci
+      haskell-language-server
+      hasura-graphql-engine
+      hinit
+      hledger
+      hledger-iadd
+      hledger-interest
+      hledger-ui
+      hledger-web
+      hlint
+      hpack
+      icepeak
+      koka
+      krank
+      madlang
+      matterhorn
+      neuron-notes
+      niv
+      nix-delegate
+      nix-deploy
+      nix-diff
+      nix-linter
+      nix-output-monitor
+      nix-tree
+      nixfmt
+      pandoc
+      place-cursor-at
+      shake
+      shellcheck
+      spacecookie
+      splot
+      stack
+      stack2nix
+      stutter
+      stylish-haskell
+      taskell
+      tweet-hs
+      update-nix-fetchgit
+      uuagc
+      wstunnel
+      ;
+
+    gitAndTools.git-annex = pkgsPlatforms.gitAndTools.git-annex;
+  } // versionedCompilerJobs {
+    # Packages which should be checked on more than the
+    # default GHC version. This list can be used to test
+    # the state of the package set with newer compilers
+    # and to confirm that critical packages for the
+    # package sets (like Cabal, jailbreak-cabal) are
+    # working as expected.
+    cabal-install = all;
+    Cabal_3_4_0_0 = with compilerNames; [ ghc884 ghc8104 ];
+    funcmp = all;
+    haskell-language-server = all;
+    hoogle = all;
+    hsdns = all;
+    jailbreak-cabal = all;
+    language-nix = all;
+    nix-paths = all;
+    titlecase = all;
+  } // {
+    mergeable = pkgs.releaseTools.aggregate {
+      name = "haskell-updates-mergeable";
+      meta = {
+        description = ''
+          Critical haskell packages that should work at all times,
+          serves as minimum requirement for an update merge
+        '';
+        maintainers = lib.teams.haskell.members;
+      };
+      constituents = accumulateDerivations [
+        # haskell specific tests
+        jobs.tests.haskell
+        # important top-level packages
+        jobs.cabal-install
+        jobs.cabal2nix
+        jobs.cachix
+        jobs.darcs
+        jobs.haskell-language-server
+        jobs.hledger
+        jobs.hledger-ui
+        jobs.hpack
+        jobs.niv
+        jobs.pandoc
+        jobs.stack
+        jobs.stylish-haskell
+        # important haskell (library) packages
+        jobs.haskellPackages.cabal-plan
+        jobs.haskellPackages.distribution-nixpkgs
+        jobs.haskellPackages.hackage-db
+        jobs.haskellPackages.policeman
+        jobs.haskellPackages.xmonad
+        jobs.haskellPackages.xmonad-contrib
+        # haskell packages maintained by @peti
+        # imported from the old hydra jobset
+        jobs.haskellPackages.hopenssl
+        jobs.haskellPackages.hsemail
+        jobs.haskellPackages.hsyslog
+      ];
+    };
+  };
+
+in jobs