name: Continuous Integration

on:
  - push
  - pull_request
  - workflow_dispatch

jobs:
  ci:
    runs-on: ubuntu-24.04
    name: Erlang ${{matrix.otp}} / rebar ${{matrix.rebar3}}
    strategy:
      matrix:
        otp: ["26", "27", "28"]
        rebar3: ["3"]
    steps:
      - uses: actions/checkout@v4

      - uses: erlef/setup-beam@v1
        with:
          otp-version: ${{matrix.otp}}
          rebar3-version: ${{matrix.rebar3}}

      - uses: actions/cache@v4
        env:
          cache-name: rebar3
        with:
          path: |
            ~/.cache/rebar3
            _build
          key: ci-${{runner.os}}-${{env.cache-name}}-otp_${{matrix.otp}}-rebar_${{matrix.rebar3}}-${{hashFiles('rebar.lock')}}
          restore-keys: |
            ci-${{runner.os}}-${{env.cache-name}}-otp_${{matrix.otp}}-rebar_${{matrix.rebar3}}
            ci-${{runner.os}}-${{env.cache-name}}-otp_${{matrix.otp}}

      - name: Compile
        run: rebar3 do clean, compile

      - name: Analyze
        run: rebar3 do xref, dialyzer

      - name: Test
        run: rebar3 do eunit, ct
