name: Haskell Cabal on: push: branches: [master] pull_request: branches: [master] types: [opened, synchronize] permissions: {} jobs: test: name: CI runs-on: ${{ matrix.os }} strategy: fail-fast: false # don't cancel other jobs if one fails matrix: os: [ubuntu-latest, macos-latest, windows-latest] ghc: [9.2.8, 9.4.8, 9.6.5, 9.8.2, 9.10.1] steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Setup Haskell Compiler (cabal) id: setup-haskell uses: haskell-actions/setup@dd344bc1cec854a369df8814ce17ef337d6e6170 # v2.7.6 with: ghc-version: ${{ matrix.ghc }} - name: Cache dist-newstyle uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: dist-newstyle key: dist-newstyle-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('src*') }} restore-keys: | dist-newstyle-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }}- dist-newstyle-${{ matrix.os }}-${{ matrix.ghc }}- - name: Cache ~/.cabal/store uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: ${{ steps.setup-haskell.outputs.cabal-store }} key: cabal-store-${{ matrix.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal') }} restore-keys: cabal-store-${{ matrix.os }}-${{ matrix.ghc }}- - name: Configure to run tests and benchmarks run: cabal configure --enable-tests --enable-benchmarks - name: Build code run: cabal build - name: Test code run: cabal test - name: Benchmark code run: cabal bench - name: Generate documentation run: cabal haddock all