aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/CI.yaml
blob: 84295c702faf75733329431ed7e4fb725716747c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
name: CI

on: push

jobs:

  nix-build:
    name: Nix build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2.3.4
      - uses: cachix/install-nix-action@v13
        with:
          install_url: https://nixos-nix-install-tests.cachix.org/serve/i6laym9jw3wg9mw6ncyrk6gjx4l34vvx/install
          install_options: '--tarball-url-prefix https://nixos-nix-install-tests.cachix.org/serve'
          extra_nix_config: |
            experimental-features = nix-command flakes
            access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
      - uses: cachix/cachix-action@v8
        with:
          name: jmc
          authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
      - name: Build gsa-parser
        run: nix build -L
      # TODO `nix flake check` is currently system-dependent but should be used here
      - name: Build gsa-parser checks
        run: nix build -L '.#checks.x86_64-linux."gsa-parser:test:gsa-parser-test"'
      - name: Build gsa-parser shell
        run: nix build -L '.#devShell.x86_64-linux'

  stack-build:
    name: Stack ${{ matrix.resolver }} on ${{ matrix.os }} (${{ matrix.required }})
    strategy:
      fail-fast: false
      matrix:
        resolver: [ nightly, lts-18, lts-17, lts-16, lts-15, lts-14 ]
        os: [ macos-latest, ubuntu-latest ]
        required: [ required ]
        # include:
        #   - resolver: nightly
        #     os: ubuntu-latest
        #     required: optional
    continue-on-error: ${{ matrix.required == 'optional' }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - uses: haskell/actions/setup@v1
        with:
          enable-stack: true
      ## For some reason, stack caching seems to be very brittle, and cause a lot of build failures.
      ## I haven't investigated very thoroughly what to best do about this, but for now, I'm just not caching stack builds.
      # - uses: actions/cache@v2
      #   with:
      #     path: |
      #       ~/.stack
      #       .stack-work
      #     key: stack-cache-${{ matrix.os }}-${{ matrix.resolver }}-${{ hashFiles('**/*.cabal') }}
      - run: stack init --resolver ${{ matrix.resolver }}
      - run: stack build --resolver ${{ matrix.resolver }} --only-dependencies
      - run: stack build --resolver ${{ matrix.resolver }}
      - run: stack build --resolver ${{ matrix.resolver }} --haddock --test --bench --no-run-benchmarks

  cabal-build:
    name: Cabal GHC ${{ matrix.ghc }} on ${{ matrix.os }} (${{ matrix.required }})
    strategy:
      fail-fast: false
      matrix:
        ghc: [ '8.6.5', '8.8.3', '8.10.5', '9.0.1' ]
        os: [ ubuntu-latest, macos-latest ]
        required: [ required ]
        include:
          - ghc: latest
            os: ubuntu-latest
            required: optional
    continue-on-error: ${{ matrix.required == 'optional' }}
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v2
      - uses: haskell/actions/setup@v1
        with:
          ghc-version: ${{ matrix.ghc }}
      - uses: actions/cache@v2
        with:
          path: |
            ~/.cabal
            dist-newstyle
          key: cabal-cache-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}
      - run: cabal new-build --only-dependencies
      - run: cabal new-build
      - run: cabal new-test --test-show-details=direct