nixpkgs/pkgs/top-level/release-haskell.nix

219 lines
5.6 KiB
Nix

/*
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;
};
# 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);
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
];
};
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));
};
};
in jobs