diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..9ddc3fb --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,87 @@ +on: [push] +name: Build and test +jobs: + build: + name: Build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + steps: + - name: Check out + uses: actions/checkout@v2 + + - name: Cache GHC installation + uses: actions/cache@v4 + id: ghcup + with: + path: | + ~/.ghcup/bin/* + ~/.ghcup/cache/* + ~/.ghcup/config.yaml + ~/.ghcup/ghc/* + key: CI-ghcup + + - name: Setup Haskell + uses: haskell/actions/setup@v2 + if: steps.ghcup.outputs.cache-hit != 'true' + with: + enable-stack: true + + - name: Cache Stackage package index + id: pantry + uses: actions/cache@v4 + with: + path: ~/.stack/pantry + key: CI-pantry-${{ env.STACK_LTS }} + + - name: Recompute Stackage package index + if: steps.pantry.outputs.cache-hit != 'true' + run: stack update + + - name: Cache Haskell dependencies + uses: actions/cache@v3 + with: + path: | + ~/.stack/stack.sqlite3 + ~/.stack/snapshots + key: CI-testdeps--${{ env.STACK_LTS }}--${{ hashFiles('stack.yaml.lock') }} + restore-keys: | + CI-testdeps--${{ env.STACK_LTS }}-- + CI-testdeps-- + + - name: Cache Haskell project buildstate + uses: actions/cache@v4 + with: + path: .stack-work + key: CI-builddir--${{ env.GHC_VERSION }} + + - name: Build package dependencies + run: | + stack build --no-run-tests --no-run-benchmarks --only-dependencies + + - name: Build package + run: | + stack build --no-run-tests --no-run-benchmarks + + - name: Build testing dependencies + run: | + stack build --no-run-tests --no-run-benchmarks --test --bench + + - name: Run tests + run: | + stack build --test --no-run-benchmarks + + - name: Build documentation + run: | + stack haddock + + - name: Check documentation + run: | + stack install doctest + $(stack path --local-bin)/doctest src/ + + - name: Deploy + run: | + stack path --local-install-root