name: Common Test

on: [pull_request, push]

env:
  LATEST_OTP_RELEASE: 28

jobs:
  linux:
    name: Test on OTP ${{ matrix.otp_version }} and ${{ matrix.os }}
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        otp_version: [26, 27, 28]
        os: [ubuntu-latest]

    container:
      image: erlang:${{ matrix.otp_version }}

    steps:
    - uses: actions/checkout@v4
    - name: Compile
      run: ./bootstrap
    - name: CT tests
      run: ./rebar3 ct
    - shell: bash
      name: Dialyzer
      run: |
        ./rebar3 clean -a
        ./rebar3 as dialyzer dialyzer
      if: ${{ matrix.otp_version == env.LATEST_OTP_RELEASE }}

  macos:
    name: Test on MacOS
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v4
    - name: Brew Version Check
      run: brew --version
    - name: Brew Cleanup
      run: |
        brew cleanup --prune=all -s
        brew autoremove
    - name: Brew Untap Casks
      run: brew untap homebrew/cask homebrew/core
    - name: Keep Brew Fresh
      run: |
        brew update || true
        brew upgrade || true
    - name: Debug Brew
      run: brew doctor || true
    - name: Install Erlang
      run: brew install erlang@${{ env.LATEST_OTP_RELEASE }}
    - name: Compile
      run: ./bootstrap
    - name: CT tests
      run: ./rebar3 ct

  windows:
    name: Test on Windows
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v4
    - name: Install Erlang
      run: choco install erlang
    - name: Compile
      run: .\bootstrap.ps1
    - name: CT tests
      run: .\rebar3.ps1 ct
