name: tests

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

permissions:
  contents: read

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: ./scripts/clang-format-check

  autotools:
    strategy:
      matrix:
        os: ["ubuntu-latest", "macos-latest"]
        cc: ["gcc", "clang"]
        dtoa: ["yes", "no"]

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

    steps:
      - if: ${{runner.os == 'macOS'}}
        run: brew install autoconf automake libtool
      - uses: actions/checkout@v6
      - run: autoreconf -fi
      - env:
          CC: ${{ matrix.cc }}
          CFLAGS: -Werror
        run: ./configure --enable-dtoa=${{ matrix.dtoa }}
      - run: make check

  cmake:
    strategy:
      matrix:
        os: ["ubuntu-latest", "macos-latest", "windows-latest"]
        cc: ["gcc", "clang"]
        exclude:
          - os: windows-latest
            cc: gcc
          - os: windows-latest
            cc: clang
        include:
          - os: windows-latest
            cc: 'msvc'  # Doesn't really matter, MSVC is always used on Windows

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

    steps:
      - uses: actions/checkout@v6
      - env:
          CC: ${{matrix.cc}}
        run: cmake -DCMAKE_BUILD_TYPE=Release .
      - run: cmake --build . --config Release
      - run: ctest --output-on-failure -C Release

  valgrind:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - run: sudo apt update && sudo apt install valgrind
      - run: cmake -DJANSSON_TEST_WITH_VALGRIND=ON .
      - run: cmake --build .
      - run: ctest --output-on-failure
