name: CI on: pull_request: types: [synchronize, opened, reopened] push: branches: [main] schedule: # additionally run once per week (At 00:00 on Sunday) to maintain cache - cron: '0 0 * * 0' jobs: cabal: name: ${{ matrix.os }} / ghc ${{ matrix.ghc }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macOS-latest, windows-latest] cabal: ["3.14.2.0"] ghc: - "8.4.4" - "8.6.5" - "8.8.4" - "8.10.7" - "9.0.2" - "9.2.8" - "9.4.8" - "9.6.7" - "9.8.4" - "9.10.3" - "9.12.3" exclude: - os: macOS-latest ghc: 9.10.3 - os: macOS-latest ghc: 9.8.4 - os: macOS-latest ghc: 9.6.7 - os: macOS-latest ghc: 9.4.8 - os: macOS-latest ghc: 9.2.8 - os: macOS-latest ghc: 9.0.2 - os: macOS-latest ghc: 8.10.7 - os: macOS-latest ghc: 8.8.4 - os: macOS-latest ghc: 8.6.5 - os: macOS-latest ghc: 8.4.4 - os: windows-latest ghc: 9.10.3 - os: windows-latest ghc: 9.8.4 - os: windows-latest ghc: 9.6.7 - os: windows-latest ghc: 9.4.8 - os: windows-latest ghc: 9.2.8 - os: windows-latest ghc: 9.0.2 - os: windows-latest ghc: 8.10.7 - os: windows-latest ghc: 8.8.4 - os: windows-latest ghc: 8.6.5 - os: windows-latest ghc: 8.4.4 steps: - uses: actions/checkout@v4 - uses: haskell-actions/setup@v2 id: setup-haskell-cabal name: Setup Haskell with: ghc-version: ${{ matrix.ghc }} cabal-version: ${{ matrix.cabal }} - name: Configure run: | cabal configure --enable-tests --enable-benchmarks --enable-documentation --test-show-details=direct --write-ghc-environment-files=always - name: Freeze run: | cabal freeze - uses: actions/cache@v4 name: Cache ~/.cabal/store with: path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }} key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }} - name: Install dependencies run: | cabal build all --only-dependencies - name: Build run: | cabal build all - name: Test run: | cabal test all - name: Documentation run: | cabal haddock