Skip to content

Merge pull request #183 from yutotakano/test-only-one-stack-version #31

Merge pull request #183 from yutotakano/test-only-one-stack-version

Merge pull request #183 from yutotakano/test-only-one-stack-version #31

Workflow file for this run

name: CI
# when the workflow will run
on:
push:
branches: [ master ]
pull_request:
# Allows manually starting this workflow from the Actions tab
workflow_dispatch:
jobs:
# To dynamically create a build matrix, we generate a JSON output from one job
# and use fromJson in the next job to construct the matrix.
# This dynamic approach means we don't have to update the CI file when we
# change supported GHC versions.
#
# Only the Cabal build job will use the generated matrix, since Stack has a
# pinned GHC version in the stack.yaml file.
generate-matrix:
name: Generate GHC build matrix for Cabal
runs-on: ubuntu-latest
outputs:
ghc-matrix: ${{ steps.set-ghc-matrix.outputs.versions }}
steps:
- uses: actions/checkout@v2
- name: Parse the cabal tested-with stanza
id: parse
run: |
echo "tested-with-versions=$(runghc .github/workflows/parseVersions.hs)" >> $GITHUB_OUTPUT
- name: Set the GHC matrix for the next job
id: set-ghc-matrix
# We use single quotes here, since the output from the previous step
# will not have escaped double quotes, and it's just easier to use single
# quotes on the outside than try to escape the inner double quotes.
run: echo 'versions={"ghc-version":${{ steps.parse.outputs.tested-with-versions }}}' >> $GITHUB_OUTPUT
build-cabal:
name: Cabal Build Check
needs: generate-matrix
runs-on: ubuntu-latest
strategy:
# Whether to stop other jobs in the matrix if one fails. This is undesirable
# since we want to check e.g. it compiles on 8.10.7 regardless of the status
# of 9.X.
fail-fast: false
# Feed the json from the previous job.
matrix: ${{ fromJson(needs.generate-matrix.outputs.ghc-matrix) }}
steps:
- uses: actions/checkout@v2
# Although the GitHub Action Runner comes with pre-installed Cabal and GHC,
# we'll only use Cabal out of the box since that is independent of
# the GHC version. For GHC, we'll use the Haskell setup action to install
# the correct version needed for the build.
- uses: haskell/actions/setup@v2
id: setup-haskell
with:
# We install a global GHC
ghc-version: ${{ matrix.ghc-version }}
- name: "Cabal: Update cabal package database, generate build plan"
run: |
cabal update
cabal build --dry-run
- name: "Cabal: Cache Dependencies"
id: cache
uses: actions/cache@v2
with:
# Include the build plan file generated by cabal configure, but allow
# restoring without its hash as long as the GHC version is the same.
key: cabal-${{ runner.os }}-${{ matrix.ghc-version }}-${{ hashFiles('**/plan.json') }}
restore-keys: |
cabal-${{ runner.os }}-${{ matrix.ghc-version }}
path: |
${{ steps.setup-haskell.outputs.cabal-store }}
dist-newstyle
- name: "Cabal: Build"
run: cabal build
build-stack:
name: Stack Build Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Since the GitHub Action Runner comes with a pre-installed Stack, we'll
# use that instead of installing our own through the Haskell setup action,
# since all we need to test the stack build is Stack itself.
- name: "Stack: Cache ~/.stack"
id: cache-stack
uses: actions/cache@v2
with:
path: ~/.stack
key: stack-${{ runner.os }}-${{ hashFiles('stack.yaml') }}
restore-keys: |
stack-${{ runner.os }}
- name: "Print GHC version resolved from stack.yaml"
run: |
stack ghc -- --version
stack path --compiler-exe
- name: "Stack: Build"
run: stack build