name: build

on:
  - push
  - pull_request

jobs:
  build-and-test:
    name: build

    strategy:
      fail-fast: false
      matrix:
        include:
          - { ocaml-compiler: 4.14.0, os: ubuntu-22.04 }

    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          submodules: true

      - run: wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
      - run: echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" | sudo tee -a /etc/apt/sources.list
      - run: echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" | sudo tee -a /etc/apt/sources.list
      - run: sudo apt update
      - run: sudo apt install -y llvm-16-dev valgrind

      - name: Use OCaml ${{ matrix.ocaml-compiler }}
        uses: ocaml/setup-ocaml@v2
        with:
          ocaml-compiler: ${{ matrix.ocaml-compiler }}

      - run: opam install . --deps-only --with-test

      - run: opam exec -- dune build
        if: matrix.ocaml-compiler != '4.06.0'

      - run: opam exec -- dune runtest -f
