name: CI

on:
  pull_request:
    types: [synchronize, opened, reopened]
  push:
    branches: [main]

jobs:
  build:
    name: ${{ matrix.os }} / OCaml ${{ matrix.ocaml-compiler }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
        ocaml-compiler:
          - 5.1.1

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

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

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

      - run: opam exec -- dune build

      - run: opam exec -- dune runtest

  lint-doc:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Use OCaml 5.1.1
        uses: ocaml/setup-ocaml@v2
        with:
          ocaml-compiler: 5.1.1
          dune-cache: true

      - name: Lint doc
        uses: ocaml/setup-ocaml/lint-doc@v2

  lint-fmt:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Use OCaml 5.1.1
        uses: ocaml/setup-ocaml@v2
        with:
          ocaml-compiler: 5.1.1
          dune-cache: true

      - name: Lint fmt
        uses: ocaml/setup-ocaml/lint-fmt@v2
