name: CI
on:
  push:
    branches:
      - '*'
  pull_request:
    branches:
      - main
jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-24.04
            otp-version: 24.3
            rebar3-version: 3.22
          - os: ubuntu-24.04
            otp-version: 25.3
            rebar3-version: 3.22
          - os: ubuntu-24.04
            otp-version: 26
            rebar3-version: 3.22
          - os: ubuntu-24.04
            otp-version: 27
            rebar3-version: 3.23
          - os: ubuntu-24.04
            otp-version: 28
            rebar3-version: 3.25
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - uses: erlef/setup-beam@v1
        with:
          otp-version: ${{matrix.otp-version}}
          rebar3-version: ${{matrix.rebar3-version}}
      - name: Cache Hex packages
        uses: actions/cache@v4
        with:
          path: ~/.cache/rebar3/hex/hexpm/packages
          key: ${{ runner.os }}-hex-${{ hashFiles(format('{0}{1}', github.workspace, '/rebar.lock')) }}
          restore-keys: |
            ${{ runner.os }}-hex-
      - name: Compile
        run: make compile
      - name: Test
        run: make test
      - name: Check format
        run: make checkfmt

  dialyzer:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: erlef/setup-beam@v1
        with:
          otp-version: 28
          rebar3-version: 3.25
      - name: Cache Dialyzer PLTs
        uses: actions/cache@v4
        with:
          path: ~/.cache/rebar3/rebar3_*_plt
          key: ${{ runner.os }}-dialyzer-${{ hashFiles(format('{0}{1}', github.workspace, '/rebar.config')) }}
          restore-keys: |
            ${{ runner.os }}-dialyzer-
      - name: Dialyzer
        run: rebar3 dialyzer
