about summary refs log tree commit diff
path: root/nixpkgs/pkgs/top-level/release-haskell.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/top-level/release-haskell.nix')
-rw-r--r--nixpkgs/pkgs/top-level/release-haskell.nix313
1 files changed, 313 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/top-level/release-haskell.nix b/nixpkgs/pkgs/top-level/release-haskell.nix
new file mode 100644
index 000000000000..36a5835c9cd0
--- /dev/null
+++ b/nixpkgs/pkgs/top-level/release-haskell.nix
@@ -0,0 +1,313 @@
+/*
+  This is the Hydra jobset for the `haskell-updates` branch in Nixpkgs.
+  You can see the status of this jobset at
+  https://hydra.nixos.org/jobset/nixpkgs/haskell-updates.
+
+  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" "x86_64-darwin" "aarch64-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;
+
+  # names of packages in an attribute set that are maintained
+  maintainedPkgNames = set: builtins.attrNames
+    (lib.filterAttrs (
+      _: v: builtins.length (v.meta.maintainers or []) > 0
+    ) set);
+
+  recursiveUpdateMany = builtins.foldl' lib.recursiveUpdate {};
+
+  staticHaskellPackagesPlatforms =
+    packagePlatforms pkgs.pkgsStatic.haskellPackages;
+
+  jobs = recursiveUpdateMany [
+    (mapTestOn {
+      haskellPackages = packagePlatforms pkgs.haskellPackages;
+      haskell.compiler = packagePlatforms pkgs.haskell.compiler;
+
+      tests = let
+        testPlatforms = packagePlatforms pkgs.tests;
+      in {
+        haskell = testPlatforms.haskell;
+        writers = testPlatforms.writers;
+      };
+
+      # test some statically linked packages to catch regressions
+      # and get some cache going for static compilation with GHC
+      pkgsStatic.haskellPackages = {
+        inherit (staticHaskellPackagesPlatforms)
+          hello
+          random
+          lens
+          ;
+      };
+
+      # top-level packages that depend on haskellPackages
+      inherit (pkgsPlatforms)
+        agda
+        arion
+        bench
+        bustle
+        blucontrol
+        cabal-install
+        cabal2nix
+        cachix
+        carp
+        cedille
+        client-ip-echo
+        darcs
+        dconf2nix
+        dhall
+        dhall-bash
+        dhall-docs
+        dhall-lsp-server
+        dhall-json
+        dhall-nix
+        dhall-text
+        diagrams-builder
+        elm2nix
+        fffuu
+        futhark
+        ghcid
+        git-annex
+        git-brunch
+        gitit
+        glirc
+        hadolint
+        haskell-ci
+        haskell-language-server
+        hasura-graphql-engine
+        hci
+        hercules-ci-agent
+        hinit
+        hedgewars
+        hledger
+        hledger-iadd
+        hledger-interest
+        hledger-ui
+        hledger-web
+        hlint
+        hpack
+        hyper-haskell
+        hyper-haskell-server-with-packages
+        icepeak
+        idris
+        ihaskell
+        jl
+        koka
+        krank
+        lambdabot
+        madlang
+        matterhorn
+        mueval
+        neuron-notes
+        niv
+        nix-delegate
+        nix-deploy
+        nix-diff
+        nix-linter
+        nix-output-monitor
+        nix-script
+        nix-tree
+        nixfmt
+        nota
+        nvfetcher
+        ormolu
+        pandoc
+        pakcs
+        petrinizer
+        place-cursor-at
+        pinboard-notes-backup
+        pretty-simple
+        shake
+        shellcheck
+        sourceAndTags
+        spacecookie
+        spago
+        splot
+        stack
+        stack2nix
+        stutter
+        stylish-haskell
+        taffybar
+        tamarin-prover
+        taskell
+        termonad-with-packages
+        tldr-hs
+        tweet-hs
+        update-nix-fetchgit
+        uusi
+        uqm
+        uuagc
+        vaultenv
+        wstunnel
+        xmobar
+        xmonad-with-packages
+        yi
+        zsh-git-prompt
+        ;
+
+      elmPackages.elm = pkgsPlatforms.elmPackages.elm;
+    })
+    (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;
+      # Doesn't currently work on ghc-9.0:
+      # https://github.com/haskell/haskell-language-server/issues/297
+      haskell-language-server = with compilerNames; [ ghc884 ghc8104 ];
+      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
+          # writeHaskell and writeHaskellBin
+          # TODO: writeHaskell currently fails on darwin
+          jobs.tests.writers.x86_64-linux
+          jobs.tests.writers.aarch64-linux
+          # 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
+        ];
+      };
+      maintained = pkgs.releaseTools.aggregate {
+        name = "maintained-haskell-packages";
+        meta = {
+          description = "Aggregate jobset of all haskell packages with a maintainer";
+          maintainers = lib.teams.haskell.members;
+        };
+        constituents = accumulateDerivations
+          (builtins.map
+            (name: jobs.haskellPackages."${name}")
+            (maintainedPkgNames pkgs.haskellPackages));
+      };
+      staticHaskellPackages = pkgs.releaseTools.aggregate {
+        name = "static-haskell-packages";
+        meta = {
+          description = "Static haskell builds using the pkgsStatic infrastructure";
+          maintainers = [
+            lib.maintainers.sternenseemann
+            lib.maintainers.rnhmjoj
+          ];
+        };
+        constituents = [
+          # TODO: reenable darwin builds if static libiconv works
+          jobs.pkgsStatic.haskellPackages.hello.x86_64-linux
+          jobs.pkgsStatic.haskellPackages.hello.aarch64-linux
+          jobs.pkgsStatic.haskellPackages.lens.x86_64-linux
+          jobs.pkgsStatic.haskellPackages.lens.aarch64-linux
+          jobs.pkgsStatic.haskellPackages.random.x86_64-linux
+          jobs.pkgsStatic.haskellPackages.random.aarch64-linux
+        ];
+      };
+    }
+  ];
+
+in jobs