name: test

on: [push, pull_request]

jobs:
  ubuntu:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: install libraries
        run: sudo apt-get update && sudo apt-get install -y libbrotli-dev libcurl4-openssl-dev
      - name: build and run tests
        run: cd test && make -j4
      - name: run fuzz test target
        run: cd test && make fuzz_test

  macos:
    runs-on: macos-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: build and run tests
        run: |
          cd test && make -j2

  windows:
    runs-on: windows-latest
    steps:
    - name: Prepare Git for Checkout on Windows
      run: |
        git config --global core.autocrlf false
        git config --global core.eol lf
    - name: Checkout
      uses: actions/checkout@v4
    - name: Export GitHub Actions cache environment variables
      uses: actions/github-script@v7
      with:
        script: |
          core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
          core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
    - name: setup msbuild on windows
      uses: microsoft/setup-msbuild@v2
    - name: Install libraries
      run: |
        vcpkg install gtest curl zlib brotli
        choco install openssl
    - name: Configure CMake for Release
      run: cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE={{ .env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake -DHTTPLIB_TEST=ON -DHTTPLIB_REQUIRE_OPENSSL=ON -DHTTPLIB_REQUIRE_ZLIB=ON -DHTTPLIB_REQUIRE_BROTLI=ON
    - name: Build with CMake
      run: cmake --build build --config Release
    - name: Run tests with CTest
      run: ctest --output-on-failure --test-dir build -C Release
    env:
      VCPKG_ROOT: "C:/vcpkg"
      VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
