GithubHelp home page GithubHelp logo

mpickering / stackage Goto Github PK

View Code? Open in Web Editor NEW

This project forked from commercialhaskell/stackage

0.0 3.0 0.0 2.37 MB

"Stable Hackage," tools for creating a vetted set of packages from Hackage.

License: MIT License

Emacs Lisp 2.34% Haskell 7.21% Shell 90.46%

stackage's Introduction

stackage

Build Status

"Stable Hackage": creating a vetted set of packages from Hackage.

NOTE 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 http://www.stackage.org/.

The Stackage project consists of multiple repositories. This repository contains the metadata on packages to be included in future builds and some project information. In addition, we have the following repositories:

We strongly recommend using the Haskell tool stack for doing builds, which includes built-in Stackage support:

We also support some add-on tools to cabal-install to make its usage with Stackage both easier and more secure:

Get your package included

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 file, there's a section called packages. In general, to add a set of packages, you would add:

"My Name [email protected] @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.

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).

You should also read the 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 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).

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'

Processing

The following describes at a high level the series of steps for processing

Nightlies

  1. Get list of core packages
  2. Get build constraints from list of maintained packages
  3. Load up package index
  4. Calculate build plan using newest versions of packages
  5. Write out a YAML file with complete build plan
  6. Verify that the build plan can be compiled
  7. Perform the build

LTS

  1. Load up most recent build plan
  2. Convert build plan into constraints for next build
  3. Continue from step (3) above

stackage's People

Contributors

snoyberg avatar bergmark avatar juhp avatar danburton avatar chrisdone avatar phadej avatar athanclark avatar brendanhay avatar k-bx avatar borsboom avatar hadronized avatar daniel-diaz avatar solatis avatar meteficha avatar massysett avatar nomeata avatar agrafix avatar rvion avatar twinside avatar joeyeremondi avatar sinelaw avatar simonmichael avatar aloiscochard avatar srijs avatar aycanirican avatar mgajda avatar amcphail avatar dysinger avatar sol avatar unkindpartition avatar

Watchers

James Cloos avatar Matthew Pickering avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.