Github CI is free to use and easy to set up. Being a native CI solution, it has great integration with the rest of the Github UI. Jobs run simultaneously, your dependencies can be cached, and your build artefacts can be processed. Haskellers will also appreciate that basic config with reasonable defaults for Haskell projects is much simpler than the corresponding config for Travis.

Config Definition

By virtue of commiting legal config to .github/workflows/ , all subsequent pushes will use Github's CI, even in the PR that first introduces it. I typically call this file ci.yaml . This defines a Pipeline which can contain one or more Jobs. By writing another .yaml file to .github/workflows/ , you define another independent Pipeline. These will run simultaneously, as do the Jobs themselves.

Actions

... jobs : build : name : CI runs-on : ubuntu-latest steps : - name : Setup GHC uses : actions/setup-haskell@v1.1 with : ghc-version : "8.8.3" enable-stack : true - name : Clone project uses : actions/checkout@v2 ... Github Actions are like standalone IO functions that alter the Pipeline's environment. We can see that the official setup-haskell Action has stack support built in, so we activate that and set our preferred GHC version with with . Notice that Actions have a version, which we can track by subscribing to releases:

Caching