diff --git a/.gitignore b/.gitignore index 0f9f8e70..d1d732e8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ nightly-*.yaml lts-*.yaml *.swp +check-plan.yaml diff --git a/.travis.yml b/.travis.yml index 70421914..6df6863c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,40 @@ -env: - - CABALVER=1.22 GHCVER=7.10.1 +# Use new container infrastructure to enable caching +sudo: false -# Note: the distinction between `before_install` and `install` is not important. -before_install: - - travis_retry sudo add-apt-repository -y ppa:hvr/ghc - - travis_retry sudo apt-get update - - travis_retry sudo apt-get install cabal-install-$CABALVER ghc-$GHCVER # see note about happy/alex - - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH +# Choose a lightweight base image; we provide our own build tools. +language: generic + +# GHC depends on GMP. You can add other dependencies here as well. +addons: + apt: + packages: + - libgmp-dev + +env: +- GHCVER=8.0.1 install: - - cabal --version - - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]" - - travis_retry cabal update + # Download and unpack the stack executable + - mkdir -p ~/.local/bin + - export PATH=$HOME/.local/bin:$PATH + - travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack' + + # Get stackage-curator - wget https://s3.amazonaws.com/stackage-travis/stackage-curator/stackage-curator.bz2 - bunzip2 stackage-curator.bz2 - chmod +x stackage-curator + - mv stackage-curator ~/.local/bin + + # Install GHC and cabal-install + - stack setup $GHCVER + + # Update the index + - travis_retry stack update -# Here starts the actual work to be performed for the package under test; any command which exits with a non-zero exit code causes the build to fail. script: - - ./stackage-curator check + - stack --resolver ghc-$GHCVER exec stackage-curator check + +cache: + directories: + - $HOME/.stack + - $HOME/.stackage/curator/cache diff --git a/CURATORS.md b/CURATORS.md new file mode 100644 index 00000000..6579ee8b --- /dev/null +++ b/CURATORS.md @@ -0,0 +1,339 @@ +This is a collection of instructions covering the processes that the Stackage curators - the +guys who maintain the Stackage project itself - should be doing on a regular basis. +Originally this was handled largely by Michael Snoyman, +but now we are a team of 4 people handling requests weekly in rotation. +Curation activities are mostly automated, and do not take up a significant amount of time. + +## Workflow overview + +This section sketches out at a high level how the entire Stackage build/curation +process works: + +* [build-constraints.yaml](https://github.com/fpco/stackage/blob/master/build-constraints.yaml) specifies packages to be included in Stackage +* [stackage-curator](http://www.stackage.org/package/stackage-curator) combines build-constraints.yaml with the current state of Hackage to create a build plan for a Stackage Nightly +* stackage-curator can check that build plan to ensure all version bounds are consistent + * The [Travis job](https://github.com/fpco/stackage/blob/master/.travis.yml) performs these two steps to provide immediate feedback on pull requests +* Docker Hub [builds](https://github.com/fpco/stackage/blob/master/Dockerfile) a [Docker image](https://registry.hub.docker.com/u/snoyberg/stackage/) for running builds +* The stackage-build server (described below) is able to run automated builds using the [build.sh script](https://github.com/fpco/stackage/blob/master/automated/build.sh) +* When a new Nightly build is completed, it is uploaded to [the nightly repo](https://github.com/fpco/stackage-nightly) +* Once a week, we run an LTS minor bump. Instead of using build-constraints.yaml, that job takes the previous LTS release, turns it into constraints, and then bumps the version numbers to the latest on Hackage, in accordance with the version bounds in the build plan. This plans are uploaded to [the LTS repo](https://github.com/fpco/lts-haskell) +* Cutting a new LTS major release is essentially just a Stackage Nightly that gets rebuilt and uploaded as an LTS + +## Pull requests + +The typical story on pull requests is: If Travis accepts it and the +author only added packages under his/her own name, merge it. If the +build later fails (see "Adding Debian packages for required system tools or libraries"), +then block the package until it's fixed. + +If benchmarks, haddocks, or test suites fails at this point we +typically also block the package until these issues are fixed. This in +order to add packages with a clean slate. + +Optionally we can check if packdeps says the package is up to date. +Visit http://packdeps.haskellers.com/feed?needle= + +Builds may fail because of unrelated bounds changes. If this happens, +first add any version bounds to get master into a passing state (see +"Fixing bounds issues"), then re-run the travis build. + +A common issue is that authors submit newly uploaded packages, it can +take up to an hour before this has synced across the stack +infrastructure. You can usually compare the versions of the package in +https://github.com/commercialhaskell/all-cabal-metadata/tree/master/packages/ +to what's on hackage to see if this is the case. Wait an hour and +re-run the pull request. + +Tests also commonly fail due to missing test files, and sometimes due +to doctest limitations. You can point the maintainer to +https://github.com/bergmark/blog/blob/master/2016/package-faq.md + +## Fixing bounds issues + +The most common activity you'll deal with in Stackage curation is a version +bound issue, usually a restrictive upper bound. You fix this by opening an +issue on the Stackage repo about the problem, and modifying the +build-constraints.yaml file to work around it in one of the ways below. Be sure +to refer to the issue for workarounds added to that file. + +### Temporary upper bounds + +Most common technique, just prevent a new version of a library from +being included immediately. This also applies to when only benchmarks +and tests are affected. + +* Copy the stackage-curator output and create a new issue, see e.g +https://github.com/fpco/stackage/issues/2108 + +* Add a new entry under the "stackage upper bounds" section of `build-constraints.yaml`. For the above example it would be + +```yaml + "Stackage upper bounds": + # https://github.com/fpco/stackage/issues/2108 + - pipes < 4.3.0 +``` + +* Commit (message e.g. "Upper bound for #2108") +* Optionally: Verify with `stackage-curator check` locally +* Push +* Verify that everything works on the build server (you can restart the build or wait for it to to run again) + +Sometimes releases for different packages are tightly coupled. Then it +can make sense to combine them into one issue, as in +https://github.com/fpco/stackage/issues/2143. + +If a dependency that is not explicitly in stackage is causing test or +benchmark failures you can skip or expect them to fail (see "Skipping +tests and benchmarks" and "Expecting test/benchmark/haddock +failures"). Bonus points for reporting this upstream to that packages' +maintainer. + +### Lifting upper bounds + +You can try this when you notice that a package has been updated. You +can also periodically try to lift bounds (I think it's good to do this +at the start of your week /@bergmark) + +If not all packages have been updated check if any of them are missing +from the original issue and if so add a new comment mentioning them. A +new package may appear if its dependencies were part of this issue but +have been updated since the last time we checked. We want to give +these new packages ample time to be upgraded. + +If stackage-curator is happy commit the change ("Remove upper bounds +and close #X"). After doing this the next nightly build may fail +because some packages didn't have an upper bound in place, but +compilation failed. In this case revert the previous commit so any +disabled packages are enabled again, re-open the issue, and add a new +comment with the failing packages. This is to give all maintainers +enough time to upgrade for this case as well. + +### Amending upper bounds + +With the `pipes` example above there was later a new release of +`pipes-safe` that required the **newer** version of `pipes`. You can +add that package to the same upper bounds section, +(e.g. https://github.com/fpco/stackage/commit/6429b1eb14db3f2a0779813ef2927085fa4ad673) +as we want to lift them simultaneously. + +### Skipping tests and benchmarks + +Sometimes tests and benchmark dependencies are forgotten or not cared +for. To disable compilation for them add them to `skipped-tests` or +`skipped-benchmarks`. If a package is added to these sections they +won't be compiled, and their dependencies won't be taken into account. + +There are sub sections under these headers that is used to group types +of failures together, and also to document what type of failures +exist. + +### Expecting test/benchmark/haddock failures + +The difference from the `skipped` sections is that items listed here +are compiled and their dependencies are taken into account. These +sections also have sub sections with groups and descriptions. + +One big category of test suites in this section are those requiring +running services. We don't want to run those, but we do want to check +dependencies and compile them. + +If there are no version bounds that would fix the issue or if you +can't figure it out, file it +(e.g. https://github.com/fpco/stackage/issues/2133) to ask the +maintainer for help. + +### Waiting for new releases + +Sometimes there is a failure reported on a (now possibly closed) issue +on an external tracker. If an issue gets resolved but there is no +hackage release yet we'd like to get notified when it's uploaded. + +Add the package with its current version to the +`tell-me-when-its-released` section. This will cause the build to stop +when the new version is out. + +### Excluding packages + +In an extreme case of a non-responsive maintainer, you can remove the +package entirely from Stackage. We try to avoid that whenever +possible. + +This typically happens when we move to a new major GHC release or when +there are only a few packages waiting for updates on an upper bounds +issue. + +Comment out the offending packages from the "packages" section and add +a comment saying why it was disabled: + +``` + # - swagger # bounds: aeson 1.0 +``` + +If this causes reverse dependencies to be disabled we should notify +the maintainers of those packages. + + +## Updating the content of the Docker image used for building + +### Adding Debian packages for required system tools or libraries +Additional (non-Haskell) system libraries or tools should be added to `stackage/debian-bootstrap.sh`. +Committing the changes to a branch should trigger a DockerHub. Normally only the `nightly` branch needs to be updated +since new packages are not added to the current lts release. + +Use [Ubuntu Package content search](http://packages.ubuntu.com/) to determine which package provides particular dev files (it defaults to xenial which is the version used to build Nightly). + +Note that we generally don't install/run services needed for testsuites in the docker images - packages with tests requiring some system service can be added to `expected-test-failures`. +It's good to inform the maintainer of any disabled tests (commenting in the PR is sufficient). + +If a new package fails to build because of missing system libraries we often ask the maintainer to help figure out what to install. + +### Upgrading GHC version +The Dockerfile contains information on which GHC versions should be used. You +can modify it and push it to Github to trigger a DockerHub build. The nightly +branch is used for nightlies. For LTSes, we use the ltsX branch, where X is the +major version number (e.g., lts3 for lts-3.\*). + +Note that when starting a new LTS major release, you'll need to modify Docker +Hub to create a new Docker tag for the relevant branch name. + +### Getting the new image to the build server +Once a new Docker image is available, you'll need to pull it onto the stackage-build server (see +below). Instead of pulling an unbounded number of images, I typically just +delete all of the old images and let the new ones get downloaded: + +``` +docker rm $(docker ps -a -q) +docker rmi $(docker images -q) +``` + +but `docker pull snoyberg/stackage:nightly` can also be run instead just to update the nightly image say. + +For a new GHC version you should also delete the cache directories on the stackage-build server to +force all packages to be rebuilt. See: [issue#746](https://github.com/fpco/stackage/issues/746). Eg: +``` +rm -r nightly/work/builds/nightly/ +``` +This should also be done when moving the Nightly docker image to a new version of Ubuntu. + +## stackage-build server + +You'll need to get your SSH public key added to the machine. ~/.ssh/config info: + +``` +Host stackage-build + User curators + Hostname build.stackage.org +``` + +### Running the build script + +We currently run the builds manually so make it easy to see when there are +bounds issues that need to be corrected. Automated this would be even better, +we're just not there yet. + +``` +# Run a nightly build +/opt/stackage-build/stackage/automated/run-nightly.sh + +# Run an LTS minor bump +/opt/stackage-build/stackage/automated/build.sh lts-2.17 + +# Run an LTS major bump +/opt/stackage-build/stackage/automated/build.sh lts-3.0 +``` + +Recommended: run these from inside a `tmux` session. If you get version bound +problems on nightly or LTS major, you need to fix build-constraints.yaml (see +info above). For an LTS minor bump, you'll typically want to use the +`CONSTRAINTS` environment variable, e.g.: + +``` +CONSTRAINTS='--constraint "conduit < 1.4.5" --constraint "criterion < 1.2.3"' /opt/stackage-build/stackage/automated/build.sh lts-2.17 +``` + +Valid arguments to include in this environment variable: + +* `--constraint` to modify an upper or lower bound +* `--add-package` to add a brand new package +* `--expect-test-failure` to expect tests to fail +* `--expect-haddock-failure` to expect haddocks to fail + +If a build fails for bounds reasons, see all of the advice above. If the code +itself doesn't build, or tests fail, open up an issue and then either put in a +version bound to avoid that version or something else. It's difficult to give +universal advice on how to solve things, since each situation is unique. Let's +develop this advice over time. For now: if you're not sure, ask for guidance. + +__`NOPLAN=1`__ If you wish to rerun a build without recalculating a +build plan, you can set the environment variable `NOPLAN=1`. This is +useful for such cases as an intermittent test failure, out of memory +condition, or manually tweaking the plan file. This is the default for +LTS builds. + +### Timing + +A looping script on the build server keeps trying to build nightly +with `sleep 30m` interleaved. It only publishes the nightly once per +day. This way new package versions or build failures can be caught +early and hopefully the nightlies will be timely. + +LTS minor bumps typically are run on Sundays. + +### Website sync debugging (and other out of disk space errors) + +* You can detect the problem by running `df`. If you see that `/` is out of space, we have a problem +* (outdated) There are many temp files inside `/home/ubuntu/stackage-server-cron` that can be cleared out occasionally +* (outdated) You can then manually run `/home/ubuntu/stackage-server-cron.sh`, or wait for the cron job to do it + +### Wiping the cache + +Sometimes the cache can get corrupted which might manifest as `can't load .so/.DLL`. +You can wipe the nightly cache and rebuild everything by doing +`rm -rf /var/stackage/stackage/automated/nightly`. +Replace nightly with `lts7` to wipe the LTS 7 cache. + +### Force a single package rebuild + +You can force a single package to rebuild by deleting its "previous result" +file, e.g.: + +``` +$ rm /var/stackage/stackage/automated/nightly/work/builds/nightly/prevres/Build/cryptohash-0.11.9 +``` + +## Local curator setup + +We do not run the full stackage build locally as that might take too +much time. However, some steps on the other hand are much faster to do +yourself, e.g. verifying constraints without building anything. + +To get started, install `stackage-curator` via Git, or [the Linux binary]: + +``` +$ git clone git@github.com:fpco/stackage-curator.git +$ cd stackage-curator && stack install +``` + +It is a good idea to upgrade `stackage-curator` at the start of your week. +Then, clone the stackage repo, get the latest packages and run dependency +resolution: + +``` +$ git clone git@github.com:fpco/stackage.git +$ stack update && stackage-curator check +``` + +This can be used to make sure all version bounds are in place, including for +test suites and benchmarks, to check whether bounds can be lifted, and to get +[tell-me-when-its-released] notifications. + +`stackage-curator` does not build anything, so you wont see any compilation +errors for builds, tests and benchmarks. + +[the Linux binary]: https://s3.amazonaws.com/stackage-travis/stackage-curator/stackage-curator.bz2 +[tell-me-when-its-released]: https://github.com/fpco/stackage/blob/master/CURATORS.md#waiting-for-new-releases + +## Adding new curators + +1. Add public ssh key to `~/.ssh/authorized_keys` on build server +2. Add to fpco/stackage project. diff --git a/DATA-FLOW.md b/DATA-FLOW.md new file mode 100644 index 00000000..2cd30637 --- /dev/null +++ b/DATA-FLOW.md @@ -0,0 +1,129 @@ +# The Stackage data flow + +The Stackage project is really built on top of a number of different +subcomponents. This page covers how they fit together. The Stackage data flow +diagram gives a good bird's-eye view: + +![Stackage data flow diagram](https://cloud.githubusercontent.com/assets/49415/14490986/cad5274e-017e-11e6-85cc-a4d815175c61.png) + +## Inputs + +There are three inputs into the data flow: + +* [Hackage](http://hackage.haskell.org/) is the upstream repository of all + available open source Haskell packages that are part of our ecosystem. + Hackage provides both cabal file metadata (via the 00-index.tar file) and + tarballs of the individual packages. + +* [build-constraints.yaml](https://github.com/fpco/stackage/blob/master/build-constraints.yaml) + is the primary Stackage input file. This is where package maintainers can add + packages to the Stackage package set. This also defines upper bounds, skipped + tests, and a few other pieces of metadata. + +* [stackage-content](https://github.com/fpco/stackage-content) is a Github + repository containing static file content served from stackage.org + +## Travis + +For [various +reasons](https://www.fpcomplete.com/blog/2015/05/distributing-packages-without-sysadmin), +we leverage Travis CI for running some processes. In particular: + +* [all-cabal-files](https://github.com/commercialhaskell/all-cabal-files/blob/hackage/.travis.yml) + clones all cabal files from Hackage's 00-index.tar file into a Git repository + without any modification + +* [all-cabal-hashes](https://github.com/commercialhaskell/all-cabal-hashes/blob/hackage/.travis.yml) + is mostly the same, but also includes cryptographic hashes of the package + tarballs for more secure download (as leveraged by + [Stack](http://haskellstack.com). It is powered by [all-cabal-hashes-tool](https://github.com/commercialhaskell/all-cabal-hashes-tool) + +* [all-cabal-packages](https://github.com/commercialhaskell/all-cabal-packages) + uses [hackage-mirror](http://github.com/fpco/hackage-mirror) to populate the + hackage.fpcomplete.com mirror of Hackage, which provides S3-backed high + availability hosting of all package tarballs + +* [all-cabal-metadata](https://github.com/commercialhaskell/all-cabal-metadata) + uses + [all-cabal-metadata-tool](https://github.com/commercialhaskell/all-cabal-metadata-tool) + to query extra metadata from Hackage about packages and put them into YAML + files. As we'll see later, this avoids the need to make a lot of costly calls + to Hackage APIs + +Travis does not currently provide a means of running jobs on a regular basis. +Therefore, we have a simple cron job on the Stackage build server that triggers +each of the above builds every 30 minutes. + +## stackage-curator + +The heart of running Stackage builds is the +[stackage-curator](https://github.com/fpco/stackage-curator) tool. We run this +on a daily basis on the Stackage build server for Stackage Nightly, and on a +weekly basis for LTS Haskell. The build process is [highly +automated](https://github.com/fpco/stackage/blob/master/automated/build.sh) and +leverages Docker quite a bit. + +stackage-curator needs to know about the most recent versions of all packages, +their tarball contents, and some metadata, all of which it gets from the +Travis-generated sources mentioned in the previous section. In addition, it +needs to know about build constraints, which can come from one of two places: + +* When doing an LTS Haskell minor version bump (e.g., building lts-5.13), it + grabs the previous version (e.g., lts-5.12) and converts the previous package + set into constraints. For example, if lts-5.12 contains the package foo-5.6.7, + this will be converted into the constraint `foo >= 5.6.7 && < 5.7`. +* When doing a Stackage Nightly build or LTS Haskell major version bump (e.g., + building lts-6.0), it grabs the latest version of the build-constraints.yaml + file. + +By combining these constraints with the current package data, stackage-curator +can generate a build plan and check it. (As an aside, this build plan +generation and checking also occurs every time you make a pull request to the +stackage repo.) If there are version bounds problems, one of the [Stackage +curators](https://github.com/fpco/stackage/blob/master/CURATORS.md) will open +up a Github issue and will add upper bounds, temporarily block a package, or +some other corrective action. + +Once a valid build plan is found, stackage-curator will build all packages, +build docs, and run test suites. Assuming that all succeeds, it generates some +artifacts: + +* Uploads the build plan as a YAML file to either + [stackage-nightly](https://github.com/fpco/stackage-nightly) or + [lts-haskell](https://github.com/fpco/lts-haskell) +* Uploads the generated Haddock docs and a package index (containing all used + .cabal files) to haddock.stackage.org. + +## stackage-server-cron + +On the Stackage build server, we run the [stackage-server-cron +executable](https://github.com/fpco/stackage-server/blob/master/app/stackage-server-cron.hs) +regularly, which generates: + +* A [SQLite + database](https://github.com/fpco/stackage-server/blob/master/Stackage/Database.hs) + containing information on snapshots, the packages they contain, Hackage + metadata about packages, and a bit more. This database is uploaded to S3. +* A Hoogle database for each snapshot, which is also uploaded to S3 + +## stackage-server + +The [software running stackage.org](https://github.com/fpco/stackage-server) is +a relatively simple Yesod web application. It pulls data from the +stackage-content repo, the SQLite database, the Hoogle databases, and the build +plans for Stackage Nightly and LTS Haskell. It doesn't generate anything +important of its own except for a user interface. + +## Stack + +[Stack](http://haskellstack.com) takes advantage of many of the pieces listed above as well: + +* It by default uses the all-cabal-hashes repo for getting package metadata, + and downloads package contents from the hackage.fpcomplete.com mirror (using + the hashes in the repo for verification) +* There are some metadata files in stackage-content which contain information + on, for example, where to download GHC tarballs from to make `stack setup` + work +* Stack downloads the raw build plans for Stackage Nightly and LTS Haskell from + the Github repo and uses them when deciding which packages to build for a + given stack.yaml file diff --git a/Dockerfile b/Dockerfile index 1b7d3066..e29818c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,8 @@ -FROM ubuntu:14.04 +FROM fpco/pid1:16.04 ENV HOME /home/stackage ENV LANG en_US.UTF-8 - -RUN mkdir /home/stackage -p -RUN locale-gen en_US.UTF-8 - -RUN DEBIAN_FRONTEND=noninteractive apt-get update -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common python-software-properties git -RUN DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:hvr/ghc -y +ENV PATH /opt/ghc/8.0.1/bin:/usr/sbin:/usr/bin:/sbin:/bin ADD debian-bootstrap.sh /tmp/debian-bootstrap.sh -RUN DEBIAN_FRONTEND=noninteractive bash /tmp/debian-bootstrap.sh -RUN rm /tmp/debian-bootstrap.sh - -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y cabal-install-1.22 ghc-7.10.1 ghc-7.10.1-htmldocs alex-3.1.3 happy-1.19.4 sudo - -ENV PATH /home/stackage/.cabal/bin:/usr/local/sbin:/usr/local/bin:/opt/ghc/7.10.1/bin:/opt/cabal/1.22/bin:/opt/alex/3.1.3/bin:/opt/happy/1.19.4/bin:/usr/sbin:/usr/bin:/sbin:/bin - -RUN cabal update -RUN cabal install hscolour cabal-install && cp $HOME/.cabal/bin/* /usr/local/bin && rm -rf $HOME/.cabal $HOME/.ghc /tmp/stackage -RUN wget https://s3.amazonaws.com/stackage-travis/stackage-curator/stackage-curator.bz2 && bunzip2 stackage-curator.bz2 && chmod +x stackage-curator && mv stackage-curator /usr/local/bin +RUN /tmp/debian-bootstrap.sh && rm /tmp/debian-bootstrap.sh diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 00000000..d358ed12 --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,96 @@ +This project is built around the concept of maintainers taking responsibility for making their packages work with the rest of the stable ecosystem, usually meaning the newest version of all dependencies. This is a social contract, and is not reflected in the codebase in any way. + +The idea behind Stackage is that, if all packages work with the newest versions of dependencies, we avoid dependency hell. Specifically, we aim for: + +* All packages are buildable and testable from Hackage. We recommend [the Stack Travis script](http://docs.haskellstack.org/en/stable/GUIDE.html#travis-with-caching), which ensures a package is not accidentally incomplete. +* All packages are compatible with the newest versions of all dependencies (You can find restrictive upper bounds by visiting http://packdeps.haskellers.com/feed?needle=PACKAGENAME). +* All packages in a snapshot are compatible with the versions of libraries that ship with the GHC used in the snapshot ([more information on lenient lower bounds](https://www.fpcomplete.com/blog/2014/05/lenient-lower-bounds)). + +## Adding a package + +Anyone can add any package to Stackage but you may only add packages under your own name. It's highly encouraged that the actual package maintainer is also the Stackage maintainer, if that is not the case you should drop the package maintainer a note first. + +To add your package, first fork this repository. +In the [`build-constraints.yaml`](https://github.com/fpco/stackage/blob/master/build-constraints.yaml) file, there's a section called `packages`. +To add a set of packages, you would add: + + "My Name myemail@example.com @mygithubuser": + - package1 + - package2 + - package3 + +After doing that, send a pull request (with a commit message like "add foo-bar"). We do not require new submissions to be tested against the rest of Stackage before the pull request (though it is a good idea to do so if you can with `stack --resolver nightly exec stackage-curator check` and `stack --resolver nightly build`), provided you meet the dependency version requirements above. If your library depends on a C library, add a note to your pull request with the Ubuntu library name, or even better edit the `debian-bootstrap.sh` script directly + +If you want to make sure that the package builds against the newest versions of all dependecies you can do this: +``` +$ cabal update +$ ghc --version # Should give v8.0.1 +$ cabal get PACKAGE-VERSION # e.g. aeson-0.11.2.1 +$ cd PACKAGE-VERSION +$ cabal sandbox init # Should give "Creating a new sandbox" and not "Using an existing sandbox". +$ cabal install --enable-tests --enable-benchmarks --dry-run | grep latest # Should give no results +$ cabal install --enable-tests --enable-benchmarks --allow-newer +$ cabal test +``` + +**NB** Please use commit messages like "add foo-bar" or "add johndev's packages" +(`build-constraints.yaml` is the most frequently changed file in this git repo +so commit messages like "update build-constraints.yaml" are not helpful). + +**NB2** There can be a delay of up to an hour before package versions +newly uploaded to Hackage appear to our build server. If you just +uploaded a package to Hackage that you're trying to get included, we +recommend waiting an hour before opening the PR. You can verify this +by making sure the latest version is listed at +https://github.com/commercialhaskell/all-cabal-metadata/tree/master/packages/. + +## Uploading a new package + +When a new version of a package is uploaded to Hackage, we automatically try to include it in Stackage (unless the new version is considered experimental). That can result in a number of possible failures. If there is a failure we temporarily introduce an upper bound, and raise GitHub issue tickets to resolve the issue. + +If the new version doesn't compile then the package author should quickly (within 1 week) upload a fixed version. + +If a package's test suite is failing, the first job is to investigate why. If this is due to a bad interaction with versions of other packages in Stackage, then it is the responsibility of the maintainer to fix the test suite. In some situations, it is acceptable to not run the test suite. + + +## Following dependency upgrades + +If a new version of a dependency is released, and that stops your package compiling/passing the tests, then it is your responsibility to modify your package. It is highly recommended that all package maintainers follow the dependencies of their packages on [Packdeps](http://packdeps.haskellers.com/), typically using the RSS feeds. + +**If restrictive version bounds are the only problem** then you must quickly (within 1 week) upload a new version with relaxed version bounds. Note that unlike the PVP, Stackage does not require upper bounds. + +**If the new dependency causes breaking changes** then all package authors should quickly assess the likely impact on their package (within 1 week) and then produce a new compatible version. The expected timeline for new versions varies between 1 week and 1 month, depending on the significance of the change, and thus the work required to produce those new versions. + + +## Failing to meet the time limits + +Maintainers are humans, humans get sick/have babies/go on holiday. If you have regular problems meeting the limits, find a co-maintainer. If you have a one-off problem, respond to the GitHub tickets saying so, and some kind soul might pick up the slack. + +The time limits are intended to stop people being inconvenienced because of problems in other packages. Where such inconvenience happens, we will drop the offending packages from Stackage. While upper bounds are sometimes a temporary solution, they are against the ethos of Stackage, so will not be kept for long. + +## Upgrading to a new GHC version + +The Stackage curation team tries to move Stackage Nightly to new versions of GHC quickly as they become available, while keeping LTS Haskell on a regular release schedule. For package maintainers, the most important impacts of a new GHC release are: + +* We will typically do a sweep through the Stackage upper bounds and aggressively remove packages that block them. This is because, in most cases, we will need to move to the newest versions of a package to get support for the latest GHC, and asking package maintainers to backport their fixes is an undue burden + * We will definitely do this at a GHC major version release, and may do so at a minor version release +* Packages that are incompatible with the newest GHC version will be temporarily blocked + +If your package ends up being temporarily removed from Stackage Nightly, please simply send a pull request to add it back once it and its dependencies are compatible with the newest GHC version. + +## Adding a package to an LTS snapshot + +The steps above affect the Stackage Nightly builds, but do not directly affect +LTS Haskell builds. When we build a new LTS Haskell major version (anything +ending in `.0`), the package set is taken from Stackage Nightly. Therefore, by +following the above steps, you can get your package into the next major LTS +Haskell release. + +If you would like to get your package added to an existing LTS Haskell major +release (e.g., if `lts-3.21` is out, you would want your package to appear in +`lts-3.22`), please do the following in addition to the steps above: + +* Open up a new issue on the [lts-haskell repo](https://github.com/fpco/lts-haskell/issues/new) +* Specify the LTS major version you would like your package to go into (e.g., lts-3) +* Provide a list of packages you would like added, and if relevant, any upper bounds on those packages +* Be patient! The LTS releases are by their nature more conservative than nightly, and therefore adding new packages is a more manual process. The Stackage curators will try to get to your issue quickly, but there may be some delay. diff --git a/README.md b/README.md index 5b15fd98..7fc1b93a 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,33 @@ stackage [![Build Status](https://travis-ci.org/fpco/stackage.svg?branch=master)](https://travis-ci.org/fpco/stackage) -"Stable Hackage," tools for creating a vetted set of packages from Hackage. +"Stable Hackage": creating a vetted set of packages from Hackage. +This repository is for package authors and maintainers to get their packages into Stackage. +If you simply want to use Stackage as an end user, please follow the instructions on [https://www.stackage.org/](https://www.stackage.org). -__NOTE__ This repository is for package authors to get their code into -Stackage. If you simply want to use Stackage as an end user, please follow the -instructions on [http://www.stackage.org/](http://www.stackage.org). +We strongly recommend using the Haskell tool stack for doing builds, which +includes built-in Stackage support: [stack](https://github.com/commercialhaskell/stack) [![Build Status](https://travis-ci.org/commercialhaskell/stack.svg?branch=master)](https://travis-ci.org/commercialhaskell/stack). + + +Add your package +---------------- + +We welcome all packages, provided: + +* The package author/maintainer agrees to the [maintainers agreement](https://github.com/fpco/stackage/blob/master/MAINTAINERS.md). +* The package is buildable and testable from Hackage. We recommend [the Stack Travis script](http://docs.haskellstack.org/en/stable/GUIDE.html#travis-with-caching), which ensures a package is not accidentally incomplete. +* The package is compatible with the newest versions of all dependencies (You can find restrictive upper bounds by visiting http://packdeps.haskellers.com/feed?needle=PACKAGENAME). +* The package is compatible with the versions of libraries that ship with GHC ([more information on lenient lower bounds](https://www.fpcomplete.com/blog/2014/05/lenient-lower-bounds)). + +Full details on how to add and test a package can be found in the [maintainers agreement](https://github.com/fpco/stackage/blob/master/MAINTAINERS.md#adding-a-package). + +__NOTE__: There is an approximate 30 minute delay between a package uploading +to Hackage and being available to the Travis build script to check upper +bounds. If a pull request is marked as failed due to using an older version, +please close and reopen the PR to retrigger a Travis build. + +Other repos +----------- The Stackage project consists of multiple repositories. This repository contains the metadata on packages to be included in future builds and some @@ -18,87 +40,30 @@ project information. In addition, we have the following repositories: * [stackage-types](https://github.com/fpco/stackage-types) [![Build Status](https://travis-ci.org/fpco/stackage-types.svg?branch=master)](https://travis-ci.org/fpco/stackage-types) * [lts-haskell](https://github.com/fpco/lts-haskell) * [stackage-nightly](https://github.com/fpco/stackage-nightly) + +We also support some add-on tools to cabal-install to make its usage with +Stackage both easier and more secure: + * [stackage-cli](https://github.com/fpco/stackage-cli) [![Build Status](https://travis-ci.org/fpco/stackage-cli.svg?branch=master)](https://travis-ci.org/fpco/stackage-cli) * [stackage-update](https://github.com/fpco/stackage-update) [![Build Status](https://travis-ci.org/fpco/stackage-update.svg?branch=master)](https://travis-ci.org/fpco/stackage-update) * [stackage-upload](https://github.com/fpco/stackage-upload) [![Build Status](https://travis-ci.org/fpco/stackage-upload.svg?branch=master)](https://travis-ci.org/fpco/stackage-upload) * [stackage-install](https://github.com/fpco/stackage-install) [![Build Status](https://travis-ci.org/fpco/stackage-install.svg?branch=master)](https://travis-ci.org/fpco/stackage-install) * [stackage-build-plan](https://github.com/fpco/stackage-build-plan) [![Build Status](https://travis-ci.org/fpco/stackage-build-plan.svg?branch=master)](https://travis-ci.org/fpco/stackage-build-plan) -Get your package included -------------------------- +Curious how it all fits together? See the [Stackage data +flow](https://github.com/fpco/stackage/blob/master/DATA-FLOW.md). -In order to get your package included in the set of stable packages, you should -send a pull request against this repository. In the [`build-constraints.yaml`](https://github.com/fpco/stackage/blob/master/build-constraints.yaml) file, -there's a section called `packages`. In general, to add a set of -packages, you would add: - - "My Name myemail@example.com @mygithubuser": - - package1 - - package2 - - package3 - -You can follow the examples of the other sets of packages in that function. -Once you've done this, you can send a pull request to get your package -included. - -__NOTE__: In order to ease the process of adding new packages, we no longer -require new submissions to be tested on your own system before sending a pull -request. If you believe your package works with the newest versions of all -dependencies, you may send a pull request without testing first. - -You should also read the [maintainers -agreement](https://github.com/fpco/stackage/wiki/Maintainers-Agreement). - -Package Author Guidelines -------------------------- - -There are some basic rules to get your package to play nice with Stackage. Here -are some quick guidelines to hopefully make this easier: - -* Make sure that your code is buildability and testable from Hackage. Often - times, authors test their builds locally, but the tarball that gets uploaded - to Hackage is missing some necessary files. The best way to do this is to - set up a Travis job to do it for you. We recommend the - [multi-ghc-travis](https://github.com/hvr/multi-ghc-travis) approach. -* Make your code compatible with the newest versions of all dependencies. -* Make your code compatible with the versions of libraries that ship with GHC ([more information on lenient lower bounds](https://www.fpcomplete.com/blog/2014/05/lenient-lower-bounds)). - -There are certainly many other tips that could be added here. If you think of -any, please send a pull request! Build the package set --------------------- -Generally, building the package set should be done only by the Jenkins machine -or by the official maintainers, as the process does require quite a bit of -setup on the local machine. That said, you'll likely be able to get a stable -build by running: - - cabal update - cabal install stackage - stackage nightly - -### Docker - -Note: This method has been disabled for now, but may be enabled again in the future. - -If you'd like to check a build plan, or perform an entire build, without -specially configuring your system, Docker may be a good approach. To check if -some modifications to `build-constraints.yaml` are valid, try the following: - -1. Create a local clone of the `stackage` repo -2. Make modifications to your local `build-constraints.yaml` -3. Inside the `stackage` working directory, run the following: - - ``` - $ docker run -it --rm -v $(pwd):/stackage -w /stackage snoyberg/stackage /bin/bash -c 'cabal update && stackage check' - ``` - -Similarly, if you'd like to perform an entire build, you can replace the last step with: - -``` -$ docker run -it --rm -v $(pwd):/stackage -w /stackage snoyberg/stackage /bin/bash -c 'cabal update && stackage nightly --skip-upload' -``` +Generally only the stackage build server run by the stackage curator +team and people intrested in incorporating stackage snapshots into an +OS distribution need to build the entire package set. If you're +interested in trying this yourself, please check out +[the curator guide](https://github.com/fpco/stackage/blob/master/CURATORS.md), +though be aware that this is not a recommended practice and there +likely will be problems you will need to debug yourself. ## Processing diff --git a/automated/.gitignore b/automated/.gitignore index 8285928f..9c4d36e6 100644 --- a/automated/.gitignore +++ b/automated/.gitignore @@ -8,3 +8,5 @@ /lts-*/ /stackage-curator/ /stackage-update/ +/aws.sh +/crondir/ diff --git a/automated/build.sh b/automated/build.sh index 902e62f4..75ac1ea5 100755 --- a/automated/build.sh +++ b/automated/build.sh @@ -1,34 +1,43 @@ #!/usr/bin/env bash -set -eux +set -eu +x ROOT=$(cd $(dirname $0) ; pwd) TARGET=$1 -TAG=$(echo $TARGET | cut -d- -f 1) -IMAGE=snoyberg/stackage:$TAG -if [ "$TAG" = "nightly" ] +source aws.sh + +# For nightly-YYYY-MM-DD, tag should be nightly +# For lts-X.Y, tag should be ltsX +SHORTNAME=$(echo $TARGET | cut -d- -f 1) +if [ $SHORTNAME = "lts" ] then - TROOT=$ROOT/nightly + TAG=$(echo $TARGET | sed 's@^lts-\([0-9]*\)\.[0-9]*@lts\1@') else - TROOT=$ROOT/$(echo $TARGET | cut -d. -f 1) + TAG=$SHORTNAME fi +IMAGE=snoyberg/stackage:$TAG + PLAN_FILE=current-plan.yaml DOCMAP_FILE=current-docmap.yaml BUNDLE_FILE=current.bundle CABAL_DIR=$ROOT/cabal +STACK_DIR=$ROOT/stack GHC_DIR=$ROOT/ghc DOT_STACKAGE_DIR=$ROOT/dot-stackage -WORKDIR=$TROOT/work -SSH_DIR=$ROOT/ssh-$(echo $TARGET | cut -d- -f 1) +WORKDIR=$ROOT/$TAG/work +EXTRA_BIN_DIR=$ROOT/extra-bin +SSH_DIR=$ROOT/ssh-$SHORTNAME mkdir -p \ "$CABAL_DIR" \ + "$STACK_DIR" \ "$GHC_DIR" \ "$DOT_STACKAGE_DIR" \ "$WORKDIR" \ + "$EXTRA_BIN_DIR" \ "$SSH_DIR" GITCONFIG=$ROOT/gitconfig @@ -68,15 +77,65 @@ rm -f stackage-curator stackage-curator.bz2 wget https://s3.amazonaws.com/stackage-travis/stackage-curator/stackage-curator.bz2 bunzip2 stackage-curator.bz2 chmod +x stackage-curator +./stackage-curator --version ) -ARGS_COMMON="--rm -u $USER -v $WORKDIR:/home/stackage/work -w /home/stackage/work -v $BINDIR/stackage-curator:/usr/local/bin/stackage-curator:ro -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro" -ARGS_PREBUILD="$ARGS_COMMON -v $CABAL_DIR:/home/stackage/.cabal -v $GHC_DIR:/home/stackage/.ghc -v $DOT_STACKAGE_DIR:/home/stackage/.stackage" -ARGS_BUILD="$ARGS_COMMON -v $CABAL_DIR:/home/stackage/.cabal:ro -v $GHC_DIR:/home/stackage/.ghc:ro" -ARGS_UPLOAD="$ARGS_COMMON -e AWS_ACCESS_KEY=$AWS_ACCESS_KEY -e AWS_SECRET_KEY=$AWS_SECRET_KEY -v $AUTH_TOKEN:/auth-token:ro -v $HACKAGE_CREDS:/hackage-creds:ro -v $DOT_STACKAGE_DIR:/home/stackage/.stackage -v $SSH_DIR:/home/ubuntu/.ssh:ro -v $GITCONFIG:/home/stackage/.gitconfig:ro -v $CABAL_DIR:/home/stackage/.cabal:ro" +ARGS_COMMON="--rm -v $WORKDIR:$HOME/work -w $HOME/work -v $BINDIR/stackage-curator:/usr/bin/stackage-curator:ro -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v $EXTRA_BIN_DIR/stack:/usr/bin/stack:ro" +ARGS_PREBUILD="$ARGS_COMMON -u $USER -e HOME=$HOME -v $CABAL_DIR:$HOME/.cabal -v $STACK_DIR:$HOME/.stack -v $GHC_DIR:$HOME/.ghc -v $DOT_STACKAGE_DIR:$HOME/.stackage" +ARGS_BUILD="$ARGS_COMMON -v $CABAL_DIR:$HOME/.cabal:ro -v $STACK_DIR:$HOME/.stack:ro -v $GHC_DIR:$HOME/.ghc:ro" +ARGS_UPLOAD="$ARGS_COMMON -u $USER -e HOME=$HOME -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY -v $AUTH_TOKEN:/auth-token:ro -v $HACKAGE_CREDS:/hackage-creds:ro -v $DOT_STACKAGE_DIR:$HOME/.stackage -v $SSH_DIR:$HOME/.ssh:ro -v $GITCONFIG:$HOME/.gitconfig:ro -v $CABAL_DIR:$HOME/.cabal:ro -v $STACK_DIR:$HOME/.stack:ro" -# Use cabal update first to initialize ~/.cabal.config, then use stackage-curator update to get it securely -docker run $ARGS_UPLOAD $IMAGE /bin/bash -c "stackage-curator check-target-available --target $TARGET" -docker run $ARGS_PREBUILD $IMAGE /bin/bash -c "cabal update && stackage-curator update && stackage-curator create-plan --plan-file $PLAN_FILE --target $TARGET ${CONSTRAINTS:-} && stackage-curator check --plan-file $PLAN_FILE && stackage-curator fetch --plan-file $PLAN_FILE && cabal install random cabal-install" -docker run $ARGS_BUILD $IMAGE stackage-curator make-bundle --plan-file $PLAN_FILE --docmap-file $DOCMAP_FILE --bundle-file $BUNDLE_FILE --target $TARGET -docker run $ARGS_UPLOAD $IMAGE /bin/bash -c "stackage-curator upload-docs --target $TARGET --bundle-file $BUNDLE_FILE && stackage-curator upload-index --plan-file $PLAN_FILE --target $TARGET && stackage-curator upload-github --plan-file $PLAN_FILE --docmap-file $DOCMAP_FILE --target $TARGET && stackage-curator hackage-distro --plan-file $PLAN_FILE --target $TARGET" +# Make sure we actually need this snapshot. We only check this for LTS releases +# since, for nightlies, we'd like to run builds even if they are unnecessary to +# get early warning information of upcoming failures. (See the duplicate check +# below for why this is safe.) +if [ $SHORTNAME = "lts" ] +then + docker run $ARGS_UPLOAD $IMAGE /bin/bash -c "exec stackage-curator check-target-available --target $TARGET" +fi + +# Get latest stack +curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C $EXTRA_BIN_DIR '*/stack' + +# Determine the new build plan unless NOPLAN is set +# +# * Update the package index (unless LTS) +# * Create a new plan +if [ "${NOPLAN:-}x" = "x" ] +then + if [ $SHORTNAME = "lts" ] + then + docker run $ARGS_PREBUILD $IMAGE /bin/bash -c "exec stackage-curator create-plan --plan-file $PLAN_FILE --target $TARGET ${CONSTRAINTS:-}" + else + docker run $ARGS_PREBUILD $IMAGE /bin/bash -c "stack update && exec stackage-curator create-plan --plan-file $PLAN_FILE --target $TARGET ${CONSTRAINTS:-}" + fi +fi + +# Do the rest of the pre-build actions: +# +# * Check that the plan is valid +# * Fetch all needed tarballs (the build step does not have write access to the tarball directory) +# * Do a single unpack to create the package index cache (again due to directory perms) +docker run $ARGS_PREBUILD $IMAGE /bin/bash -c "stackage-curator check --plan-file $PLAN_FILE && stackage-curator fetch --plan-file $PLAN_FILE && cd /tmp && exec stack unpack random" + +# Now do the actual build. We need to first set the owner of the home directory +# correctly, so we run the command as root, change owner, and then use sudo to +# switch back to the current user +docker run $ARGS_BUILD $IMAGE /bin/bash -c "chown $USER $HOME && exec sudo -E -u $USER env \"HOME=$HOME\" \"PATH=\$PATH\" stackage-curator make-bundle --plan-file $PLAN_FILE --docmap-file $DOCMAP_FILE --bundle-file $BUNDLE_FILE --target $TARGET" + +# Make sure we actually need this snapshot. We used to perform this check +# exclusively before building. Now we perform it after as well for the case of +# nightly, where we don't perform this check beforehand. This is also slightly +# safer, in case someone else already uploaded a specific snapshot while we +# were building. +docker run $ARGS_UPLOAD $IMAGE /bin/bash -c "exec stackage-curator check-target-available --target $TARGET" + +# Successful build, so we need to: +# +# * Upload the docs to S3 +# * Upload the 00-index.tar file to S3 (TODO: this is probably no longer necessary, since snapshots never modify .cabal files) +# * Upload the new plan .yaml file to the appropriate Github repo +# * Register as a new Hackage distro +docker run $ARGS_UPLOAD $IMAGE /bin/bash -c "stackage-curator upload-docs --target $TARGET --bundle-file $BUNDLE_FILE && stackage-curator upload-index --plan-file $PLAN_FILE --target $TARGET && stackage-curator upload-github --plan-file $PLAN_FILE --docmap-file $DOCMAP_FILE --target $TARGET && exec stackage-curator hackage-distro --plan-file $PLAN_FILE --target $TARGET" + +date diff --git a/automated/check-cabal.sh b/automated/check-cabal.sh new file mode 100755 index 00000000..c920f98a --- /dev/null +++ b/automated/check-cabal.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +# This script is intended for testing Cabal HEAD against a Stackage snapshot. + +set -eux + +ROOT=$(cd $(dirname $0) ; pwd) +TARGET=$1 + +# For nightly-YYYY-MM-DD, tag should be nightly +# For lts-X.Y, tag should be ltsX +SHORTNAME=$(echo $TARGET | cut -d- -f 1) +if [ $SHORTNAME = "lts" ] +then + TAG=$(echo $TARGET | sed 's@^lts-\([0-9]*\)\.[0-9]*@lts\1@') + PLAN_URL=https://raw.githubusercontent.com/fpco/lts-haskell/master/$TARGET.yaml +else + TAG=$SHORTNAME + PLAN_URL=https://raw.githubusercontent.com/fpco/stackage-nightly/master/$TARGET.yaml +fi + +IMAGE=snoyberg/stackage:$TAG + +PLAN_FILE=$TARGET-plan.yaml +DOCMAP_FILE=$TARGET-docmap.yaml +BUNDLE_FILE=$TARGET.bundle= + +CABAL_DIR=$ROOT/cabal +STACK_DIR=$ROOT/stack +GHC_DIR=$ROOT/ghc +DOT_STACKAGE_DIR=$ROOT/dot-stackage +WORKDIR=$ROOT/$TAG/work +EXTRA_BIN_DIR=$ROOT/extra-bin + +mkdir -p \ + "$CABAL_DIR" \ + "$STACK_DIR" \ + "$GHC_DIR" \ + "$DOT_STACKAGE_DIR" \ + "$WORKDIR" \ + "$EXTRA_BIN_DIR" + +curl "$PLAN_URL" > $WORKDIR/$PLAN_FILE + +mkdir -p $ROOT/bin +BINDIR=$(cd $ROOT/bin ; pwd) +( +cd $BINDIR +rm -f stackage-curator stackage-curator.bz2 +wget https://s3.amazonaws.com/stackage-travis/stackage-curator/stackage-curator.bz2 +bunzip2 stackage-curator.bz2 +chmod +x stackage-curator +) + +ARGS_COMMON="--rm -v $WORKDIR:/home/stackage/work -w /home/stackage/work -v $BINDIR/stackage-curator:/usr/bin/stackage-curator:ro -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro -v $EXTRA_BIN_DIR:/home/stackage/bin:ro" +ARGS_PREBUILD="$ARGS_COMMON -u $USER -v $CABAL_DIR:/home/stackage/.cabal -v $STACK_DIR:/home/stackage/.stack -v $GHC_DIR:/home/stackage/.ghc -v $DOT_STACKAGE_DIR:/home/stackage/.stackage" +ARGS_BUILD="$ARGS_COMMON -v $CABAL_DIR:/home/stackage/.cabal:ro -v $STACK_DIR:/home/stackage/.stack:ro -v $GHC_DIR:/home/stackage/.ghc:ro" + +# Get latest stack +curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C $EXTRA_BIN_DIR '*/stack' + +# Do all of the pre-build actions: +# +# * Update the package index +# * Fetch all needed tarballs (the build step does not have write access to the tarball directory) +# * Do a single unpack to create the package index cache (again due to directory perms) +docker run $ARGS_PREBUILD $IMAGE /bin/bash -c "/home/stackage/bin/stack update && stackage-curator fetch --plan-file $PLAN_FILE && cd /tmp && /home/stackage/bin/stack unpack random" + +# Now do the actual build. We need to first set the owner of the home directory +# correctly, so we run the command as root, change owner, and then use sudo to +# switch back to the current user +docker run $ARGS_BUILD $IMAGE /bin/bash -c "chown $USER /home/stackage && sudo -E -u $USER env \"PATH=\$PATH:/home/stackage/bin\" stackage-curator make-bundle --plan-file $PLAN_FILE --docmap-file $DOCMAP_FILE --bundle-file $BUNDLE_FILE --target $TARGET --cabal-from-head" diff --git a/automated/cron.sh b/automated/cron.sh new file mode 100755 index 00000000..2d804ad8 --- /dev/null +++ b/automated/cron.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -eux + +cd "$(dirname "${BASH_SOURCE[0]}")" + +CRONDIR=$(pwd)/crondir +mkdir -p $CRONDIR +source aws.sh + +IMAGE=fpco/stackage-server-prod:latest +docker pull $IMAGE + +stack update + +date +echo "Running stackage-server-cron..." +docker run --rm \ + -v $CRONDIR:/home/ubuntu \ + -v $HOME/.stack/indices:/home/ubuntu/.stack/indices:ro \ + --workdir /home/ubuntu \ + -p 17834:17834 \ + $IMAGE \ + bash -c "useradd $(whoami) -u $(id -u); sudo -u $(whoami) env HOME=/home/ubuntu AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY bash -c '/usr/local/bin/stackage-server-cron 2>&1 | tee -a /home/ubuntu/stackage-server-cron.log'" diff --git a/automated/run-nightly.sh b/automated/run-nightly.sh new file mode 100755 index 00000000..3dc3b26c --- /dev/null +++ b/automated/run-nightly.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +cd "$(dirname "${BASH_SOURCE[0]}")" + +while true; do + ./build.sh nightly-$(date -u +%F) + date + sleep 30m + echo +done diff --git a/build-constraints.yaml b/build-constraints.yaml index c9fa0fcb..620b5620 100644 --- a/build-constraints.yaml +++ b/build-constraints.yaml @@ -1,7 +1,94 @@ -ghc-major-version: "7.10" - +ghc-major-version: "8.0" # Constraints for brand new builds packages: + "Joe M @joe9": + - logger-thread + - text-generic-pretty + + "Li-yao Xia @Lysxia": + - generic-random + - postgresql-orm < 0 + + "Tobias Dammers @tdammers": + - ginger + + "Yair Chuchem @yairchu": + - List + + "Luke Murphy @lwm": + - tasty-discover + - lentil + + "Marco Zocca @ocramz": + - sparse-linear-algebra + - network-multicast + + "Joseph Canero @caneroj1": + - sqlite-simple-errors + - median-stream + - stm-supply + + "James M.C. Haver II @mchaver": + - quickcheck-arbitrary-adt + - hspec-golden-aeson + - servant-aeson-specs + + "Winter Land @winterland1989": + - if + - tcp-streams + - tcp-streams-openssl + - wire-streams + - binary-parsers + - binary-ieee754 + - word24 + - mysql-haskell + - mysql-haskell-openssl + + "Harendra Kumar @harendra-kumar": + - unicode-transforms + + "Aleksey Uimanov @s9gf4ult": + # - postgresql-query # via: derive + - hreader + - hset + + "Aaron Taylor @hamsterdam": + - kawhi + + "Schell Scivally @schell": + - renderable + - varying + + "Nicolas Mattia @nmattia": + - makefile + + "Michael Litchard @mlitchard": + - point-octree + + "Siddharth Bhat @bollu": + - symengine + + "alpheccar @alpheccar": + - HPDF + - hbayes + + "Dmitry Bogatov ": + - once + + "David Johnson @dmjio": + # - envy # bounds: GHC 8 + - s3-signer + - google-translate + - hackernews + # - ses-html # bounds: time 1.6 + # - stripe-haskell # via: stripe-http-streams + # - stripe-http-streams # via: http-streams + # - stripe-core # bounds: aeson 1.0 + + "Piotr Mlodawski @pmlodawski": + - signal + # - ghc-session # bounds: GHC 8 + "Michael Snoyman michael@snoyman.com @snoyberg": - bzlib-conduit - cabal-install @@ -15,23 +102,19 @@ packages: - markdown - mime-mail - mime-mail-ses - - monadcryptorandom - network-conduit-tls - persistent - persistent-mysql - persistent-postgresql - persistent-sqlite - persistent-template - - random-shuffle - - sphinx + - stackage-curator - stm-conduit - wai-websockets - warp-tls - yackage - yesod - yesod-auth - - yesod-auth-oauth - - yesod-auth-deskcom - authenticate-oauth - yesod-bin - yesod-eventsource @@ -42,125 +125,73 @@ packages: - yesod-static - yesod-test - yesod-websockets - - repa - - repa-io - - repa-algorithms - - repa-devil - #- JuicyPixels-repa GHC 7.10 - cereal-conduit - binary-conduit - lzma-conduit - mutable-containers - hpc-coveralls - monad-unlift + - monad-unlift-ref + - yaml + - servius + - cryptonite-conduit - "FP Complete michael@fpcomplete.com @snoyberg": - alex - async - - aws - base16-bytestring - c2hs - - cairo - cassava - - Chart - - # https://github.com/fpco/stackage/issues/541 - # - Chart-diagrams - - - compdata - - configurator - - convertible - csv-conduit - - diagrams-cairo - - dimensional - executable-hash - executable-path - - fgl - - fixed-list - foreign-store - formatting - #- fpco-api - gtk2hs-buildtools - happy - - histogram-fill - - hmatrix - - hmatrix-gsl - - hxt - - hxt-relaxng - # https://github.com/ekmett/hybrid-vectors/issues/1 - # - hybrid-vectors GHC 7.10 + - hybrid-vectors - indents - language-c - lhs2tex - - persistent-mongoDB + # - persistent-mongoDB # bounds: http-api-data - pretty-class - - quandl-api - - random-fu - - random-source - - shelly - - smtLib - - stackage - # Temporary block while system-filepath issues worked out - # - stackage-curator - - stackage-types - - stackage-update - - stackage-upload - - stackage-cli - - stackage-install - - stackage-build-plan - - stackage-cabal - - stackage-sandbox - - stackage-setup - - stackage-metadata - - statistics-linreg - th-expand-syns - - thyme - # https://github.com/kallisti-dev/hs-webdriver/issues/71 - # - webdriver - - web-fpco - - criterion - th-lift - - singletons - - th-desugar - quickcheck-assertions - # Cloud Haskell not yet updated to GHC 7.10 - #- distributed-process-simplelocalnet - # cloud-haskell - #- rank1dynamic - #- distributed-static - - network-transport - #- distributed-process - #- distributed-process-extras - #- distributed-process-async - #- distributed-process-client-server - #- distributed-process-supervisor - #- distributed-process-task - #- distributed-process-execution - - - kure - - - ide-backend - - ide-backend-server - - ide-backend-rts - - - hackage-mirror + # - hackage-mirror # via: aws - wai-middleware-consul - wai-middleware-crowd - monad-logger-json + - safe-exceptions - monad-logger-syslog + - fsnotify-conduit + - pid1 + - typed-process + - say - "Omari Norman ": + - fsnotify + - hinotify + - hfsevents + - Win32-notify + + "Omari Norman @massysett": - rainbow + - rainbox + - anonymous-sums - multiarg - prednote - cartel + - Earley + - ofx + - pinchot + - accuerr + - timelens + - non-empty-sequence - "Neil Mitchell": + "Neil Mitchell @ndmitchell": - hlint - hoogle - shake - - derive - tagsoup - cmdargs - safe @@ -171,38 +202,66 @@ packages: - extra - bake - ghcid + - pugixml + - hexml - "Alan Zimmerman": + "Alan Zimmerman @alanz": - hjsmin - language-javascript + - Strafunski-StrategyLib + # - HaRe # via: cabal-helper, ghc-mod, rosezipper - "Alfredo Di Napoli ": + "Alfredo Di Napoli @adinapoli": - mandrill - "Jasper Van der Jeugt": + "Jon Schoning @jonschoning": + - pinboard + + "Jasper Van der Jeugt @jaspervdj": - blaze-html - blaze-markup + - cabal-dependency-licenses - hakyll - stylish-haskell + - patat + - profiteur - psqueues - websockets + - websockets-snap - "Antoine Latter": + "Sibi Prabakaran @psibi": + - download + - textlocal + + "haskell-openal": + - OpenAL + - ALUT + + "haskell-opengl": + - OpenGL + - GLURaw + - GLUT + - OpenGLRaw + - StateVar + - ObjectName + + "Antoine Latter @aslatter": - byteorder - uuid - "Philipp Middendorf ": + "Philipp Middendorf @pmiddend": - clock - "Stefan Wehr ": + "Stefan Wehr @skogsbaer": - HTF - xmlgen - stm-stats + - large-hashable - "Bart Massey ": + "Bart Massey @BartMassey": - parseargs - "Vincent Hanquez": + "Vincent Hanquez @vincenthz": - bytedump - cipher-aes - cipher-rc4 @@ -226,8 +285,9 @@ packages: - vhd - xenstore - "Chris Done": + "Chris Done @chrisdone": - ace + - ical - check-email - freenect - frisby @@ -237,49 +297,50 @@ packages: - lucid - osdkeys - pdfinfo - #- present GHC 7.10, via atto-lisp + # - present # compilation failure against haskell-src-exts - pure-io - # https://github.com/jgoerzen/testpack/issues/11 - #- scrobble GHC 7.10, for QuickCheck 2.8 via testpack + # - scrobble # compilation errors against time 1.6 - shell-conduit - sourcemap - hindent - descriptive - wrap - path - # requires old haddock currently - haskell-docs - # TODO: Add structured-haskell-mode once they've been ported to HSE 1.16. + - intero + - weigh + - haskell-docs + # - structured-haskell-mode # bounds: haskell-src-exts # via: applicative-quoters - "Alberto G. Corona ": + "Alberto G. Corona @agocorona": - RefSerialize - TCache - Workflow - # https://github.com/agocorona/MFlow/issues/60 GHC 7.10 - # - MFlow + - MFlow + - transient + - transient-universe + - ghcjs-hplay - "Edward Kmett ": + "Edward Kmett @ekmett": - ad - adjunctions - - approximate + # - approximate # bounds: binary, comonad, pointed - bifunctors - bits - - bound + # - bound # bounds: binary, comonad, doctest, transformers, vector - bytes - charset - - comonad > 4.2.7 || < 4.2.7 + - comonad - comonads-fd - comonad-transformers - # https://github.com/ekmett/compensated/issues/5 - #- compensated GHC 7.10 - - compressed + # - compensated # bounds: binary, comonad, generic-deriving, safecopy + # - compressed # bounds: comonad, pointed - concurrent-supply - constraints - contravariant - distributive - either - eq - # https://github.com/ekmett/ersatz/issues/11 GHC 7.10 - # - ersatz + - ersatz - exceptions - free - graphs @@ -298,8 +359,7 @@ packages: - monadic-arrays - monad-products - monad-products - - monad-st - - monad-st + # - monad-st # bounds: transformers - mtl - nats - numeric-extras @@ -315,26 +375,26 @@ packages: - semigroupoids - semigroups - speculation - # https://github.com/ekmett/streams/issues/11 - # - streams GHC 7.10 + - streams - tagged + - trifecta - vector-instances - void - wl-pprint-extras - wl-pprint-terminfo + - zippers - fixed - half - gl - lens-aeson - zlib-lens - - generic-deriving - - hyperloglog + # - hyperloglog # bounds: approximate, binary, comonad - "Andrew Farmer ": + "Andrew Farmer @xich": - scotty - wai-middleware-static - "Simon Hengel ": + "Simon Hengel @sol": - hspec - hspec-wai - hspec-wai-json @@ -343,36 +403,35 @@ packages: - doctest - base-compat - "Mario Blazevic ": + "Mario Blazevic @blamario": - monad-parallel - monad-coroutine - incremental-parser - monoid-subclasses - picoparsec - "Brent Yorgey ": + "Brent Yorgey @byorgey": - active - BlogLiterately - BlogLiterately-diagrams - diagrams - - # https://github.com/fpco/stackage/issues/443 - #- diagrams-builder - #- diagrams-haddock - + - diagrams-builder + - diagrams-haddock + - diagrams-cairo - diagrams-contrib - diagrams-core + - diagrams-gtk - diagrams-lib - diagrams-postscript + - diagrams-rasterific - diagrams-svg - dual-tree - force-layout - haxr - MonadRandom - monoid-extras - - vector-space-points - "Vincent Berthoux ": + "Vincent Berthoux @Twinside": - JuicyPixels - FontyFruity - Rasterific @@ -380,27 +439,53 @@ packages: - rasterific-svg - asciidiagram - "Patrick Brisbin": + "Patrick Brisbin @pbrisbin": - gravatar - "Paul Harper ": - - yesod-auth-oauth2 + # "Paul Harper @benekastah": + # - yesod-auth-oauth2 # bounds: aeson-1.0, http-client, load-env - "Felipe Lessa ": - - esqueleto - - fb - - fb-persistent - - yesod-fb - - yesod-auth-fb + "Felipe Lessa @meteficha": + # - country-codes # bounds: tagsoup + # - esqueleto # bounds: persistent + # - fb # bounds: aeson, http-conduit-2.2, hspec + # - fb-persistent # bounds: persistent # via: fb + # - mangopay # compilation failure against aeson + - nonce + - serversession + - serversession-backend-acid-state + # - serversession-backend-persistent # bounds: persistent, persistent-postgresql, persistent-sqlite + # - serversession-backend-redis # bounds: hedis + # - serversession-frontend-snap # bounds: snap, snap-core + - serversession-frontend-wai + - serversession-frontend-yesod + - thumbnail-plus + # - yesod-auth-account-fork # bounds: persistent + # - yesod-auth-fb # bounds: time, transformers # via fb, via yesod-fb + # - yesod-fb # via fb + # - yesod-mangopay # via mangopay - "Alexander Altman ": + "Alexander Altman @pthariensflame": + # Maintaining on behalf of @roelvandijk: - base-unicode-symbols - containers-unicode-symbols + # My own packages: + - ChannelT - "Trevor L. McDonell ": + "Trevor L. McDonell @tmcdonell": - accelerate - "Dan Burton ": + "Liam O'Connor @liamoc": + # - patches-vector # bounds: QuickCheck, edit-distance-vector, hspec + # - composition-tree # bounds: QuickCheck + # - dixi # bounds: aeson, lens, time, [...] + - latex-formulae-image + # - latex-formulae-pandoc # bounds: pandoc-types + # - latex-formulae-hakyll # bounds: ghc, base + # - agda-snippets # bounds: ghc, base + # - agda-snippets-hakyll # bounds: ghc, base + + "Dan Burton @DanBurton": - hspec-jenkins - yesod-gitrev - basic-prelude @@ -413,25 +498,43 @@ packages: - lens-family-th "Daniel Díaz dhelta.diaz@gmail.com @Daniel-Diaz": - - HaTeX - - matrix + - bimap-server - binary-list + - byteset + - Clipboard + - grouped-list - haskintex - - post-mess-age + - HaTeX + - hatex-guide - include-file + - matrix + - pcre-light + - phantom-state + - post-mess-age + - sorted-list - "Gabriel Gonzalez ": + "Gabriel Gonzalez @Gabriel439": + - optparse-generic - pipes + - pipes-extras - pipes-parse - pipes-concurrency - pipes-safe - turtle - foldl + - morte - "Chris Allen ": + "Andrew Thaddeus Martin @andrewthad": + - yesod-table + + "Chris Allen bitemyapp": + - machines-directory + - machines-io - bloodhound - "Adam Bergmark ": + "Adam Bergmark @bergmark": + - HUnit + - aeson - fay - fay-base - fay-dom @@ -443,117 +546,154 @@ packages: - time-compat - through-text - "Sebastiaan Visser ": + "Benedict Aas @Shou": + - boolean-like + - type-operators + + "Sebastiaan Visser @sebastiaanvisser": - clay - fclabels - "Rodrigo Setti ": + "Robert Klotzner @eskimor": + - purescript-bridge + - servant-purescript + - servant-subscriber + + "Rodrigo Setti @rodrigosetti": - messagepack - messagepack-rpc - "Boris Lykah ": - - groundhog - - groundhog-th - - groundhog-sqlite - - groundhog-postgresql - - groundhog-mysql + # "Boris Lykah @lykahb": + # - groundhog # bounds: transformers + # - groundhog-th # via groundhog + # - groundhog-sqlite # via groundhog + # - groundhog-postgresql # bounds: transformers # via groundhog + # - groundhog-mysql # bounds: transformers # via: groundhog, mysql-simple - "Janne Hellsten ": + "Janne Hellsten @nurpax": - sqlite-simple - "Michal J. Gajda ": + "Michal J. Gajda @mgajda": - iterable - Octree - FenwickTree - hPDB - hPDB-examples - + - homplexity - wordpass - - json-autotype + # - json-autotype # bounds: aeson 1.0, lens - posix-realtime - "Dominic Steinitz ": - [] - # - yarr GHC 7.10 + "Dom De Re @domdere": + - cassava-conduit - "Roman Cheplyaka ": + "Dominic Steinitz @idontgetoutmuch": + # - yarr # compilation error against fixed-vector https://github.com/leventov/yarr/issues/10 + - random-fu + + "Ben Gamari @bgamari": + - vector-fftw + + "Roman Cheplyaka @feuerbach": - action-permutations - amqp - - curl - - haskell-names - - haskell-packages - heredoc - - hse-cpp - immortal - regex-applicative - lexer-applicative - smallcheck + - socket - tasty - tasty-golden - tasty-hunit - tasty-quickcheck - tasty-smallcheck + - tasty-html - time-lens - timezone-olson - timezone-series - traverse-with-class - tuples-homogenous-h98 - "George Giorgidze ": + "George Giorgidze @giorgidze": - HCodecs - YampaSynth - set-monad - "Phil Hargett ": + "Phil Hargett @hargettp": - courier - "Aycan iRiCAN ": + "Aycan iRiCAN @aycanirican": - hdaemonize - - hsyslog - hweblib - "Joachim Breitner ": + "Joachim Breitner @nomeata": - circle-packing - arbtt - # - ghc-heap-view GHC 7.10 + - ghc-heap-view - tttool - gipeda - list-fusion-probe - haskell-spacegoo + - tasty-expected-failure + - RepLib + - unbound - "Aditya Bhargava @egonSchiele": - HandsomeSoup - "Clint Adams ": - #- hOpenPGP GHC 7.10, via syb-with-class + "Clint Adams @clinty": + - hOpenPGP - openpgp-asciiarmor - # - MusicBrainz GHC 7.10, time 1.5 + - MusicBrainz - DAV - #- hopenpgp-tools GHC 7.10, via syb-with-class + - hopenpgp-tools + - opensource - "Joey Hess ": - - git-annex + "Joey Hess @joeyh": + # - git-annex # bounds: bloomfilter, [...] # via: aws, esqueleto, [...] # + # - github-backup # bounds: github + - Win32-extras + - concurrent-output + - mountpoints + - disk-free-space - # https://github.com/fpco/stackage/issues/160 - "Ketil Malde": + "Colin Woodbury @fosskers": + - microlens-aeson + - versions + - vectortiles + - pipes-random + - repa + - repa-io + - repa-algorithms + # - kanji # bounds: ghc 8, base + + "Ketil Malde @ketil-malde": - biocore - biofasta - biofastq - # - biosff GHC 7.10 + # - biosff # 0.3.7.1 Compilation failure due to -Werror - blastxml - bioace - # https://github.com/BioHaskell/biophd/issues/3 - # - biophd - - biopsl # https://github.com/ingolia/SamTools/issues/3 samtools + - biopsl + # samtools # Compilation failure against c2hs https://github.com/ingolia/SamTools/issues/3 - seqloc - bioalign - BlastHTTP - # The following have out-of-date dependencies currently - # biostockholm memexml RNAwolf - # , "Biobase BiobaseDotP BiobaseFR3D BiobaseInfernal BiobaseMAF" - # , "BiobaseTrainingData BiobaseTurner BiobaseXNA BiobaseVienna" - # , "BiobaseTypes BiobaseFasta" - # MC-Fold-DP + # Outdated dependencies: + # biostockholm memexml RNAwolf Biobase BiobaseDotP + # BiobaseFR3D BiobaseInfernal BiobaseMAF BiobaseTrainingData + # BiobaseTurner BiobaseXNA BiobaseVienna" + # BiobaseTypes BiobaseFasta MC-Fold-DP + + "Florian Eggenhofer @eggzilla": + - ClustalParser + - EntrezHTTP + - Genbank + - RNAlien + - Taxonomy + # - TaxonomyTools # build failure + - ViennaRNAParser "Silk ": - aeson-utils @@ -579,37 +719,62 @@ packages: - tostring - uri-encode - "Simon Michael ": + "Simon Michael @simonmichael": + - darcs - hledger - - shelltestrunner + - hledger-lib + - hledger-ui - hledger-web + - hledger-api + # - shelltestrunner # bounds: Diff, HUnit + - quickbench + - regex-compat-tdfa - "Mihai Maruseac ": + "Mihai Maruseac @mihaimaruseac": - io-manager - "Dimitri Sabadie @phaazon": + # - al # FIXME temporary, figure out why it's not working with stackage-build + - event + - hid + - luminance + # - luminance-samples # bounds: base - monad-journal + # - msi-kb-backlit # bounds: ghc, base - smoothie + # - tellbot # bounds: bifunctors, http-conduit, tagsoup + - wavefront + - zero - "Thomas Schilling ": + "Thomas Schilling @nominolo": - ghc-syb-utils - "Boris Buliga ": - # https://github.com/kazu-yamamoto/ghc-mod/issues/437 GHC 7.10 - # - ghc-mod + "Boris Buliga @d12frosted": - io-choice - # https://github.com/d12frosted/CanonicalPath/issues/5 - # - system-canonicalpath + # - system-canonicalpath # bounds: ghc, base # https://github.com/d12frosted/CanonicalPath/issues/5 - "Yann Esposito ": + # "Daniel Gröber @DanielG": + # - ghc-mod # bounds: cabal-helper, extra, haskell-src-exts, optparse-applicative, pipes + # - cabal-helper # bounds: extra 1.5 + + "Yann Esposito yogsototh @yogsototh": + - human-readable-duration - holy-project + - wai-middleware-caching + - wai-middleware-caching-lru + - wai-middleware-caching-redis + # not package maintainer + - ekg + - ekg-json - "Paul Rouse ": + "Paul Rouse @paul-rouse": + - mysql + - mysql-simple + - sphinx + - xmlhtml - yesod-auth-hashdb - "Toralf Wittner ": + "Toralf Wittner @twittner": - bytestring-conversion - cql - cql-io @@ -625,25 +790,27 @@ packages: - djinn-lib - djinn-ghc - "Arash Rouhani ": - - yesod-text-markdown - - "Matvey Aksenov @supki": - terminal-size + - envparse - "Luis G. Torres @giogadi": - kdt - "Emanuel Borsboom ": + "Pavel Krajcevski @Mokosha": + - netwire + - netwire-input + - netwire-input-glfw + + "Emanuel Borsboom @borsboom": - BoundedChan - broadcast-chan - bytestring-lexing - bytestring-trie - data-accessor - data-accessor-mtl - - file-location + # - file-location # bounds: transformers - fuzzcheck - - git-embed - haddock-api - here - hlibgit2 @@ -652,27 +819,26 @@ packages: - interpolatedstring-perl6 - iproute - missing-foreign - # https://github.com/jgoerzen/testpack/issues/11 - #- MissingH GHC 7.10, for QuickCheck 2.8 via testpack + - MissingH - multimap - parallel-io - text-binary - - wl-pprint-text - Chart-cairo - ghc-events - monad-extras + # - stack < 9.9.9 # bounds: ghc, template-haskell + - optparse-simple + - hpack - "Michael Sloan ": + "Michael Sloan @mgsloan": - th-orphans - th-reify-many - "Nikita Volkov ": + "Nikita Volkov @nikita-volkov": - base-prelude - cases - focus - hasql - - hasql-backend - - hasql-postgres - list-t - mtl-prelude - neat-interpolation @@ -681,123 +847,178 @@ packages: - slave-thread - stm-containers - "Iustin Pop ": + "Iustin Pop @iustin": - prefix-units - "Alexander Thiemann ": - - graph-core - - reroute + "Alexander Thiemann @agrafix": - Spock - - Spock-digestive + - Spock-core + - Spock-api + - Spock-api-server + # - Spock-digestive # via: digestive-functors - Spock-worker + - graph-core + - hvect + - reroute - users - - users-test + # - users-persistent # via: esqueleto - users-postgresql-simple + - users-test + - validate-input + - ignore + - elm-bridge + # digestive-bootstrap # via: digestive-functors, digestive-functors-blaze + - blaze-bootstrap + - dataurl + - psql-helpers + - superbuffer + - timespan + - distance - "Joey Eremondi ": + "Joey Eremondi @JoeyEremondi": - aeson-pretty - digest - # See: https://github.com/elm-lang/elm-compiler/commit/e714001a928b3834b62555fc350909c95d380ef4 - #- elm-build-lib - #- elm-compiler + # - elm-build-lib # via: elm-compiler + # - elm-compiler # bounds: aeson, binary, transformers, [...] - elm-core-sources - #- elm-package + # - elm-package # bounds: HTTP, binary # via: elm-compiler, [...] - language-glsl - prettyclass - QuasiText - union-find - zip-archive + "Arthur Fayzrakhmanov @geraldus": + - yesod-form-richtext + - ghcjs-perch - "Arthur Fayzrakhmanov ": - - sodium + "Sebastian Nagel @ch1bo": - hdevtools - "Andrey Chudnov ": + "Andrey Chudnov @achudnov": - language-ecmascript - "Tom Ellis ": + "Tom Ellis @tomjaguarpaw": - opaleye - product-profunctors "Samplecount stefan@samplecount.com @kaoskorobase": - shake-language-c - "Marcin Mrotek ": - - diagrams-hsqml - - type-list - - vinyl-utils - - "Marcin Mrotek ": - - type-list - "David Turner @davecturner": - alarmclock - bank-holidays-england - "Haskell Servant jkarni@gmail.com @jkarni": + "Haskell Servant ": - servant - servant-client - servant-docs - - servant-jquery + - servant-js - servant-server + - servant-lucid + - servant-blaze + - servant-foreign + - servant-mock + - servant-cassava - "Alexandr Ruchkin voidex@live.com @mvoidex": + "Alexandr Ruchkin @mvoidex": - hdocs - # https://github.com/kazu-yamamoto/ghc-mod/issues/437 GHC 7.10 - # - hsdev + - hformat + - hsdev + - simple-log + - text-region - "Aleksey Kliger aleksey@lambdageek.org @lambdageek": + "Aleksey Kliger @lambdageek": - unbound-generics + - indentation-core + - indentation-parsec - "Alois Cochard alois.cochard@gmail.com @aloiscochard": - - codex - - machines-directory - - machines-io + "Alois Cochard @aloiscochard": + # - codex # bounds: http-client, wreq + - machines-binary - machines-process - # on behalf of Bryan O'Sullivan @bos - - wreq + # - sarsi # bound: cryptonite + # on behalf of Bryan O'Sullivan @bos: + # - wreq # bounds: authenticate-oauth, http-client - "Andraz Bajt andraz@bajt.me @edofic": + "Andraz Bajt @edofic": - effect-handlers - koofr-client - snowflake - "Leza M. Lutonda lemol-c@hotmail.com @lemol": + "Leza M. Lutonda @lemol": - HaskellNet + - HaskellNet-SSL - "Jens Petersen juhpetersen@gmail.com @juhp": + "Jens Petersen @juhp": - cabal-rpm + - cabal-sort + - hslua + # - idris # bounds: safe - "Renzo Carbonara renzocarbonara@gmail.com @k0001": + - cairo + - gio + - glib + - gtk + - gtk3 + - gtksourceview3 + - pango + - webkitgtk3 + - webkitgtk3-javascriptcore + + - ghcjs-codemirror + # - ghcjs-dom # via: ghcjs-dom-jsaddle # https://github.com/fpco/stackage/issues/1569 + # - jsaddle # via: ret-tf # https://github.com/fpco/stackage/issues/1569 + # - leksah-server # bounds: ghc, base + # - ltk # bounds: ghc, base + - vado + # - vcsgui # via: gi-gtk-hs + - vcswrapper + + "Renzo Carbonara @k0001": - network-simple - - pipes-aeson - - pipes-attoparsec - - pipes-binary - - pipes-network + # - pipes-aeson # bounds: pipes 4.3 + # - pipes-attoparsec # bounds: pipes 4.3 + # - pipes-binary # bounds: binary, pipes, transformers + # - pipes-network # bounds: pipes 4.3 - "Tomas Carnecky": + "Tomas Carnecky @wereHamster": + - avers + - avers-api + - avers-api-docs + - avers-server + - css-syntax + - etcd + - github-types + - github-webhook-handler + - github-webhook-handler-snap + - google-cloud + - kraken + - libinfluxdb + # - mole # bounds: hspec, optparse-applicative + - publicsuffix - rethinkdb-client-driver - "Alexandr Kurilin alex@kurilin.net @alex_kurilin": + "Alexandr Kurilin @alex_kurilin": - bcrypt - "Jeffrey Rosenbluth jeffrey.rosenbluth@gmail.com": + "Jeffrey Rosenbluth @jeffreyrosenbluth": - palette - #- diagrams-canvas GHC 7.10, via blank-canvas + - diagrams-canvas - diagrams-rasterific - lucid-svg - diagrams-html5 - static-canvas + - svg-builder - "Gabríel Arthúr Pétursson gabriel@system.is": + "Gabríel Arthúr Pétursson @polarina": - sdl2 - "Leon Mergen leon@solatis.com @solatis": + "Leon Mergen @solatis": - base32string - base58string - - bitcoin-api - - bitcoin-api-extra + # - bitcoin-api # via: wreq + # - bitcoin-api-extra # via: bitcoin-api, wreq - bitcoin-block - bitcoin-script - bitcoin-tx @@ -807,89 +1028,300 @@ packages: - network-anonymous-i2p - network-anonymous-tor - "Timothy Jones git@zmthy.io @zmthy": + "Timothy Jones @zmthy": - http-media - "Greg V greg@unrelenting.technology @myfreeweb": + "Greg V @myfreeweb": - gitson - pcre-heavy + - http-link-header + - microformats2-parser + - hspec-expectations-pretty-diff - "Francesco Mazzoli f@mazzo.li @bitonic": + "Francesco Mazzoli @bitonic": - language-c-quote - "Sönke Hahn soenkehahn@gmail.com @soenkehahn": + "Sönke Hahn @soenkehahn": + - generics-eot - getopt-generics - graph-wrapper - string-conversions - "Oleg Grenrus oleg.grenrus@iki.fi @phadej": + "Jan Stolarek @jstolarek": + - tasty-program + + "Oleg Grenrus @phadej": + - aeson-compat + - aeson-extra + - binary-orphans + - binary-tagged - edit-distance + - generics-sop-lens + - github + - insert-ordered-containers + - integer-logarithms + - JuicyPixels-scale-dct - lattices + - monad-http + - postgresql-simple-url + - range-set-list + - regex-applicative-text + - servant-swagger-ui + - servant-yaml + - singleton-bool + - spdx + - these + - time-parsers - waitra - "Adam C. Foltzer acfoltzer@galois.com @acfoltzer": + # scrive/log + - log + - log-base + - log-elasticsearch + - log-postgres + + # Not a maintainer + - arithmoi + - folds + - friendly-time + - hashable + - haxl + - monad-time + - packdeps + - recursion-schemes + - unordered-containers + + - fft + - carray + - ix-shapable + - fft + + # Regex packages by Chris Kuklewicz + - regex-base + - regex-compat + # - regex-dfa # 0.91 Compilation failure due to -Werror + # - regex-parsec # 0.90 Compilation failure due to -Werror + - regex-pcre + - regex-posix + - regex-tdfa + # regex-tdfa-utf8 # bounds: ghc, base + # - regex-tre # 0.91 Compilation failure due to -Werror + + # Universe + - universe + - universe-base + - universe-instances-base + - universe-instances-extended + - universe-instances-trans + - universe-reverse-instances + + "Abhinav Gupta @abhinav": + - farmhash + - pinch + - sandman + - language-thrift + + "Adam C. Foltzer @acfoltzer": - cryptol - gitrev - persistent-refs - "Luke Taylor tekul.hs@gmail.com @tekul": + "Luke Taylor @tekul": - jose-jwt - "Brendan Hay brendan.g.hay@gmail.com @brendanhay": + "Brendan Hay @brendanhay": - amazonka - amazonka-core + - amazonka-test + - amazonka-apigateway + - amazonka-application-autoscaling + - amazonka-appstream - amazonka-autoscaling + - amazonka-budgets + - amazonka-certificatemanager - amazonka-cloudformation - amazonka-cloudfront - amazonka-cloudhsm - - amazonka-cloudsearch-domains - amazonka-cloudsearch + - amazonka-cloudsearch-domains - amazonka-cloudtrail - - amazonka-cloudwatch-logs - amazonka-cloudwatch + - amazonka-cloudwatch-events + - amazonka-cloudwatch-logs + - amazonka-codebuild + - amazonka-codecommit - amazonka-codedeploy + - amazonka-codepipeline - amazonka-cognito-identity + - amazonka-cognito-idp - amazonka-cognito-sync - amazonka-config - amazonka-datapipeline + - amazonka-devicefarm - amazonka-directconnect + - amazonka-discovery + - amazonka-dms + - amazonka-ds - amazonka-dynamodb + - amazonka-dynamodb-streams - amazonka-ec2 + - amazonka-ecr - amazonka-ecs + - amazonka-efs - amazonka-elasticache - amazonka-elasticbeanstalk + - amazonka-elasticsearch - amazonka-elastictranscoder - amazonka-elb + - amazonka-elbv2 - amazonka-emr + - amazonka-gamelift - amazonka-glacier + - amazonka-health - amazonka-iam - amazonka-importexport + - amazonka-inspector + - amazonka-iot + - amazonka-iot-dataplane - amazonka-kinesis + - amazonka-kinesis-analytics + - amazonka-kinesis-firehose - amazonka-kms - amazonka-lambda + - amazonka-lightsail + - amazonka-marketplace-analytics + - amazonka-marketplace-metering - amazonka-ml - amazonka-opsworks + - amazonka-opsworks-cm + - amazonka-pinpoint + - amazonka-polly - amazonka-rds - amazonka-redshift - - amazonka-route53-domains + - amazonka-rekognition - amazonka-route53 + - amazonka-route53-domains - amazonka-s3 - amazonka-sdb + - amazonka-servicecatalog - amazonka-ses + - amazonka-shield + - amazonka-sms + - amazonka-snowball - amazonka-sns - amazonka-sqs - amazonka-ssm + - amazonka-stepfunctions - amazonka-storagegateway - amazonka-sts - amazonka-support - amazonka-swf + - amazonka-waf - amazonka-workspaces + - amazonka-xray + - gogol + - gogol-core + - gogol-adexchange-buyer + - gogol-adexchange-seller + - gogol-admin-datatransfer + - gogol-admin-directory + - gogol-admin-emailmigration + - gogol-admin-reports + - gogol-adsense + - gogol-adsense-host + - gogol-affiliates + - gogol-analytics + - gogol-android-enterprise + - gogol-android-publisher + - gogol-appengine + - gogol-apps-activity + - gogol-apps-calendar + - gogol-apps-licensing + - gogol-apps-reseller + - gogol-apps-tasks + - gogol-appstate + - gogol-autoscaler + - gogol-bigquery + - gogol-billing + - gogol-blogger + - gogol-books + - gogol-civicinfo + - gogol-classroom + - gogol-cloudmonitoring + - gogol-cloudtrace + - gogol-compute + - gogol-container + - gogol-customsearch + - gogol-dataflow + - gogol-dataproc + - gogol-datastore + - gogol-debugger + - gogol-deploymentmanager + - gogol-dfareporting + - gogol-discovery + - gogol-dns + - gogol-doubleclick-bids + - gogol-doubleclick-search + - gogol-drive + - gogol-firebase-rules + - gogol-fitness + - gogol-fonts + - gogol-freebasesearch + - gogol-fusiontables + - gogol-games + - gogol-games-configuration + - gogol-games-management + - gogol-genomics + - gogol-gmail + - gogol-groups-migration + - gogol-groups-settings + - gogol-identity-toolkit + - gogol-kgsearch + - gogol-latencytest + - gogol-logging + - gogol-maps-coordinate + - gogol-maps-engine + - gogol-mirror + - gogol-monitoring + - gogol-oauth2 + - gogol-pagespeed + - gogol-partners + - gogol-people + - gogol-play-moviespartner + - gogol-plus + - gogol-plus-domains + - gogol-prediction + - gogol-proximitybeacon + - gogol-pubsub + - gogol-qpxexpress + - gogol-replicapool + - gogol-replicapool-updater + - gogol-resourcemanager + - gogol-resourceviews + - gogol-script + - gogol-sheets + - gogol-shopping-content + - gogol-siteverification + - gogol-spectrum + - gogol-sqladmin + - gogol-storage + - gogol-storage-transfer + - gogol-tagmanager + - gogol-taskqueue + - gogol-translate + - gogol-urlshortener + - gogol-useraccounts + - gogol-vision + - gogol-webmaster-tools + - gogol-youtube + - gogol-youtube-analytics + - gogol-youtube-reporting - ede - pagerduty - semver - text-manipulate - "Nick Partridge nkpart@gmail.com @nkpart": + "Nick Partridge @nkpart": - cabal-file-th "Gershom Bazerman @gbaz": @@ -904,19 +1336,17 @@ packages: - maximal-cliques "Alexander Bondarenko @wiz": - [] - # GHC 7.10, via iconv - #- soap - #- soap-tls - #- soap-openssl + - soap + - soap-tls + - soap-openssl "Andres Löh @kosmikus": - generics-sop - "Vivian McPhail ": + "Vivian McPhail @amcphail": - hmatrix-gsl-stats - - hstatistics - hsignal + - hstatistics - plot - plot-gtk - plot-gtk3 @@ -924,17 +1354,27 @@ packages: - hmatrix-repa "Noam Lewis @sinelaw": - - xml-to-json + # - xml-to-json # via: hexpat - xml-to-json-fast + - digits + - unification-fd + - logict + - resolve-trivial-conflicts + - wl-pprint + - leveldb-haskell + - system-argv0 + - markdown-unlit - "Tim Baumann @timjb": - - aeson-schema + "Mateusz Kowalczyk @Fuuzetsu": + # - aeson-schema # bounds: QuickCheck, aeson # compilation failure for 0.4.1.1 + - H + - inline-r - "David Fox @ddssff": - - debian - - cabal-debian + # "David Fox @ddssff": + # - debian # GHC bug: https://github.com/ddssff/debian-haskell/issues/6 + # - cabal-debian # via: debian - "Stefan Saasen ": + "Stefan Saasen @juretta": - jwt "Sven Bartscher sven.bartscher@weltraumschlangen.de @kritzefitz": @@ -944,9 +1384,27 @@ packages: - cgi "Taylor Fausak @tfausak": + - autoexporter + - bento + - bmp # Maintained by @benl23x5. + - ekg-statsd # Maintained by @tibbe. - flow + - github-release + - gloss # Maintained by @benl23x5. + - gloss-rendering # Maintained by @benl23x5. + - gpolyline # Maintained by @fegu. + - lackey + - octane + - overloaded-records # Maintained by @trskop. + - ratel + - ratel-wai + - rattletrap + - strive + - wuss "Marios Titas @redneb": + - HsOpenSSL-x509-system + - adler32 - btrfs - disk-free-space - hxt-css @@ -955,48 +1413,80 @@ packages: - linux-namespaces "Will Coster @fimad": + - prometheus-client + - prometheus-metrics-ghc - scalpel + - wai-middleware-prometheus - "Smirnov Alexey @chemist": - - snmp - - agentx + "William Casarin @jb55": + - bson-lens + - cased + - pipes-csv + - pipes-mongodb + - skeletons + - streaming-wai + + # "Smirnov Alexey @chemist": + # - snmp # bounds: ghc, base + # - agentx # bounds: ghc, base "David Raymond Christiansen @david-christiansen": - annotated-wl-pprint - "Yitz Gale gale@sefer.org @ygale": + "Yitz Gale @ygale": - timezone-series - timezone-olson - "Josh Holland josh@inv.alid.pw @jshholland": + "Josh Holland @jshholland": - sandi - data-ordlist + - xmonad "Harry Garrood @hdgarrood": - aeson-better-errors - "Mitchell Rosen @mitchellwrosen": - tasty-hspec "Christiaan Baaij @christiaanb": - ghc-tcplugins-extra + - ghc-typelits-extra + - ghc-typelits-knownnat - ghc-typelits-natnormalise - clash-prelude - clash-lib - clash-vhdl - clash-verilog - clash-systemverilog - - clash-ghc + # - clash-ghc # bounds: ghc "Athan Clark @athanclark": - - nested-routes - - urlpath + - commutative + # - digestive-functors-lucid # via: digestive functors + # - ltext # compilation failure: https://github.com/ltext/ltext/issues/22 - markup + # - nested-routes # via: HList + - path-extra + # - poly-arity # via HList (sent e-mail to HList maintainer) + - urlpath + - wai-transformers + - wai-middleware-content-type + - wai-middleware-verbs - webpage - composition-extra + - rose-trees + - sets + - timemap + - triesn + - path-extra + # - pred-trie # via poly-arity + - pred-set + - HSet "Fumiaki Kinoshita @fumieval": + - boundingboxes - control-bool + - extensible - monad-skeleton - objective - witherable @@ -1005,99 +1495,1274 @@ packages: "Peter Harpending @pharpend": - editor-open - exceptional + - optparse-helper - pager + - semiring-simple "Philipp Hausmann @phile314": - tasty-silver "Michael Thompson @michaelt": - pipes-text + - lens-simple + - lens-family-core + - lens-family + - streaming + - streaming-bytestring + "Justin Le @mstksg": - auto + - configurator-export + - hamilton + - prompt - tagged-binary + - typelits-witnesses + - uncertain + - vector-sized "Ian Duncan @iand675": - - datadog - - growler - feature-flags - - flowdock - - growler - - engine-io-growler - metrics - pipes-wai - serf - uri-templater - librato + # - datadog # bounds: aeson + # - engine-io-growler # bounds: websockets # via [...] + # - flowdock # bounds: aeson, http-client, [...] + # - growler # bounds: pipes, pipes-aeson, transformers "Michael Xavier @MichaelXavier": - # https://github.com/MichaelXavier/Angel/issues/41 - # - angel + # - angel # https://github.com/MichaelXavier/Angel/issues/52 - uri-bytestring - # Temporarily blocking again, still debugging build on server - # - phash + # - phash # Can't build on stackage server https://github.com/MichaelXavier/phash/issues/5 - cron + # - tasty-tap # bounds: ghc, base + # - tasty-fail-fast # via: tasty-tap + - drifter + - drifter-postgresql "Lars Kuhtz @larskuhtz": - wai-cors - - "Sam Rijs ": + - configuration-tools + + "Sam Rijs @srijs": - ndjson-conduit + # - attoparsec-trans # bounds: transformers + - operational-class + - result + + "Anupam Jain @ajnsit": + - wai-routes + + "Daniel Patterson @dbp": + # - hspec-snap # bounds: hspec, hspec-core # via: digestive-functors + - hworker + # - hworker-ses # 0.1.1.0 build failure + - fn + # - fn-extra # via: digestive-functors + + "Chris Wong @lfairy": + - nationstates + + "Mathieu Boespflug @mboes": + # - ihaskell-inline-r # via: ihaskell, ihaskell-blaze + - cassette + - choice + - distributed-closure + - H + - inline-r + - jni + - jvm + # - sparkle # build failure, requires gradle + - th-lift + + "Christopher Reichert @creichert": + - bencode + - hsebaysdk + - dockerfile + - wai-middleware-throttle + - yesod-auth-basic + + # "Alcides Viamontes @alcidesv": + # - second-transfer # bounds: GHC 8 + + # "Hirotomo Moriwaki @philopon": + # - apiary # GHC 8 & bounds + # - apiary-logger # GHC 8 & bounds + # - apiary-persistent # GHC 8 & bounds + # - apiary-websockets # GHC 8 & bounds + # - apiary-cookie # GHC 8 & bounds + # - apiary-session # GHC 8 & bounds + # - apiary-clientsession # GHC 8 & bounds + # - apiary-authenticate # GHC 8 & bounds + # - apiary-eventsource # GHC 8 & bounds + # - apiary-mongoDB # GHC 8 & bounds + # - apiary-memcached # GHC 8 & bounds + # - types-compat # GHC 8 + # - web-routing # GHC 8 + # - bytestring-read # GHC 8 + # - memcached-binary # GHC 8 & bounds + # - barrier # GHC 8 + # - haddocset # GHC 8 + + "Kai Zhang @kaizhang": + - clustering + - matrices + + "Michel Boucey @MichelBoucey": + - IPv6Addr + - ip6addr + - cayley-client + - Spintax + - glabrous + - google-oauth2-jwt + + "koral koral@mailoo.org @k0ral": + - atom-conduit + - conduit-parse + - opml-conduit + - rss-conduit + - imm + - timerep + - xml-conduit-parse + + "Kostiantyn Rybnikov @k-bx": + - protocol-buffers + # - hprotoc # build failure https://github.com/k-bx/protocol-buffers/issues/45 + - protocol-buffers-descriptor + - ekg-core + - digits + - hbeanstalk + - iso3166-country-codes + - iso639 + - murmur-hash + - monoidal-containers + - regex-pcre + - string-combinators + - string-class + - SHA + - data-ordlist + - hedis + + "Rob O'Callahan ropoctl@gmail.com @rcallahan": + # - pipes-fastx # via pipes-attoparsec + # - pipes-illumina # via: pipes-bgzf + - seqalign + - thermonuc + - xlsior + + "John Lenz @wuzzeb": + - yesod-auth-account + - yesod-static-angular + - hspec-webdriver + - webdriver-angular + + "Sven Heyll @sheyll": + - b9 + - type-spec + - pretty-types + + # "Will Thompson @wjt": + # - bustle # build failure against haskell-src-exts https://github.com/vasylp/hgettext/issues/10 + + "Jakub Fijałkowski @jakubfijalkowski": + - hlibsass + - hsass + + "Robert Massaioli @robertmassaioli": + - range + + "Index Int @int-index": + - transformers-lift + - ether + - union + + "Stack Builders stackage@stackbuilders.com @stackbuilders": + - atomic-write + - hapistrano + - inflections + - twitter-feed + - cassava-megaparsec + - dotenv + - stache + + "Sergey Alirzaev @l29ah": + - monad-peel + - NineP + - Network-NineP + + "Oliver Charles @ocharles": + # - engine-io # bounds: aeson, websockets + - diff3 + # - digestive-functors-aeson # bounds: aeson, lens # via: digestive-functors + - exhaustive + - libsystemd-journal + - network-carbon + # - socket-io # bounds: aeson, via: engine-io + - tasty-rerun + - logging-effect + + "Antoni Silvestre @asilvestre": + # Test suite needs a running neo4j server with auth disabled + # unfortunately the cabal package name and the github repo don't have the exact same name + # package name is haskell-neo4j-client github name is haskell-neo4j-rest-client + - haskell-neo4j-client + + "Alexey Khudyakov @Shimuuar": + - histogram-fill + - fixed-vector + - fixed-vector-hetero + - type-level-numbers + + "Ryan Scott @RyanGlScott": + - base-orphans + - code-page + - deriving-compat + - echo + - generic-deriving + - hashmap + - invariant + - keycode + - lift-generics + - mtl-compat + - proxied + - text-show + - text-show-instances + + "Kirill Zaborsky @qrilka": + - xlsx + + "Matt Parsons @parsonsmatt": + - monad-logger-prefix + + "Matthew Pickering @mpickering": + - refact + # - servant-pandoc # bounds: pandoc-types, servant-docs + - ghc-exactprint + # - apply-refact + + # "Andrew Gibiansky @gibiansky": + # - ihaskell # GHC 8 + # - ihaskell-aeson # via: ihaskell + # - ihaskell-basic # via: ihaskell + # - ihaskell-blaze # via: ihaskell + # - ihaskell-charts # via: ihaskell + # - ihaskell-diagrams # via: ihaskell + # - ihaskell-hatex # via: ihaskell + # - ihaskell-juicypixels # via: ihaskell + # - ihaskell-magic # via: ihaskell + # - ihaskell-rlangqq # via: ihaskell + # - ihaskell-static-canvas # via: ihaskell + # - ghc-parser # GHC 8 + # - ipython-kernel # GHC 8 + + "Andrés Sicard-Ramírez @asr": + - Agda + + "James Cook @mokus0": + - dependent-sum + # - dependent-sum-template # bounds: dependent-sum + - dependent-map + - dice + - hstatsd + - misfortune + + "Timo von Holtz @tvh": + - haxl-amazonka + - hasql-migration + - servant-JuicyPixels + + "Artyom @neongreen": + - microlens + - microlens-platform + - microlens-mtl + - microlens-th + - microlens-ghc + - microlens-contra + - shortcut-links + - cheapskate-lucid + - cheapskate-highlight + - cmark-lucid + - cmark-highlight + - Spock-lucid + - charsetdetect-ae + - ilist + - text-all + + "Takano Akio tak@anoak.io @takano-akio": + - fast-builder + - filelock + - euphoria + + "Ashley Moni ashley.moni1@gmail.com @AshleyMoni": + - quadtree + + "Brian Lewis brian@lorf.org @bsl": + - bindings-GLFW + - GLFW-b + + "Niklas Hambüchen mail@nh2.me @nh2": + - hidapi + - iso8601-time + - loop + - netpbm + - network-house + - reinterpret-cast + # As dependencies of packages above + - attoparsec-binary + - storable-record + + "Brandon Martin @codedmart": + # - engine-io-wai # bounds: ghc, base + - rethinkdb + + "Michael Walker @barrucadu": + - both + - concurrency + - dpor + - dejafu + - async-dejafu + - hunit-dejafu + - tasty-dejafu + - irc-ctcp + - irc-conduit + - irc-client + + "Trevor Elliott @elliottt": + - irc + + "Dennis Gosnell @cdepillabout": + - emailaddress + - envelope + - from-sum + - hailgun + - hailgun-simple + # - ig # bounds: http-conduit, transformers + - natural-transformation + - opaleye-trans + - pretty-simple + - read-env-var + - yahoo-finance-api + + "Franklin Chen @FranklinChen": + - Ebnf2ps + + "Dmitry Ivanov @ethercrow": + - charsetdetect-ae + - compiler-errors + - docopt + - dynamic-state + - dyre + - io-storage + - oo-prototypes + - pointedlist + - word-trie + - xdg-basedir + # - yi # build failure https://github.com/commercialhaskell/stack/issues/2795 + - yi-core + # - yi-frontend-pango # build failure https://github.com/commercialhaskell/stack/issues/2795 + - yi-frontend-vty + - yi-fuzzy-open + - yi-ireader + - yi-keymap-cua + - yi-keymap-emacs + - yi-keymap-vim + - yi-language + - yi-misc-modes + - yi-mode-haskell + - yi-mode-javascript + - yi-rope + - yi-snippet + + "Tobias Bexelius @tobbebex": + - GPipe + + "Patrick Redmond @plredmond": + - GPipe-GLFW + + # "Csaba Hruska @csabahruska": + # - lambdacube-ir # bounds: aeson + # - lambdacube-gl # bounds: aeson, time # via: lambdacube-ir + # - lambdacube-compiler # bounds: aeson, megaparsec # via: lambdacube-ir + + "Spencer Janssen @spencerjanssen": + - Xauth + + "Sebastian de Bellefon @Helkafen": + - wai-middleware-metrics + + "Stefan Berthold": + - smallcaps + + "Gregory Collins @gregorycollins": + - hashtables + - io-streams + - openssl-streams + + "Andrew Cowie @afcowie": + - http-common + - http-streams + + # "Devan Stormont @stormont": + # - forecast-io # bounds: aeson 1.0 + + "Sean Hunt @ivan-m": + - fgl + - fgl-arbitrary + - graphviz + - wl-pprint-text + + "Sharif Olorin @olorin": + - quickcheck-text + - nagios-check + + "Peter Simons @peti": + - distribution-nixpkgs + - cabal2nix + - funcmp + - hackage-db + - hledger-interest + - hopenssl + - hsdns + - hsemail + - hsyslog + - jailbreak-cabal + - language-nix + - nix-paths + - streamproc + - titlecase + + "Mark Fine @markfine": + - postgresql-schema + # - sbp # build failure + + "Jinjing Wang @nfjinjing": + - moesocks + + "Gregory W. Schwartz @GregorySchwartz": + # - fasta # via pipes-attoparsec + # - diversity # via fasta + # - modify-fasta # via fasta + - tree-fun + - random-tree + - clumpiness + # - find-clumpiness # build failure against optparse-applicative https://github.com/GregorySchwartz/find-clumpiness/issues/1 + # - blosum # via fasta + + "Simon Marechal @bartavelle": + - compactmap + - stateWriter + - filecache + - pcre-utils + - strict-base-types + - withdependencies + - hruby + - language-puppet + - tar-conduit + # - stm-firehose # bounds: http-types, stm-conduit, transformers, wai, warp + # - hslogstash # bounds: aeson, lens, time, transformers # via: stm-firehose + + "Mark Karpov @mrkkrp": + - megaparsec + - htaglib + - slug + - path-io + - hspec-megaparsec + - plan-b + - zip + - JuicyPixels-extra + - identicon + - pagination + - data-check + - text-metrics + - tagged-identity + - req + - req-conduit + - cue-sheet + - wave + - flac + - flac-picture + + # "Thomas Bereknyei ": + # - multiplate # bounds: transformers + + "Sumit Sahrawat @sumitsahrawat": + - plot-gtk-ui + # - calculator # bounds: ghc, base + + "Emmanuel Touzery @emmanueltouzery": + - app-settings + - hsexif + + "Nickolay Kudasov @fizruk": + - http-api-data + # - smsaero # build failure against aeson https://github.com/GetShopTV/smsaero/issues/12 + - swagger2 + - servant-swagger + + "Jared Tobin @jtobin": + - mwc-probability + - mcmc-types + - mighty-metropolis + - speedy-slice + - hasty-hamiltonian + - declarative + - sampling + - flat-mcmc + + "Facundo Domínguez @facundominguez": + - distributed-process + # - distributed-process-async # GHC 8 + # - distributed-process-client-server # GHC 8 + # - distributed-process-execution # GHC 8 + # - distributed-process-extras # GHC 8 + # - distributed-process-registry # GHC 8 + # - distributed-process-supervisor # GHC 8 + # - distributed-process-task # GHC 8 + - distributed-process-simplelocalnet + - distributed-static + - network-transport + - network-transport-tcp + - network-transport-inmemory + - network-transport-composed + - rank1dynamic + + # "Alexander Vershilov @qnikst": + # - imagemagick # https://github.com/qnikst/imagemagick/issues/41 + # - network-transport-zeromq # bounds: ghc # via: distributed-process-tests + + "Takahiro Himura @thimura": + - lens-regex + # - twitter-conduit # bounds: http-conduit 2.2 # via: twitter-types, twitter-types-lens + # - twitter-types # via: derive + # - twitter-types-lens # via: twitter-types + + # "Robbin C. robbinch": + # - zim-parser # via: lzma + + "David Wiltshire @dave77": + # on behalf of Alexey Karakulov @w3rs + - hashable-time + + # "Tim Baumann @timjb": + # - engine-io-yesod # bounds: ghc, base + + "Tim McGilchrist @tmcgilchrist": + - riak + - airship + + "Yuras Shumovich @Yuras": + - pdf-toolbox-core + - pdf-toolbox-content + - pdf-toolbox-document + - io-region + - scanner + + "Stanislav Chernichkin @schernichkin": + - partial-isomorphisms + - vinyl + + "Christoph Breitkopf @bokesan": + - IntervalMap + + "Michele Lacchia @rubik": + - docopt + - pathwalk + + "John Galt @centromere": + - cacophony + - pipes-cacophony + - blake2 + - nfc + + "Adam Curtis @kallisti-dev": + - webdriver + + "Luke Iannini @lukexi": + - inline-c + - inline-c-cpp + - ekg + + # "Emin Karayel @ekarayel": + # - sync-mht # bounds: ghc, base + + "Michael Schröder @mcschroeder": + - ctrie + - ttrie + + "Greg Weber @gregwebs": + - base-noprelude + + "Andrew Lelechenko @Bodigrim": + - exp-pairs + + "Stefan Kersten @kaoskorobase": + - hsndfile + - hsndfile-vector + + "yihuang @yihuang": + - tagstream-conduit + + # "Johannes Hilden @johanneshilden": + # Missing test files https://github.com/fpco/stackage/issues/1001 - hashids + + # "Joe Hermaszewski @expipiplus1": + # - exact-real # bounds: ghc, base + + # "Jonatan Sundqvist jonatanhsundqvist@gmail.com @SwiftsNamesake": + # - Cartesian # bounds: lens + # - Michelangelo # bounds: lens # via: Wavefront + + # "Henry J. Wylde @hjwylde": + # - git-fmt # bounds: optparse-applicative 0.13 + # - omnifmt # bounds: optparse-applicative 0.13 + # - werewolf # bounds: aeson, extra, lens + # - werewolf-slack # bounds: aeson, extra, http-client, http-client-tls # via: werewolf + + "Will Sewell @willsewell": + - benchpress + - pusher-http-haskell + + "Yorick Laupa yo.eight@gmail.com @YoEight": + - eventstore + - dotnet-timespan + + "Sebastian Dröge slomo@coaxion.net @sdroege": + - conduit-iconv + - conduit-connection + + "Andrew Rademacher @AndrewRademacher": + - aeson-casing + - graylog + - parsec-numeric + + "Callum Rogers @CRogers": + - should-not-typecheck + + "Mihaly Barasz klao@nilcons.com @klao": + - lens-datetime + - tz + - tzdata + + "Timothy Klim @TimothyKlim": + - pkcs10 + + "David Luposchainsky @quchen": + - binary-typed + - pgp-wordlist + - show-prettyprint + + "Jeremy Shaw @stepcut": + - boomerang + - clckwrks + - clckwrks-cli + - clckwrks-plugin-page + - clckwrks-plugin-media + - clckwrks-theme-bootstrap + - hackage-whatsnew + - happstack-authenticate + - happstack-clientsession + - happstack-hsp + - happstack-jmacro + - happstack-server + - happstack-server-tls + - hsx-jmacro + - ixset + - reform + - reform-blaze + - reform-hamlet + - reform-happstack + - reform-hsp + - userid + - web-plugins + - web-routes + - web-routes-boomerang + - web-routes-happstack + - web-routes-hsp + - web-routes-th + - web-routes-wai + - hsx2hs + + "Pedro Tacla Yamada @yamadapc": + - ascii-progress + - drawille + # - extract-dependencies # via: package-description-remote + - file-modules + - frontmatter + - read-editor + - hspec-setup + # - hzulip # bounds: aeson, stm-conduit + - list-prompt + # - memoization-utils # bounds: time + # - package-description-remote # via: wreq + - projectroot + - questioner + # - stack-run-auto # via: extract-dependencies, wreq + # - hpack-convert # bounds: aeson 1.0 + - language-dockerfile + + "Pascal Hartig @passy": + - giphy-api + - optparse-text + + "rightfold @rightfold": + - open-browser + + "Denis Redozubov @dredozubov": + - tracy + # - hreader-lens # bounds: hreader + + "Yuji Yamamoto @igrep": + - yes-precure5-command + + "Hans-Christian Esperer @hce": + - avwx + - wai-session-postgresql + + "Haisheng Wu @freizl": + - hoauth2 + + "Falko Peters @informatikr": + - scrypt + + "Jakub Waszczuk @kawu": + - dawg-ord + + "Amit Levy @alevy": + # - postgresql-orm # 0.4.1 compilation failure + - simple + - simple-templates + - simple-session + # - simple-postgresql-orm # via: postgresql-orm + + "Sergey Astanin @astanin": + # Stackage server uses Ubuntu 16.04 which ships libzip-1.0.1. + # Haskell packages should match major.minor versions of the C library. + - bindings-libzip >= 1.0 + - LibZip >= 1.0 + + "Anthony Cowley @acowley": + - Frames + - hpp + + "Takayuki Muranushi @nushio3": + - binary-search + - unicode-show + + "Jason Shipman @jship": + # on behalf of Boris Sukholitko @bosu + - pure-cdb + + "Suhail Shergill @suhailshergill": + - extensible-effects + + # "Justus Adam @JustusAdam": + # - mustache # via: wreq + + "Cindy Wang @CindyLinz": + - NoTrace + - linked-list-with-iterator + + "Jean-Philippe Bernardy @jyp": + - polynomials-bernstein + - typography-geometry + + "John MacFarlane @jgm": + - hsb2hs + - cmark + - texmath + - highlighting-kate + - pandoc-types + - zip-archive + - doctemplates + - pandoc + - pandoc-citeproc + + "Karun Ramakrishnan @karun012": + - doctest-discover + + "Elie Genard @eliegenard": + - turtle-options + + # "Ruey-Lin Hsu @petercommand": + # - MASMGen # bounds: ghc, base + + "Ozgun Ataman ozgun.ataman@soostone.com @ozataman": + - string-conv + - rng-utils + - rotating-log + - ua-parser + - hs-GeoIP + - retry + - katip + - katip-elasticsearch + + "Sid Kapur sidharthkapur1@gmail.com @sid-kap": + - tuple + - OneTuple + - SVGFonts + - Chart-diagrams + + # "Aaron Levin @aaronmblevin": + # - haskell-kubernetes # bounds: QuickCheck, aeson, http-api-data, lens, servant, servant-client + + "Aaron Levin @aaronmblevin": + - free-vl + + "Kazuo Koga @kkazuo": + - xlsx-tabular + + "Mikhail Glushenkov @23Skidoo": + - Cabal + - cabal-install + - pointful + + "Lennart Kolmodin @kolmodin": + - binary-bits + + "Nicolas Trangez @NicolasT": + - reedsolomon + + "Alp Mestanogullari @alpmestan": + - taggy + - taggy-lens + + "Alex McLean @yaxu": + - tidal + + "Kei Hibino @khibino": + - relational-query + - relational-query-HDBC + - persistable-types-HDBC-pg + - relational-record + - text-ldap + - debian-build + - json-rpc-generic + + "wren romano @wrengr": + - bytestring-lexing + - bytestring-trie + - data-or + - exact-combinatorics + - logfloat + - pointless-fun + - prelude-safeenum + - stm-chans + - unification-fd + - unix-bytestring + + # "Carlo Hamalainen @carlohamalainen": + # - ghc-imported-from # bounds: process-streaming # via: ghc-mod + + "Fraser Tweedale @frasertweedale": + - jose + + # "Yutaka Nishimura @ynishi": + # - atndapi # https://github.com/ynishi/atndapi/issues/1 + + "Yoshikuni Jujo @YoshikuniJujo": + - zot + - yjtools + - io-machine + + "Jan Gerlinger @JanGe": + - irc-dcc + - xdcc + + "John Ky newhoggy@gmail.com @newhoggy": + - hw-bits + - hw-conduit + - hw-diagnostics + - hw-json + - hw-parser + - hw-prim + - hw-rankselect + - hw-succinct + + # "Ismail Mustafa @ismailmustafa": + # - handwriting # via: wreq + + "Stephen Diehl @sdiehl": + - protolude + - repline + # - picosat # https://github.com/sdiehl/haskell-picosat/issues/6 + + # "Daishi Nakajima @nakaji_dayo": + # - yesod-job-queue # build failure https://github.com/nakaji-dayo/yesod-job-queue/issues/10 + + # "Braden Walters @meoblast001": + # - hakyll-sass # bounds: aeson-pretty + + "Patrick Thomson @helium": + - postgresql-transactional + + "Tom Murphy @amindfv": + # - vivid # 0.2.0.5 compilation failure + # - midair # bounds: ghc, base + - nano-erl + + "Toshio Ito @debug-ito": + - fold-debounce + - fold-debounce-conduit + - stopwatch + - wikicfp-scraper + - wild-bind + - wild-bind-x11 + - wild-bind-indicator + - wild-bind-task-x11 + + "Cies Breijs @cies": + - htoml + + "Martijn Rijkeboer @mrijkeboer": + - protobuf-simple + + "David Reaver @jdreaver": + - oanda-rest-api + - stratosphere + + "Alexey Rodiontsev @klappvisor": + - telegram-api + + "Iñaki García Etxebarria @garetxe": + - gi-atk + - gi-cairo + - gi-gdk + - gi-gdkpixbuf + - gi-gio + - gi-glib + - gi-gobject + - gi-gtk + - gi-pango + - gi-soup + - gi-javascriptcore == 3.0.* + - gi-webkit + - haskell-gi + - haskell-gi-base + + "Brandon Simmons @jberryman": + - directory-tree + + "Ian Grant Jeffries @seagreen": + - hjsonpointer + - hjsonschema + + "Drew Hess @dhess": + - hpio + + "Richard Eisenberg @goldfirere": + - th-desugar + - singletons + - units + - units-defs + - HUnit-approx + - units-parser + + "Doug McClean @dmcclean": + - dimensional + - exact-pi + - numtype-dk + + "Bjorn Buckwalter @bjornbm": + - leapseconds-announced + + "Pavel Ryzhov @paulrzcz": + - hquantlib + - persistent-redis + + "Henri Verroken @hverr": + - cache + + "Cliff Harvey @BlackBrane": + - ansigraph + - quantum-random + + "Tebello Thejane @tebello-thejane": + - bitx-bitcoin + + "Andrew Lelechenko @Bodigrim": + - exp-pairs + - fast-digits + + # "Greg Hurrell @wincent": + # - docvim # compilation failure: https://github.com/wincent/docvim/issues/30 + + "Ashley Yakeley @AshleyYakeley": + - countable + + "Victor Denisov @VictorDenisov": + - mongoDB + - bson + + "Alexis King @lexi-lambda": + - test-fixture + - text-conversions + - th-to-exp + - type-assertions + + "Patrick Chilton @chpatrick": + - solga + - solga-swagger + - clang-pure + - webrtc-vad + + "Michal Konecny @michalkonecny": + - hmpfr + + "Bartosz Nitka @niteria": + - haskell-packages + - oeis + + "Gergely Patai @cobbpg": + - elerea + + "Christopher Wells @ExcalburZero": + - pixelated-avatar-generator + + "Allele Dev @queertypes": + - freer + - wai-request-spec + + "Dominic Orchard @dorchard": + - array-memoize + - camfort + - codo-notation + - fortran-src + # - ixmonad # 0.57 Compilation failure https://github.com/fpco/stackage/pull/1710#issuecomment-235067168 + - language-fortran + + "Philipp Schuster @phischu": + - haskell-names + + "Shao Cheng @TerrorJack": + - simple-download + - encoding-io + + "Anton Gushcha @ncrashed": + - aeson-injector + + # "Rune K. Svendsen @runeks": + # - bitcoin-payment-channel # bounds: QuickCheck, aeson 1.0 # via: haskoin-core + + "Al Zohali @zohl": + - servant-auth-cookie < 0.4.1 || > 0.4.1 + + "Joachim Fasting @joachifm": + - libmpd + + "Moritz Kiefer @cocreature": + - lrucaching + + "Thierry Bourrillon @tbourrillon": + - hocilib + + # "Matthias Herrmann @2chilled": + # - scrape-changes # via: wreq + + "Daniel Mendler @minad": + - quickcheck-special + - writer-cps-mtl + - writer-cps-transformers + - wl-pprint-annotated + - wl-pprint-console + - console-style + - unlit + - intro + + "Taras Serduke @tserduke": + - do-list + + "Travis Whitaker ": + - cpuinfo + - lmdb + - rdf + + "Iago Abal ": + - bv + + "Juan Pedro Villa Isaza @jpvillaisaza": + - licensor + + "Florian Hofmann fho@f12n.de @fhaust": + - vector-split + + "Alex Mason @Axman6": + - foldl-statistics + - amazonka-s3-streaming + + "Ondrej Palkovsky @ondrap": + - json-stream + + "Philipp Balzarek ": + - xml-picklers + + "Lennart Spitzner lsp@informatik.uni-kiel.de @lspitzner": + - multistate + - pqueue + + "Ryan Mulligan @ryantm": + - hdbc-mysql + + "Tony Day @tonyday567": + - chart-unit + + "Iphigenia Df @iphydf": + - data-msgpack + - network-msgpack-rpc + + "Dino Morelli @dino-": + - epub-metadata + - hsinstall + - tce-conf + + "Jonathan Fischoff ": + - threads-extra + - clock-extras + - next-ref + + "Bernie Pope @bjpop": + - language-python + + "Mahdi Dibaiee ": + - picedit + - mathexpr + - sibe + + "Alexis Williams @sasinestro": + - stb-image-redux + - wavefront-obj + + "XT @xtendo-org": + - rawfilepath + "Konstantin Zudov @zudov": + - html-email-validate + + "Carl Baatz @cbaatz": + - atom-basic + + "Reuben D'Netto ": + - glob-posix + + "Kadzuya Okamoto @arowM": + - type-level-kv-list + - heterocephalus + + "Marcin Tolysz @tolysz": + - rawstring-qm + + "Tom Nielsen @glutamate": + - datasets + + "Hyunje Jun @noraesae": + - line + + "Hannes Saffrich @m0rphism": + - dmenu + - dmenu-pmount + - dmenu-pkill + - dmenu-search + - printcess + + "Alexey Kuleshevich @lehins": + - hip + + "Hans-Peter Deifel @hpdeifel": + - hledger-iadd + + "Roy Levien @orome": + - crypto-enigma + + "Boldizsár Németh @nboldi": + - instance-control + - references + - haskell-tools-ast + - haskell-tools-backend-ghc + - haskell-tools-rewrite + - haskell-tools-prettyprint + #- haskell-tools-refactor + - haskell-tools-demo + #- haskell-tools-cli + - haskell-tools-daemon + - haskell-tools-debug + + "David Fisher @ddfisher": + - socket-activation + + # If you stop maintaining a package you can move it here. + # It will then be disabled if it starts causing problems. + # See https://github.com/fpco/stackage/issues/1056 + "Abandoned packages": + - curl + + # Purescript + - bower-json + - boxes + - pattern-arrows + # - purescript # BLOCKED aeson-1.0 + + - type-list + - vinyl-utils + - language-lua2 # https://github.com/mitchellwrosen/language-lua2/issues/4 + + # If you want to make sure a package is removed from stackage, + # place it here with a `< 0` constraint and send a pull + # request. This will tell us if other packages would be + # affected. Packages will be kept in this list indefinitely so + # that new packages depending on it will be flagged as well. + "Removed packages": [] + + "GHC upper bounds": + # Need to always match the version shipped with GHC + - Win32 == 2.3.1.1 "Stackage upper bounds": - # https://github.com/fpco/stackage/issues/537 - - zlib < 0.6 + # https://github.com/fpco/stackage/issues/2037 + - haskell-src-exts < 1.19 - # https://github.com/fpco/stackage/issues/549 - - tttool < 1.4 + # https://github.com/fpco/stackage/issues/2042 + - network-multicast < 0.2 - # https://github.com/fpco/stackage/issues/572 - - attoparsec < 0.13 - - aeson < 0.8.1.0 - - jose-jwt < 0.6 + # https://github.com/haskell/vector/issues/142 + - primitive < 0.6.2.0 - # https://github.com/fpco/stackage/issues/577 - - MonadRandom < 0.4 + # https://github.com/fpco/stackage/issues/2127 + - leapseconds-announced < 2017.0.0.1 - # https://github.com/fpco/stackage/issues/581 - - xml-conduit < 1.3 - - html-conduit < 1.2 + # https://github.com/fpco/stackage/issues/2032 + - datasets < 0.2.2 - # https://github.com/fpco/stackage/issues/588 - - semigroupoids < 4.5 - - semigroupoid-extras < 4.5 - - lens < 4.10 + # https://github.com/fpco/stackage/issues/2136 + - X11 < 1.7 - # https://github.com/fpco/stackage/issues/590 - - bifunctors < 5 - - profunctors < 5 - - machines < 0.5 - - free < 4.12 + # https://github.com/fpco/stackage/issues/2177 + - aeson < 1.1.0.0 - # https://github.com/fpco/stackage/issues/591 - - th-orphans < 0.12 + # https://github.com/fpco/stackage/issues/2180 + - MonadRandom < 0.5 - # https://github.com/fpco/stackage/issues/602 - - errors < 2 + # https://github.com/fpco/stackage/issues/2184 + # https://github.com/ekmett/hashable-extras/pull/3 + - hashable < 1.2.5.0 - # https://github.com/fpco/stackage/issues/610 - - either < 4.4 + # https://github.com/fpco/stackage/issues/2194 + - vector < 0.12.0.0 - # https://github.com/fpco/stackage/issues/615 - - syb < 0.5 + # https://github.com/fpco/stackage/issues/2197 + - brick < 0.16 - # https://github.com/fpco/stackage/issues/622 - - doctest < 0.10 - - # https://github.com/fpco/stackage/issues/627 - - persistent < 2.2 - - persistent-mysql < 2.2 - - persistent-postgresql < 2.2 - - persistent-sqlite < 2.2 +# end of packages # Package flags are applied to individual packages, and override the values of # global-flags package-flags: + brick: + demos: true + mersenne-random-pure64: small_base: false @@ -1129,371 +2794,440 @@ package-flags: tar: old-time: false - # https://github.com/fpco/stackage/pull/482#issuecomment-83635207 - jose-jwt: - doctest: false - time-locale-compat: old-locale: false + th-data-compat: + template-haskell-210: false + th-reify-compat: + template-haskell-210: false + HsOpenSSL: fast-bignum: false cabal-rpm: old-locale: false + NineP: + bytestring-in-base: false + + nix-paths: + allow-relative-paths: true + + fay: + test: true + + reedsolomon: + llvm: false + + # https://github.com/ghcjs/jsaddle/issues/9 + jsaddle: + gtk3: true + + ghc-heap-view: + ghc_7_7: false + ghc_8_0: true + +# end of package-flags + +# Special configure options for individual packages + +configure-args: + jni: + - --extra-lib-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server + - --extra-include-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/include + - --extra-include-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/include/linux + jvm: + - --extra-lib-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server + - --extra-include-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/include + - --extra-include-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/include/linux + sparkle: + - --extra-lib-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server + - --extra-include-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/include + - --extra-include-dirs + - /usr/lib/jvm/java-8-openjdk-amd64/include/linux + hocilib: + - --extra-lib-dirs + - /usr/local/lib + +# end of configure-args + + +# Used for packages that cannot be built on Linux +skipped-builds: + - hfsevents + - Win32 + - Win32-notify + - Win32-extras + +# end of skipped-builds + + # By skipping a test suite, we do not pull in the build dependencies +# Packages should only be added here if required by `stackage-curator check' +# or if Setup fails because of missing foreign libraries. +# Otherwise place them in expected-test-failures. skipped-tests: - - ReadArgs # old version of hspec - - ersatz # old QuickCheck - - punycode # pulls in encoding + # Outdated dependencies + # These can periodically be checked for updates; + # just remove these lines and run `stackage-curator check' to verify. + # # HUnit 1.5 + - GLFW-b + - Glob - HTTP - - Octree - - options - - hasql + - bindings-GLFW + - case-insensitive + - darcs + - exception-transformers + - extensible-effects + - fclabels + - language-ecmascript + - lifted-base + - parsec + - rank1dynamic + - threads + - tz + - tzdata + - uuid + - uuid-types + # # Other outdated dependencies + - Cabal # QuickCheck 2.9 + - ReadArgs # https://github.com/rampion/ReadArgs/issues/8 + - bytestring-handle # QuickCheck 2.9 + - cases # https://github.com/nikita-volkov/cases/pull/3 + - chell # options & via chell-quickcheck + - clay # hspec 2.3 + - ed25519 # QuickCheck 2.9 + - fgl # hspec 2.3 + - fgl-arbitrary # hspec 2.3 + - hasql # QuickCheck 2.9 + - hastache # https://github.com/lymar/hastache/pull/53 + - heaps # https://github.com/ekmett/heaps/pull/8 + - hyphenation # https://github.com/ekmett/hyphenation/pull/10 + - next-ref # hspec 2.3 + - point-octree # hspec 2.2.4 https://github.com/mlitchard/point-octree/issues/1 + - servant-mock # hspec-wai 0.8 + - snap # QuickCheck 2.9 + - state-plus # QuickCheck 2.9 + - system-filepath # QuickCheck 2.9 via chell-quickcheck + - terminal-progress-bar # fixed on master, depends on older version of itself + - vector # https://github.com/haskell/vector/commit/31edb3fc51e76facc1e291f1e9e721663d91dbd8 - # require old hspec - - bloodhound - - fb + # Transitive outdated dependencies + # These packages + # These can also be checked for updates periodically. + - MissingH # via testpack https://github.com/jgoerzen/testpack/issues/11 + - clustering # via RLang-QQ via HList https://github.com/kaizhang/clustering/issues/2 (also sent e-mail to HList maintainer) + - options # QuickCheck via chell-quickcheck - # require old tasty - - diagrams-haddock + # Blocked by stackage upper bounds. These can be re-enabled once + # the relevant stackage upper bound is lifted. - # requires old hsql - - hasql-postgres - # https://github.com/pa-ba/compdata/issues/4 - - compdata + # Runtime issues + - blank-canvas # Never finishes https://github.com/ku-fpg/blank-canvas/issues/73 + - binary-search # Never finishes https://github.com/nushio3/binary-search/issues/2 + - jsaddle # Never finishes without framebuffer https://github.com/ghcjs/jsaddle/issues/9 - # Too lazy to keep the test dependencies up to date - - base-prelude - - cases - - focus - - hasql - - hasql-backend - - hasql-postgres - - list-t - - mtl-prelude - - neat-interpolation - - partial-handler - - postgresql-binary - - slave-thread - - stm-containers + # Missing foreign library + - symengine # symengine - # Cloud Haskell out-of-date dependencies - - distributed-process-async - - distributed-process-client-server - - distributed-process-extras - # https://github.com/fpco/stackage/pull/380#issuecomment-68060871 - - Rasterific + # Wontfix. The maintainer chose to keep these broken/outdated, only + # re-enable if requested. + - postgresql-binary # https://github.com/nikita-volkov/postgresql-binary/issues/6#issuecomment-243063139 - # https://github.com/Soostone/retry/issues/18 - - retry + - optparse-applicative # https://github.com/pcapriotti/optparse-applicative/issues/228 - # Just a temporary package with a flimsy, inherited test suite - - Cabal-ide-backend - # QuickCheck 2.8 - - bson - - cabal-install - - exceptions - - graphviz - - pandoc - - testpack - - vector - - Cabal - - MissingH - - # Upper bound on src-log, see: https://github.com/fpco/stackage/issues/509 - - language-c-quote +# end of skipped-tests # Tests which we should build and run, but which are expected to fail. We # should not fail a build based on a test failure for one of these packages. expected-test-failures: - # Requires an old version of WAI and Warp for tests - - HTTP - # https://github.com/bos/statistics/issues/42 - - statistics - - # https://github.com/kazu-yamamoto/simple-sendfile/pull/10 - - simple-sendfile - - # Tests require shell script and are incompatible with sandboxed package - # databases - - HTF - - # Unfortunately network failures seem to happen haphazardly - - network - - # Test suite takes too long to run on some systems - - punycode - - # Requires a Facebook app. - - fb - - # https://github.com/vincenthz/language-java/issues/10 - - language-java - - - threads - - crypto-conduit - - # https://github.com/basvandijk/concurrent-extra/issues/ - - concurrent-extra - - # https://github.com/skogsbaer/xmlgen/issues/2 - - xmlgen - - # Requires a locally running PostgreSQL server with appropriate users - - postgresql-simple - - # Some kind of Cabal bug when trying to run tests - - thyme - - - shake - - # Problems with doctest and sandboxing - - warp - - wai-logger - - # https://github.com/fpco/stackage/issues/163 - - hTalos - - # https://github.com/bos/math-functions/issues/25 - - math-functions - - # Requires too old a version of test-framework - - time - - # Cloud Haskell tests seem to be unreliable - - distributed-process - - lockfree-queue - - network-transport-tcp - - # https://github.com/fpco/stackage/issues/226 - - options - - # Depends on a missing graphviz executable - - graphviz - - # No AWS creds available - - aws - - # Not sure why... - - singletons - - # https://github.com/BioHaskell/octree/issues/4 - - Octree - - # https://github.com/jmillikin/haskell-filesystem/issues/3 - - system-filepath - - # Requires a running webdriver server - - webdriver - - webdriver-snoy - - # Weird conflicts with sandboxing - - ghc-mod - - ghcid - - # Requires locally running server - - bloodhound - - # Requires SAT solver and old QuickCheck - - ersatz - - # Failing doctests - - bits - - # No server running - - amqp - - # Often run out of inotify handles - - fsnotify - - # Requires a correctly set up Postgres instance - - opaleye - - # weird problems with cabal test - - cautious-file - - # https://github.com/haskell/cabal/pull/2277 - - cabal-install - - # https://github.com/haskell/network-uri/issues/10 - - network-uri - - # https://github.com/fpco/stackage/issues/376 - - rematch - - # https://github.com/haskell-distributed/distributed-process-supervisor/issues/1 - - distributed-process-supervisor - - # Fails sporadically + # Intermittent failures or unreliable. These tests may pass when + # re-enabled, but will eventually fail again. Only remove these + # from expected-failures if we know a fix has been released. + - aeson-lens # https://github.com/tanakh/aeson-lens/issues/10 + - cabal-debian # https://github.com/ddssff/cabal-debian/issues/50 - crypto-numbers + - css-text # 0.1.2.2 https://github.com/yesodweb/css-text/issues/10 + - distributed-process + - distributed-process-execution # https://github.com/haskell-distributed/distributed-process-execution/issues/2 - distributed-process-task + - fsnotify # Often runs out of inotify handles + - idris # https://github.com/fpco/stackage/issues/1382 + - ihaskell # https://github.com/gibiansky/IHaskell/issues/551 + - math-functions # https://github.com/bos/math-functions/issues/25 + - network # Unfortunately network failures seem to happen haphazardly + - nsis # Intermittent on non-Windows systems + - pandoc-citeproc # https://github.com/jgm/pandoc-citeproc/issues/172 + - spdx # https://github.com/phadej/spdx/issues/8 + - statistics # https://github.com/bos/statistics/issues/42 + - haskell-tools-refactor # https://github.com/haskell-tools/haskell-tools/issues/231 + - foldl-statistics # https://github.com/data61/foldl-statistics/issues/2 - # https://github.com/vincenthz/hs-crypto-pubkey/issues/17 - - crypto-pubkey + # Timeouts + # These tests sometimes take too long and hit the stackage build + # servers time limit so these shouldn't be removed from + # expected-tests unless we know a fix has been released. + - cabal-helper + - generic-random + - lens + - graphviz + - punycode + - zip - # https://github.com/kazu-yamamoto/unix-time/issues/29 - - unix-time - - # Tests can fail when the build plan fails, which happens arbitrarily. - - stackage - - # https://github.com/TomMD/DRBG/issues/7 - - DRBG - - # https://github.com/bos/wreq/issues/53 - - wreq - - # Requires local database running - - rethinkdb-client-driver - - # https://github.com/haskell-distributed/distributed-process-execution/issues/2 - - distributed-process-execution - - # Seems to depend on mtl being installed in user package database, which - # isn't always the case (e.g., build server) - - happy - - # https://github.com/jberryman/directory-tree/issues/4 - - directory-tree - - # https://github.com/ndmitchell/hoogle/issues/101 - - hoogle - - # https://github.com/myfreeweb/gitson/issues/1 - - gitson - - # https://github.com/jcristovao/enclosed-exceptions/issues/6 - - enclosed-exceptions - - # Expects a running PostgreSQL server - - users-postgresql-simple - - # Problems with linking with system libraries on Ubuntu 12.04 - - nettle - - # Requires locally running services - - network-anonymous-i2p - - # Tests not reliable on non-Windows systems - - nsis - - # Requires running server - - consul-haskell - - hedis - - redis-io - - # https://code.google.com/p/scrapyourboilerplate/issues/detail?id=26&thanks=26&ts=1430372304, GHC 7.10 - - syb - - # https://github.com/lymar/hastache/issues/47 GHC 7.10 - - hastache - - # https://github.com/simonmar/alex/issues/62 GHC 7.10 - - alex - - # https://github.com/haskell-suite/haskell-names/issues/63 GHC 7.10 - - haskell-names - - # https://github.com/ekmett/hyperloglog/issues/10 GHC 7.10 - - hyperloglog - - # https://github.com/acid-state/safecopy/issues/25 GHC 7.10 - - safecopy - - # https://github.com/ekmett/linear/issues/75 GHC 7.10 - - linear - - # https://github.com/haskell/haddock/issues/390 GHC 7.10 - - haddock-library - - # https://github.com/ekmett/machines/issues/44 - - machines - - # https://github.com/haskell/ghc-events/issues/9 - - ghc-events - - # https://github.com/ekmett/parsers/issues/47 - - parsers - - # Requires a running server + # Requires running servers, accounts, or a specific + # environment. These shouldn't be re-enabled unless we know a fix + # has been released. + - mysql-haskell # Requires local mysql server with a test account, and binlog enabled. + - GLFW-b # X + - HTF # Requires shell script and are incompatible with sandboxed package databases + - HaRe # # Needs ~/.ghc-mod/cabal-helper https://github.com/fpco/stackage/pull/906 + - amqp + - aws # AWS Credentials + - bindings-GLFW # Expects running X server - bitcoin-api - bitcoin-api-extra + - bitcoin-api-extra + - bloodhound # ElasticSearch + - cabal-install + - consul-haskell + - dbmigrations # PostgreSQL + - dns # https://github.com/kazu-yamamoto/dns/issues/29 + - drifter-postgresql # PostgreSQL + - etcd # etcd https://github.com/fpco/stackage/issues/811 + - eventstore # Event Store + - fb # Facebook app + - ghc-imported-from # depends on haddocks being generated first https://github.com/fpco/stackage/pull/1315 + - ghc-mod # https://github.com/DanielG/ghc-mod/issues/611 + - gitson # 0.5.2 error with git executable https://github.com/myfreeweb/gitson/issues/1 + - gitson # https://github.com/myfreeweb/gitson/issues/1 + - happy # Needs mtl in the user package DB + - haskell-neo4j-client # neo4j with auth disabled + - hasql # PostgreSQL + - hasql-transaction # PostgreSQL + - hedis + - hocilib # oracle + - hworker + - jvm + - katip-elasticsearch # elasticsearch + - log # ElasticSearch + - mangopay # https://github.com/prowdsponsor/mangopay/issues/30 + - memcached-binary # memcached + - mongoDB # mongoDB - https://github.com/mongodb-haskell/mongodb/issues/61 + - mysql # MySQL + - mysql-simple # MySQL + - network-anonymous-i2p + - opaleye # PostgreSQL + - persistent-redis # redis - https://github.com/fpco/stackage/pull/1581 + - pipes-mongodb + - postgresql-query # PostgreSQL + - postgresql-simple # PostgreSQL + - purescript # git 128 https://github.com/purescript/purescript/issues/2292 + - redis-io + - rethinkdb + - rethinkdb-client-driver + - riak + - serialport # "The tests need two serial ports as command line arguments" https://github.com/jputcu/serialport/issues/30 + - serversession-backend-redis # redis + - shake # Needs ghc on $PATH with some installed haskell packages + - singletons # Needs ghc on $PATH with som installed haskell packages + - users-postgresql-simple # PostgreSQL + - wai-cors # PhantomJS + - wai-session-postgresql # PostgreSQL + - webdriver-angular # webdriver server + - yahoo-finance-api # Requires being able to access Yahoo Finance API - # https://github.com/ekmett/semigroupoids/issues/34 - - semigroupoids + # Test executable requires arguments + - hpqtypes - # https://github.com/kazu-yamamoto/dns/issues/29 - - dns + # Deprecated + # Eventually we'll have to disable these packages completely. + - doctest-prop # https://github.com/bitemyapp/bloodhound/issues/146 + - system-filepath # https://github.com/jmillikin/haskell-filesystem/issues/3 - # https://github.com/afcowie/http-streams/issues/80 - - http-streams + # Missing test files in sdist + # Hopefully gets fixed in the next release... + - angel # https://github.com/MichaelXavier/Angel/issues/43 + - camfort # 0.900 https://github.com/camfort/camfort/issues/41 + - crypto-pubkey # https://github.com/vincenthz/hs-crypto-pubkey/issues/23 + - ghc-events # https://github.com/haskell/ghc-events/issues/9 + - graylog # 0.1.0.1 https://github.com/fpco/stackage/pull/1254 + - haskell-names # 0.7.0 https://github.com/haskell-suite/haskell-names/issues/78 + - rematch # No issue tracker, sent e-mail to maintainer https://github.com/fpco/stackage/issues/376 + - xlsior # https://github.com/rcallahan/xlsior/issues/1 + - ginger # https://bitbucket.org/tdammers/ginger/issues/1/test-suite-failure-due-to-missing-test + - yi-keymap-vim # https://github.com/yi-editor/yi/issues/954 + + # Assertion failures, these can be real bugs or just limitations + # in the test cases. + - DRBG # https://github.com/TomMD/DRBG/issues/7 + - cayley-client # https://github.com/MichelBoucey/cayley-client/issues/2 + - clash-prelude # 0.10.14 Runtime errors https://github.com/clash-lang/clash-prelude/issues/57 + - direct-sqlite # 2.3.17 https://github.com/IreneKnapp/direct-sqlite/issues/63 + - ed25519 # 0.0.5.0 https://github.com/thoughtpolice/hs-ed25519/issues/15 + - nettle # https://github.com/stbuehler/haskell-nettle/issues/8 + - th-printf # 0.3.1 https://github.com/pikajude/th-printf/issues/3 + - wreq # https://github.com/bos/wreq/issues/53 + - xmonad # 0.12 https://github.com/xmonad/xmonad/issues/36 + + # Compilation failures + - ListLike # No issue tracker, e-mail sent to maintainer + - dbus # 0.10.12 No issue tracker, e-mail sent to maintainer + - hspec-expectations-pretty-diff # GHC 8 issue not reported upstream since issue tracker disabled + - jose-jwt # doctest ambiguity https://github.com/fpco/stackage/issues/2169 + - servant-server # 0.9.1.1 due to hspec-wai-0.8.0 https://github.com/haskell-servant/servant/issues/643 + - sourcemap # https://github.com/chrisdone/sourcemap/issues/3 + - text-ldap # # https://github.com/khibino/haskell-text-ldap/issues/1 + - thyme # https://github.com/liyang/thyme/issues/50 + - tries # https://github.com/athanclark/tries/issues/2 + - wai-middleware-content-type # 0.4.1 - https://github.com/athanclark/wai-middleware-content-type/issues/2 + - xmlgen # https://github.com/skogsbaer/xmlgen/issues/6 + - Spock-core # https://github.com/agrafix/Spock/issues/102 + + # Misc. + - distributed-process-supervisor # # https://github.com/haskell-d + - ghcid # Weird conflicts with sandboxingistributed/distributed-process-supervisor/issues/1 + - haskell-docs # GHC bug + + # Stackage upper bounds, re-enable these when their upper bound is removed + - hindent # 4.6.4 + + # Recursive deps https://github.com/fpco/stackage/issues/1818 + - clock # 0.7.2 clock:test => tasty:lib => clock:lib + - options + - text # 1.2.2.1 + - wai-logger # Missing build dep because of this https://github.com/kazu-yamamoto/logger/issues/42 + + # Problem on the stackage build server, we need to dig deeper into + # these if we want them fixed + - stack # Permissions failure when creating /home/stackage/.stack. + - skein # openfile: does not exist https://github.com/fpco/stackage/issues/1187 + + - snap-core # https://github.com/snapframework/snap-core/issues/26 + + - hackernews # https://github.com/dmjio/hackernews/issues/19 + + - language-lua2 # https://github.com/mitchellwrosen/language-lua2/issues/4 + + - commutative # https://github.com/athanclark/commutative/issues/4 + + - cubicbezier # https://github.com/kuribas/cubicbezier/issues/3 + + - yesod-auth-basic # https://github.com/creichert/yesod-auth-basic/issues/1 + + - folds # https://github.com/ekmett/folds/issues/12 +# end of expected-test-failures + +# Benchmarks which are known not to build. Note that, currently we do not run +# benchmarks, and therefore failures are only for building, not running. +expected-benchmark-failures: + # Recursive deps https://github.com/fpco/stackage/issues/1818 + - attoparsec + - hashable + - unordered-containers # 0.2.7.1 unordered-containers:bench -> criterion:lib -> aeson:lib -> unordered-containers:lib + + # stack bug https://github.com/commercialhaskell/stack/issues/2153 + - scientific + - vector-binary-instances + + # Missing files in sdist + - cassava # https://github.com/hvr/cassava/pull/117 + - picoparsec # https://bitbucket.org/blamario/picoparsec/issues/3/benchmark-compilation-failure + + # Compilation failures + - Frames # https://github.com/acowley/Frames/issues/47 + - cryptohash # https://github.com/vincenthz/hs-cryptohash/pull/43 + - dbus # No issue tracker, sent e-mail to maintainer + - thyme # https://github.com/liyang/thyme/issues/50 + - xmlgen # https://github.com/skogsbaer/xmlgen/issues/6 + +# end of expected-benchmark-failures - # No PhantomJS available - - wai-cors # Haddocks which are expected to fail. Same concept as expected test failures. expected-haddock-failures: - # https://github.com/acw/bytestring-progress/issues/4 - - bytestring-progress - - # https://github.com/leventov/yarr/issues/5 - - yarr - - # https://github.com/wereHamster/rethinkdb-client-driver/issues/1 - - rethinkdb-client-driver # Requires build before haddock, which doesn't always happen in incremental # builds. Could consider special-casing this requirement. - gtk - gtk3 - # Not sure why, but it's a temporary package anyway - - Cabal-ide-backend + # Intermittent failures or unreliable. These tay pass when + # re-enabled, but will eventually fail again. Only remove these + # from expected-haddock-failures if we know a fix has been released. + - gi-gtk # Uses all memory -# Benchmarks which should not be built. Note that Stackage does *not* generally -# build benchmarks. The difference here will be whether dependencies for these -# benchmarks are included or not. + # Problem on the stackage build server, we need to dig deeper into + # these if we want them fixed + - yesod-job-queue # https://github.com/fpco/stackage/issues/1383 + + # "Compilation" errors + - MemoTrie # https://github.com/conal/MemoTrie/issues/10 + - metrics # https://github.com/iand675/metrics/issues/5 + - text-generic-pretty # https://github.com/fpco/stackage/pull/2160 + + # Haddock bugs + - swagger2 # https://github.com/GetShopTV/swagger2/issues/66 + + # "Argument list too long" + - classy-prelude-yesod + - hledger-web + +# end of expected-haddock-failures + +# Benchmarks which should not be built. Note that Stackage builds benchmarks but does not run them. +# By skipping a benchmark, we do not pull in the build dependencies +# Packages should only be added here if required by `stackage-curator check' +# or if Setup fails because of missing foreign libraries. +# Otherwise place them in expected-benchmark-failures. skipped-benchmarks: - - machines + + # Outdated dependencies + # These can periodically be checked for updates; + # just remove these lines and run `stackage-curator check' + # to verify. - criterion-plus - - graphviz - - lifted-base - - pandoc - - stm-containers - - uuid - # pulls in criterion-plus, which has restrictive upper bounds - - cases - - hasql-postgres + # Transitive outdated dependencies + # These packages + # These can also be checked for updates periodically. + - cases # via criterion-plus + - hasql-postgres # via criterion-plus + - ttrie # via criterion-plus + - machines # via pipes - # https://github.com/vincenthz/hs-crypto-cipher/issues/46 - - cipher-aes - - cipher-blowfish - - cipher-camellia - - cipher-des - - cipher-rc4 + # Compilation failures + - cipher-aes # https://github.com/vincenthz/hs-crypto-cipher/issues/46 + - cipher-blowfish # https://github.com/vincenthz/hs-crypto-cipher/issues/46 + - cipher-camellia # https://github.com/vincenthz/hs-crypto-cipher/issues/46 + - cipher-des # https://github.com/vincenthz/hs-crypto-cipher/issues/46 + - cipher-rc4 # https://github.com/vincenthz/hs-crypto-cipher/issues/46 - # sometimes falls out-of-sync on hasql-postgres - - hasql + # GHC Bugs + - hledger-lib # https://github.com/fpco/stackage/issues/1587 - # https://github.com/fpco/stackage/issues/494 - - case-insensitive - - postgresql-binary - - scientific + - pipes # optparse-applicative 0.13 + +# end of skipped-benchmarks - # Pulls in discount which depends on extra C libraries - - cmark skipped-profiling: # https://github.com/nomeata/ghc-heap-view/commit/8d198eb8fbbad2ce0c4527c781659f35b8909c04#diff-8288955e209cfbead5b318a8598be9c0R10 - ghc-heap-view + # Mapping from Github account holding a package to the Github users who should # be pinged on failure. If no value is specified here, then the owning account # will be pinged. @@ -1518,3 +3252,144 @@ github-users: - mihaimaruseac elm-lang: - JoeyEremondi + prowdsponsor: + - meteficha + analytics: + - ekmett + haskell-openal: + - svenpanne + # - the-real-blackh + haskell-opengl: + - ekmett + - svenpanne + # - dagit + # - elliottt + # - jmcarthur + lambdabot: + - DanBurton + - mokus0 + haskell-game: + - ocharles + Happstack: + - stepcut + clckwrks: + - stepcut + stackbuilders: + - sestrella + - jsl + - jsantos17 + - mrkkrp + scotty-web: + - RyanGlScott + - xich + ku-fpg: + - RyanGlScott + haskell-compat: + - RyanGlScott + haskell-servant: + - jkarni + - SoenkeHahn + vivid: + - vivid-synth + midair: + - vivid-synth + nano-erl: + - vivid-synth + telegram-api: + - klappvisor + fpinsight: + - thierry-b + arithmoi: + - Bodigrim + - cartazio + - phadej + +# end of github-users + +# begin build-tool-overrides +# +# Used to set a mapping from build tools to package names, ignoring the +# metadata on Hackage itself + +build-tool-overrides: + # Ignore the cabal-install-ghc72 and cabal-install-ghc74 packages + cabal: + - cabal-install + +# end build-tool-overrides + +# Useful for checking for strict upper bounds against new versions of core +# packages, e.g. when a new version of transformers is released +# +# treat-as-non-core: +# - transformers + +# Give an error if the latest package version doesn't match what's +# listed below, see: +# https://github.com/fpco/stackage-curator/issues/25 +# +# Example: +# If bindings-GLFW-3.1.2.1 is the current latest version write +# - bindings-GLFW-3.1.2.1 # Comment saying what should be done when the new version is releasedskipped test-suite +tell-me-when-its-released: +- point-octree-0.5.5.3 # re-enable test and then we can resolve https://github.com/fpco/lts-haskell/issues/27 +- wreq-0.4.1.0 # Try to re-enable lots of packages, (esp https://github.com/fpco/stackage/issues/2032) and the test-suite if https://github.com/bos/wreq/issues/53 is closed. +- yarr-1.4.0.2 # Re-enable package https://github.com/fpco/stackage/issues/1876 +- terminal-progress-bar-0.1.1 # Unskip test suite +- optparse-applicative-0.13.0.0 # Unskip test suite https://github.com/pcapriotti/optparse-applicative/issues/228 +- Spock-core-0.11.0.0 # testsuite fail +- vivid-0.2.0.5 # compilation failure + +# Packages which should be hidden after registering, to avoid module name +# conflicts. This is intended for at least two use cases: +# +# * Making doctests pass (https://github.com/yesodweb/wai/issues/579) +# +# * Allowing tools like Stack to get a mapping from module name to package name +# for automatically installing dependencies +hide: +- async-dejafu # https://github.com/yesodweb/wai/issues/579 +- monads-tf # mtl is preferred +- protolude # `module Panic` conflicts with base +- crypto-api # `module Crypto.Random` conflicts with cryptonite +- fay-base # conflicts with many modules in base and others +- hashmap # conflicts with Data.HashSet in unordered-containers +- hxt-unicode # conflicts with Data.String.UTF8 in utf8-string +- hledger-web # conflicts with Foundation in foundation +- plot-gtk3 # conflicts with many modules in plot-gtk +- gtk3 # conflicts with many modules in gtk +- regex-pcre-builtin # conflicts with many modules in regex-pcre +- regex-compat-tdfa # conflicts with many modules in regex-compat +- log # conflicts with modules in its dependencies +- zip # conflicts with Codec.Archive.Zip in zip-archive +- monad-extras # conflicts with Control.Monad.Extra in extra +- control-monad-free # conflicts with Control.Monad.Free in free +- prompt # conflicts with Control.Monad.Prompt in MonadPrompt +- kawhi # conflicts with Control.Monad.Http in monad-http +- language-c # conflicts with modules in language-c-quote +- gl # conflicts with modules in OpenGLRaw +- svg-tree # conflicts with Graphics.Svg in svg-builder +- Glob # conflicts with System.FilePath.Glob in filemanip +- nanospec # conflicts with Test.Hspec in hspec +- HTF # conflicts with Test.Framework in test-framework +- courier # conflicts with Network.Transport in network-transport +- newtype-generics # conflicts with Control.Newtype in newtype +- objective # conflicts with Control.Object in natural-transformation + +# Cryptonite deprecations +- cipher-aes +- cipher-blowfish +- cipher-camellia +- cipher-des +- cipher-rc4 +- crypto-cipher-types +- crypto-numbers +- crypto-pubkey +- crypto-random +- cryptohash +- cryptohash-conduit + +# cryptohash forks +- cryptohash-md5 +- cryptohash-sha1 +- cryptohash-sha256 diff --git a/check b/check new file mode 100755 index 00000000..c25c3c4a --- /dev/null +++ b/check @@ -0,0 +1,6 @@ +#!/bin/sh + +# Convenience script for checking constraints locally + +cd `dirname $0` +exec stack exec --resolver ghc-8.0.1 stackage-curator check diff --git a/debian-bootstrap.sh b/debian-bootstrap.sh index 9438d78b..abcdeddf 100755 --- a/debian-bootstrap.sh +++ b/debian-bootstrap.sh @@ -1,7 +1,7 @@ -#!/bin/bash -ex +#!/usr/bin/env bash # Work in progress: create a list of commands necessary to get Stackage -# up-and-running on a freshly installed Debian-based system (includin Ubuntu). +# up-and-running on a freshly installed Debian-based system (including Ubuntu). # Quick start: # wget -O - https://raw.github.com/fpco/stackage/master/debian-bootstrap.sh | bash -ex @@ -10,64 +10,161 @@ # instructions, see: # http://www.stackage.org/install -add-apt-repository -y ppa:zoogie/sdl2-snapshots +set -exu + +mkdir /home/stackage -p +locale-gen en_US.UTF-8 + +export DEBIAN_FRONTEND=noninteractive +apt-get update +apt-get install -y software-properties-common + +add-apt-repository ppa:hvr/ghc -y +add-apt-repository -y ppa:marutter/rrutter +# not sure what this was needed for +#add-apt-repository -y ppa:openstack-ubuntu-testing/icehouse + +# Set the GHC version +GHCVER=8.0.1 + +# Get Stack +apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 575159689BEFB442 +echo 'deb http://download.fpcomplete.com/ubuntu xenial main'|tee /etc/apt/sources.list.d/fpco.list apt-get update apt-get install -y \ build-essential \ - libncurses-dev \ - git \ - wget \ - m4 \ - texlive-full \ - libgmp3-dev \ - zlib1g-dev \ - libedit2 \ - libedit-dev \ + ghc-$GHCVER \ + ghc-$GHCVER-dyn \ + ghc-$GHCVER-prof \ + ghc-$GHCVER-htmldocs \ + hscolour \ + sudo \ + curl \ freeglut3-dev \ - libglu1-mesa-dev \ - libglib2.0-dev \ - libcairo2-dev \ - libpango1.0-dev \ - libgtk2.0-dev \ - zip \ - libdevil-dev \ - llvm \ - libbz2-dev \ - libjudy-dev \ - libsqlite3-dev \ - libmysqlclient-dev \ - libpq-dev \ - libicu-dev \ - libssl-dev \ - libgsl0-dev \ + git \ + libadns1-dev \ + libaio1 \ + libalut-dev \ + libasound2-dev \ libblas-dev \ - liblapack-dev \ + libbz2-dev \ + libcairo2-dev \ + libclang-3.7-dev \ libcurl4-openssl-dev \ + libdevil-dev \ + libedit-dev \ + libedit2 \ + libfftw3-dev \ + libflac-dev \ libfreenect-dev \ - libnotify-dev \ libgd2-xpm-dev \ - libyaml-dev \ - liblzma-dev \ - libsdl2-dev \ - libxss-dev \ - libgtk-3-dev \ - libxml2-dev \ + libgeoip-dev \ + libgirepository1.0-dev \ + libglfw3-dev \ + libglib2.0-dev \ + libglu1-mesa-dev \ + libgmp3-dev \ + libgnutls-dev \ libgsasl7-dev \ - libphash0-dev \ - libzmq3-dev + libgsl0-dev \ + libgtk-3-dev \ + libgtk2.0-dev \ + libgtksourceview-3.0-dev \ + libhidapi-dev \ + libicu-dev \ + libjudy-dev \ + liblapack-dev \ + libleveldb-dev \ + liblmdb-dev \ + liblzma-dev \ + libmagic-dev \ + libmagickcore-dev \ + libmagickwand-dev \ + libmarkdown2-dev \ + libmpfr-dev \ + libmysqlclient-dev \ + libncurses-dev \ + libnfc-dev \ + libnotify-dev \ + libopenal-dev \ + libpango1.0-dev \ + libpcap0.8-dev \ + libpq-dev \ + libsdl2-dev \ + libsnappy-dev \ + libsndfile1-dev \ + libsqlite3-dev \ + libssl-dev \ + libsystemd-dev \ + libtagc0-dev \ + libtre-dev \ + libudev-dev \ + libusb-1.0-0-dev \ + libwebkitgtk-3.0-dev \ + libxau-dev \ + libxml2-dev \ + libxrandr-dev \ + libxss-dev \ + libyaml-dev \ + libzip-dev \ + libzmq3-dev \ + llvm-3.7 \ + m4 \ + nettle-dev \ + nodejs \ + npm \ + openjdk-8-jdk \ + r-base \ + r-base-dev \ + ruby-dev \ + stack \ + wget \ + xclip \ + z3 \ + zip \ + zlib1g-dev -mkdir /tmp/nettle-build -( -cd /tmp/nettle-build -wget https://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz -tar zxf nettle-2.7.1.tar.gz -cd nettle-2.7.1 -./configure --prefix=/usr -make -make install +# Put documentation where we expect it +mv /opt/ghc/$GHCVER/share/doc/ghc-$GHCVER/ /opt/ghc/$GHCVER/share/doc/ghc -mkdir -p /usr/lib/x86_64-linux-gnu/ -ln -sfv /usr/lib/libnettle.so.4.7 /usr/lib/x86_64-linux-gnu/libnettle.so.4 -) -rm -rf /tmp/nettle-build +# Buggy versions of ld.bfd fail to link some Haskell packages: +# https://sourceware.org/bugzilla/show_bug.cgi?id=17689. Gold is +# faster anyways and uses less RAM. +update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.gold" 20 +update-alternatives --install "/usr/bin/ld" "ld" "/usr/bin/ld.bfd" 10 + +# GHC requires a specific LLVM version on the system PATH for its LLVM backend. +# This version is tracked here: +# https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/Backends/LLVM/Installing +# +# GHC 8.0 requires LLVM 3.7 tools (specifically, llc-3.7 and opt-3.7). +update-alternatives --install "/usr/bin/llc" "llc" "/usr/bin/llc-3.7" 50 +update-alternatives --install "/usr/bin/opt" "opt" "/usr/bin/opt-3.7" 50 + +# install ocilib dependencies then build and install ocilib +cd /tmp \ + && wget https://storage.googleapis.com/oracle.fpinsight.com/instantClient/oracle-instantclient12.1-basiclite_12.1.0.2.0-2_amd64.deb \ + && dpkg -i oracle-instantclient12.1-basiclite_12.1.0.2.0-2_amd64.deb \ + && rm -f oracle-instantclient12.1-basiclite_12.1.0.2.0-2_amd64.deb \ + && wget https://storage.googleapis.com/oracle.fpinsight.com/instantClient/oracle-instantclient12.1-devel_12.1.0.2.0-2_amd64.deb \ + && dpkg -i oracle-instantclient12.1-devel_12.1.0.2.0-2_amd64.deb \ + && rm -f oracle-instantclient12.1-devel_12.1.0.2.0-2_amd64.deb \ + && wget https://github.com/vrogier/ocilib/archive/v4.2.1.tar.gz \ + && tar xvf v4.2.1.tar.gz \ + && cd /tmp/ocilib-4.2.1 \ + && ./configure --with-oracle-import=linkage \ + --with-oracle-charset=ansi \ + --with-oracle-headers-path=/usr/include/oracle/12.1/client64 \ + --with-oracle-lib-path=/usr/lib/oracle/12.1/client64/lib \ + && make \ + && make install \ + && cd \ + && rm -rf /tmp/ocilib-4.2.1 \ + && echo "/usr/local/lib" > /etc/ld.so.conf.d/usr-local.conf \ + && echo "/usr/lib/oracle/12.1/client64/lib" > /etc/ld.so.conf.d/oracle-client.conf \ + && ldconfig + +# Add JDK to system paths. +echo "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/" > /etc/ld.so.conf.d/openjdk.conf \ + && ldconfig