on a3aa2bd help sign in
stackage/README.md
102 lines 5.5 kB history raw
1stackage
2========
4[![Build Status](https://travis-ci.org/fpco/stackage.svg?branch=master)](https://travis-ci.org/fpco/stackage)
6"Stable Hackage": creating a vetted set of packages from Hackage.
7This repository is for package authors and maintainers to get their packages into Stackage.
8If you simply want to use Stackage as an end user, please follow the instructions on [https://www.stackage.org/](https://www.stackage.org).
10We strongly recommend using the Haskell tool stack for doing builds, which
11includes 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).
14Add your package
15----------------
17We welcome all packages, provided:
19* The package author/maintainer agrees to the [maintainers agreement](https://github.com/fpco/stackage/blob/master/MAINTAINERS.md).
20* 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.
21* The package is compatible with the newest versions of all dependencies.
22* 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)).
24Full details on how to add a package can be found in the [maintainers agreement](https://github.com/fpco/stackage/blob/master/MAINTAINERS.md#adding-a-package).
26Other repos
27-----------
29The Stackage project consists of multiple repositories. This repository
30contains the metadata on packages to be included in future builds and some
31project information. In addition, we have the following repositories:
33* [stackage-server](https://github.com/fpco/stackage-server) [![Build Status](https://travis-ci.org/fpco/stackage-server.svg?branch=master)](https://travis-ci.org/fpco/stackage-server)
34* [stackage-curator](https://github.com/fpco/stackage-curator) [![Build Status](https://travis-ci.org/fpco/stackage-curator.svg?branch=master)](https://travis-ci.org/fpco/stackage-curator)
35* [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)
36* [lts-haskell](https://github.com/fpco/lts-haskell)
37* [stackage-nightly](https://github.com/fpco/stackage-nightly)
39We also support some add-on tools to cabal-install to make its usage with
40Stackage both easier and more secure:
42* [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)
43* [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)
44* [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)
45* [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)
46* [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)
48Curious how it all fits together? See the [Stackage data
49flow](https://github.com/fpco/stackage/blob/master/DATA-FLOW.md).
52Build the package set
53---------------------
55Generally, building the package set should be done only by the Stackage build
56machine by the Stackage curation team. If you're interested in trying this
57yourself, please check out [the curator
58guide](https://github.com/fpco/stackage/blob/master/CURATORS.md), though be
59aware that this is not a recommended practice and there likely will be problems
60you will need to debug yourself.
62### Docker
64Note: This method has been disabled for now, but may be enabled again in the future.
66If you'd like to check a build plan, or perform an entire build, without
67specially configuring your system, Docker may be a good approach. To check if
68some modifications to `build-constraints.yaml` are valid, try the following:
701. Create a local clone of the `stackage` repo
712. Make modifications to your local `build-constraints.yaml`
723. Inside the `stackage` working directory, run the following:
74 ```
75 $ docker run -it --rm -v $(pwd):/stackage -w /stackage snoyberg/stackage /bin/bash -c 'cabal update && stackage check'
76 ```
78Similarly, if you'd like to perform an entire build, you can replace the last step with:
80```
81$ docker run -it --rm -v $(pwd):/stackage -w /stackage snoyberg/stackage /bin/bash -c 'cabal update && stackage nightly --skip-upload'
82```
84## Processing
86The following describes at a high level the series of steps for processing
88### Nightlies
901. Get list of core packages
912. Get build constraints from list of maintained packages
923. Load up package index
934. Calculate build plan using newest versions of packages
945. Write out a YAML file with complete build plan
956. Verify that the build plan can be compiled
967. Perform the build
98### LTS
1001. Load up most recent build plan
1012. Convert build plan into constraints for next build
1023. Continue from step (3) above