name: sandwich on: pull_request: push: jobs: cabal: name: ${{ matrix.os }} / ghc ${{ matrix.ghc }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macOS-latest, windows-latest] ghc: # - "8.6.5" # - "8.8.4" - "8.10.7" - "9.0.2" - "9.2.8" - "9.4.8" - "9.6.6" - "9.8.1" steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v27 if: runner.os != 'Windows' with: # release-24.05 nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/74435c9234c751e6786c5f3fd34ff6b0f0c13bd1.tar.gz - name: Install dependencies (Windows) if: runner.os == 'Windows' run: | "$env:PGBIN" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append # Disable demo-postgres since it requires unix sockets sed -i 's/demos\/demo-postgres/-- demos\/demo-postgres/g' cabal.project # Because the HaskellNet dependency doesn't work yet with GHC 9.8 - name: Disable demo-fake-smtp-server for GHC 9.8.x if: ${{ matrix.ghc == '9.8.1' && runner.os == 'macOS' }} run: sed -i '.bak' 's/demos\/demo-fake-smtp-server/-- demos\/demo-fake-smtp-server/g' cabal.project - name: Disable demo-fake-smtp-server for GHC 9.8.x if: ${{ matrix.ghc == '9.8.1' && runner.os != 'macOS' }} run: sed -i 's/demos\/demo-fake-smtp-server/-- demos\/demo-fake-smtp-server/g' cabal.project - uses: haskell-actions/setup@v2 id: setup-haskell-cabal name: Setup Haskell with: ghc-version: ${{ matrix.ghc }} cabal-version: "latest" - name: Freeze run: | cabal freeze - uses: actions/cache/restore@v4 id: cache-restore with: path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }} key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }} - name: Install dependencies (macOS) if: runner.os == 'macOS' run: | brew update # For postgres context tests/demo brew install libpq postgresql # For older GHCs brew install llvm@13 --quiet # Suppress deprecation warning echo /opt/homebrew/opt/llvm@13/bin >> $GITHUB_PATH # https://gitlab.haskell.org/ghc/ghc/-/issues/20592#note_391266 echo "C_INCLUDE_PATH=`xcrun --show-sdk-path`/usr/include/ffi" >> "$GITHUB_ENV" - name: Install dependencies (Windows) if: runner.os == 'Windows' run: | # This needs to be a PowerShell command "$env:PGBIN" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - name: Build run: | cabal configure --enable-tests --enable-benchmarks --test-show-details=direct cabal build all # - name: Test (sandwich-contexts) # run: cabal test sandwich-contexts # - name: Test (sandwich-contexts-docker) # run: cabal test sandwich-contexts-docker - name: Test (sandwich-contexts-minio) run: cabal test sandwich-contexts-minio - name: Test (sandwich-hedgehog) run: cabal test sandwich-hedgehog - name: Test (sandwich-quickcheck) run: cabal test sandwich-quickcheck - name: Test (sandwich-webdriver) run: cabal test sandwich-webdriver - uses: actions/cache/save@v4 if: always() && steps.cache-restore.outputs.cache-hit != 'true' with: path: ${{ steps.setup-haskell-cabal.outputs.cabal-store }} key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project.freeze') }} stack: name: stack / ghc ${{ matrix.ghc }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - ghc: "9.2.8" yaml: "stack-9.2.8.yaml" - ghc: "9.4.8" yaml: "stack-9.4.8.yaml" - ghc: "9.6.5" yaml: "stack.yaml" - ghc: "9.8.1" yaml: "stack-9.8.1.yaml" steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v27 with: # release-24.05 nix_path: nixpkgs=https://github.com/NixOS/nixpkgs/archive/74435c9234c751e6786c5f3fd34ff6b0f0c13bd1.tar.gz - uses: haskell-actions/setup@v2 name: Setup Haskell Stack with: ghc-version: ${{ matrix.ghc }} enable-stack: true stack-version: "latest" - uses: actions/cache/restore@v4 name: Cache restore ~/.stack id: cache-restore with: path: ~/.stack key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.yaml }}-stack - name: apt run: | sudo apt-get update sudo apt-get install -y libx11-dev libxext-dev libxinerama-dev libxrandr-dev libxss-dev - name: Build run: | stack build --stack-yaml ${{matrix.yaml}} --system-ghc --test --bench --no-run-tests --no-run-benchmarks - name: Test (sandwich) run: stack test sandwich --stack-yaml ${{matrix.yaml}} --system-ghc - name: Test (sandwich-contexts) run: stack test sandwich-contexts --stack-yaml ${{matrix.yaml}} --system-ghc --ta --debug - name: Test (sandwich-contexts-docker) run: stack test sandwich-contexts-docker --stack-yaml ${{matrix.yaml}} --system-ghc - name: Test (sandwich-contexts-kubernetes) run: stack test sandwich-contexts-kubernetes --stack-yaml ${{matrix.yaml}} --system-ghc - name: Test (sandwich-contexts-minio) run: stack test sandwich-contexts-minio --stack-yaml ${{matrix.yaml}} --system-ghc - name: Test (sandwich-hedgehog) run: stack test sandwich-hedgehog --stack-yaml ${{matrix.yaml}} --system-ghc - name: Test (sandwich-quickcheck) run: stack test sandwich-quickcheck --stack-yaml ${{matrix.yaml}} --system-ghc - name: Test (sandwich-webdriver) run: stack test sandwich-webdriver --stack-yaml ${{matrix.yaml}} --system-ghc - uses: actions/cache/save@v4 if: always() && steps.cache-restore.outputs.cache-hit != 'true' with: path: ~/.stack key: ${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.yaml }}-stack