hackager: Hackage testing tool

[ bsd3, compiler, ghc, program, testing ] [ Propose Tags ]

Hackager is a program for compiling the entirety of Hackage as a way of testing a Haskell compiler.

[Skip to Readme]
Versions [faq], 1.0.0, 1.0.1,,,,
Dependencies base (>=2 && <5), Cabal, containers, directory, filepath, mtl, process [details]
License BSD-3-Clause
Author The GHC Team, David Terei <code@davidterei.com>
Maintainer David Terei <code@davidterei.com>
Category Compiler, GHC, Testing
Home page https://github.com/dterei/Hackager
Bug tracker https://github.com/dterei/Hackager/issues
Source repo head: git clone git://github.com/dterei/Hackager.git
Uploaded by DavidTerei at Tue May 19 00:17:22 UTC 2015
Distributions NixOS:
Executables hackager
Downloads 3718 total (249 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs not available [build log]
Last success reported on 2016-12-09 [all 6 reports]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for hackager-

[back to package description]

Hackager Hackage version Build Status

Hackager is a tool to compile all of the Haskell Hackage package repository. This is useful for testing Haskell compilers.


Hackager consists of one tool that supports multiple commands.

''hackager'' is invoked with the following options:

$ usage: hackager [--version] [--help] <command> [<args>]

The valid hackager commands are:
    record    Try building all of hackage and record results
    report    Compare two 'record' runs and display results

See 'hackager help <command>' for more information on a specific command

''hackager record'' has the following options:

usage: hackager record -o NAME [-c CABAL] [-g GHC] [-p GHC-PKG] [-d DEP-FLAGS]
                      [-f PKG-FLAGS] [-n THREADS] [PKGS...]

    NAME         A name by which the results of this hackager run will
                 be referred, e.g. \"ghc-7.6.1\"
    CABAL        The path to the cabal program to use
    GHC          The path to the ghc program to use
    GHC-PKG      The path to the ghc-pkg program to use
    DEP-FLAGS    The flags to use when compiling dependencies of a package
                 e.g. \"--ghc-option=-XFoo\"
    PKG-FLAGS    The flags to use when compiling a package
                 e.g. \"--ghc-option=-XBar\"
    THREADS      Number of threads to use to build in parallel
    PKGS         A list of packages to build. If not specified all of
                 hackage is built

For example, here is a run with GHC, no special options and using 4 threads (note that this generally takes a long time, i.e. a few days):

$ hackager record -o normal -n 4

Then another run, this time using ''-XAlternativeLayoutRule'' to compile each package (but not the build dependencies of the package):

$ hackager record -o altern -f "--ghc-option=-XAlternativeLayoutRule" -n 4

And finally a comparison of the results:

$ hackager report normal altern

                         Buildable Build failed Deps failed Not tried
altern Buildable          628            0           0         0
       Build failed        73          215           0         0
       Deps failed          0            0         170         0
       Not tried            0            0           0         0

These results mean that 73 packages became unbuildable when the alternative layout rule is used.


Hackager can cause arbitrary code to run on your machine. For example:

  • TemplateHaskell is run at compile time and can execute arbitrary code
  • Package configure scripts will be run
  • Custom Setup.hs programs will be run

Get involved!

We are happy to receive bug reports, fixes, documentation enhancements, and other improvements.

Please report bugs via the github issue tracker.

Master git repository:

  • git clone git://github.com/dterei/Hackager.git


This library is BSD-licensed.