name: CI # Trigger the workflow on push or pull request, but only for the main branch on: pull_request: push: branches: [master] # Env vars for tests env: MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio123 MINIO_LOCAL: 1 MINIO_SECURE: 1 jobs: cabal: name: ${{ matrix.os }} / ghc ${{ matrix.ghc }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macOS-latest, windows-latest] cabal: ["3.2"] ghc: - "8.4.4" - "8.6.5" - "8.8.4" - "8.10.2" exclude: - os: macOS-latest ghc: 8.8.4 - os: macOS-latest ghc: 8.6.5 - os: windows-latest ghc: 8.10.2 - os: windows-latest ghc: 8.6.5 steps: - uses: actions/checkout@v2 if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/main' - uses: actions/setup-haskell@v1.1.4 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 --test-show-details=direct -fexamples -flive-test - name: Freeze run: | cabal freeze - uses: actions/cache@v2.1.3 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 -fexamples -flive-test - name: Build run: | cabal build all -fexamples - name: Setup MinIO for testing (Linux) if: matrix.os == 'ubuntu-latest' run: | mkdir -p /tmp/minio /tmp/minio-config/certs cp test/cert/* /tmp/minio-config/certs/ (cd /tmp/minio; wget -q https://dl.min.io/server/minio/release/linux-amd64/minio; chmod +x ./minio) sudo cp /tmp/minio-config/certs/public.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - name: Setup MinIO for testing (MacOS) if: matrix.os == 'macos-latest' run: | mkdir -p /tmp/minio /tmp/minio-config/certs cp test/cert/* /tmp/minio-config/certs/ (cd /tmp/minio; wget -q https://dl.min.io/server/minio/release/darwin-amd64/minio; chmod +x ./minio) sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /tmp/minio-config/certs/public.crt - name: Setup MinIO for testing (Windows) if: matrix.os == 'windows-latest' run: | New-Item -ItemType Directory -Path "$env:temp/minio-config/certs/" Copy-Item -Path test\cert\* -Destination "$env:temp/minio-config/certs/" Invoke-WebRequest -Uri https://dl.minio.io/server/minio/release/windows-amd64/minio.exe -OutFile $HOME/minio.exe Import-Certificate -FilePath "$env:temp/minio-config/certs/public.crt" -CertStoreLocation Cert:\LocalMachine\Root - name: Test (Non-Windows) if: matrix.os != 'windows-latest' run: | /tmp/minio/minio server --quiet --certs-dir /tmp/minio-config/certs data1 data2 data3 data4 2>&1 > minio.log & ghc --version cabal --version cabal test all -flive-test - name: Test (Windows) if: matrix.os == 'windows-latest' run: | Start-Process -NoNewWindow -FilePath "$HOME/minio.exe" -ArgumentList "--certs-dir", "$env:temp/minio-config/certs", "server", "$env:temp/data1", "$env:temp/data2", "$env:temp/data3", "$env:temp/data4" ghc --version cabal --version cabal test all -flive-test stack: name: stack / ghc ${{ matrix.ghc }} runs-on: ${{ matrix.os }} strategy: matrix: stack: ["2.3.1"] ghc: ["8.8.4"] os: [ubuntu-latest] steps: - uses: actions/checkout@v2 if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/main' - uses: actions/setup-haskell@v1.1.4 name: Setup Haskell Stack with: ghc-version: ${{ matrix.ghc }} stack-version: ${{ matrix.stack }} - uses: actions/cache@v2.1.3 name: Cache ~/.stack with: path: ~/.stack key: ${{ runner.os }}-${{ matrix.ghc }}-stack - name: Install dependencies run: | stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks --only-dependencies - name: Build run: | stack build --system-ghc --test --bench --no-run-tests --no-run-benchmarks --flag minio-hs:examples - name: Setup MinIO for testing (Linux) if: matrix.os == 'ubuntu-latest' run: | mkdir -p /tmp/minio /tmp/minio-config/certs cp test/cert/* /tmp/minio-config/certs/ (cd /tmp/minio; wget -q https://dl.min.io/server/minio/release/linux-amd64/minio; chmod +x ./minio) sudo cp /tmp/minio-config/certs/public.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - name: Setup MinIO for testing (MacOS) if: matrix.os == 'macos-latest' run: | mkdir -p /tmp/minio /tmp/minio-config/certs cp test/cert/* /tmp/minio-config/certs/ (cd /tmp/minio; wget -q https://dl.min.io/server/minio/release/darwin-amd64/minio; chmod +x ./minio) sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /tmp/minio-config/certs/public.crt - name: Setup MinIO for testing (Windows) if: matrix.os == 'windows-latest' run: | New-Item -ItemType Directory -Path "$env:temp/minio-config/certs/" Copy-Item -Path test\cert\* -Destination "$env:temp/minio-config/certs/" Invoke-WebRequest -Uri https://dl.minio.io/server/minio/release/windows-amd64/minio.exe -OutFile $HOME/minio.exe Import-Certificate -FilePath "$env:temp/minio-config/certs/public.crt" -CertStoreLocation Cert:\LocalMachine\Root - name: Test (Non-Windows) if: matrix.os != 'windows-latest' run: | /tmp/minio/minio server --quiet --certs-dir /tmp/minio-config/certs data1 data2 data3 data4 2>&1 > minio.log & ghc --version stack --version stack test --system-ghc --flag minio-hs:live-test - name: Test (Windows) if: matrix.os == 'windows-latest' run: | Start-Process -NoNewWindow -FilePath "$HOME/minio.exe" -ArgumentList "--certs-dir", "$env:temp/minio-config/certs", "server", "$env:temp/data1", "$env:temp/data2", "$env:temp/data3", "$env:temp/data4" ghc --version cabal --version stack test --system-ghc --flag minio-hs:live-test