name: Build and test

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

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release
  COVERALLS_PULL_REQUEST: ${{ github.event.number }}
  #COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
    # You can convert this to a matrix build if you need cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: true
      matrix:
        os: [ ubuntu-latest,
              windows-latest,
              ubuntu-20.04,
              macos-latest,
              macos-11
            ]
            # ubuntu-18.04 does not work due to compile error on asio
            # windows-2019 not included to spare free minutes   
    steps:
    - uses: actions/checkout@v4
    - name: Prepare dependencies
      run:   |
         if [ "$RUNNER_OS" == "Linux" ]; then
              sudo apt-get update && \
              sudo apt-get install -yq \
                libasio-dev \
                libssl-dev zlib1g-dev \
                cmake
         elif [ "$RUNNER_OS" == "Windows" ]; then
              VCPKG_DEFAULT_TRIPLET=x64-windows vcpkg install
         elif [ "$RUNNER_OS" == "macOS" ]; then
              brew install asio openssl zlib
         else
              echo "$RUNNER_OS not supported"
              exit 1
         fi
      shell: bash

    - name: Configure CMake
      run: |
         if [ "$RUNNER_OS" == "Windows" ]; then
              cmake \
                -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake  \
                -DCROW_FEATURES="ssl;compression" \
                -DCROW_AMALGAMATE=ON \
                -DCROW_BUILD_TESTS=ON \
                -B build
          elif [ "$RUNNER_OS" == "macOS" ]; then
              LDFLAGS="-L/usr/local/opt/openssl@1.1/lib" \
              CPPFLAGS="-I/usr/local/opt/openssl@1.1/include" \
              cmake \
                -DCROW_FEATURES="ssl;compression" \
                -DCROW_AMALGAMATE=ON \
                -DCROW_BUILD_TESTS=ON \
                -B build
         else
              cmake \
                -DCROW_FEATURES="ssl;compression" \
                -DCROW_AMALGAMATE=ON \
                -DCROW_BUILD_TESTS=ON \
                -B build
          fi
      shell: bash

    - name: Build
      # Build your program with the given configuration
      run: cmake --build build --config ${{env.BUILD_TYPE}}
      shell: bash

    - name: Test
      working-directory: ${{github.workspace}}/build
      # Execute tests defined by the CMake configuration.
      # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
      run: ctest --output-on-failure -C ${{env.BUILD_TYPE}}

    - name: Generate coverage report
      if: matrix.os == 'ubuntu-latest'
      run: |
        export CI_BRANCH=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}
          echo "CI_BRANCH=$CI_BRANCH" >> $GITHUB_ENV && \
        export TRAVIS_JOB_ID=$GITHUB_RUN_NUMBER && \
        git clone https://github.com/CrowCpp/cpp-coveralls.git && \
        cd cpp-coveralls && \
        pip3 install . --no-input && \
        cd .. && \
        coveralls --verbose --exclude-pattern .*/http_parser_merged.h --exclude-pattern .*/TinySHA1.hpp --dump coveralls.json
      shell: bash


    - name: Save report
      uses: actions/upload-artifact@v4
      if: matrix.os == 'ubuntu-latest'
      with:
        name: coveralls.json
        path: coveralls.json


    #- name: Package
    #  working-directory: ${{github.workspace}}/build
    #  run: | 
    #    cmake --build . --target ALL_BUILD && \ 
    #    cmake --build . --target doc && \
    #    cmake --build . --target package && \ 
    #    cpack --config CPackSourceConfig.cmake
