env:
  BUILD_DIR: "build"
  GCOVR_FLAGS: "--gcov-ignore-parse-errors --exclude-throw-branches --filter Common --filter Pcap --filter Packet --xml"

task:
  name: Test FreeBSD
  freebsd_instance:
    matrix:
      image_family: freebsd-12-3
      image_family: freebsd-13-1
  install_script:
    - pkg install -y bash cmake git gmake gsed libpcap tcpreplay
  configure_script:
    # Ensure user have access to network devices instead of giving super-user right
    - chmod a+rw /dev/bpf*
    - cmake -S . -B Dist
  build_script:
    - cmake --build Dist -j 2
  test_pcapplusplus_script:
    - ifconfig vtnet0 promisc
    - python -m ensurepip
    - python -m pip install -r ci/run_tests/requirements.txt
    - python ci/run_tests/run_tests.py --interface vtnet0
  test_examples_script:
    - cd Tests/ExamplesTest
    - python -m ensurepip
    - python -m pip install -r requirements.txt
    - python -m pytest --interface vtnet0 --root-path=../../Dist/examples_bin

task:
  name: Test Zstd Linux
  container:
    image: seladb/ubuntu2004-zstd:latest
  configure_script:
    - cmake -DLIGHT_PCAPNG_ZSTD=ON -DPCAPPP_BUILD_COVERAGE=ON -S . -B Dist
  build_script:
    - cmake --build Dist -j 2
  test_pcapplusplus_script:
    - python3 -m pip install gcovr
    - python3 -m pip install -r ci/run_tests/requirements.txt
    - python3 ci/run_tests/run_tests.py --interface eth0
  coverage_report_script:
    - gcovr -v -r . $GCOVR_FLAGS -o coverage.xml
    - curl -Os https://uploader.codecov.io/latest/linux/codecov
    - chmod +x codecov
    - ./codecov -v -f coverage.xml -F zstd -F ubuntu2004 -F unittest || true

task:
  name: Test Zstd MacOS
  macos_instance:
    image: ghcr.io/cirruslabs/macos-ventura-xcode:14.1
  configure_script:
    - brew install zstd
    # Ensure user have access to network devices instead of giving super-user right
    - sudo chmod a+rw /dev/bpf*
    - cmake -DLIGHT_PCAPNG_ZSTD=ON -DPCAPPP_BUILD_COVERAGE=ON -S . -B Dist
  build_script:
    - cmake --build Dist -j 2
  install_tcpreplay_gcovr_script:
    - brew install tcpreplay gcovr
  test_pcapplusplus_script:
    - python3 -m ensurepip
    - python3 -m pip install -r ci/run_tests/requirements.txt
    - python3 ci/run_tests/run_tests.py --interface en0 --pcap-test-args="-x TestPcapLiveDeviceSpecialCfg"
  coverage_report_script:
    - gcovr -v -r . $GCOVR_FLAGS -o coverage.xml
    - curl -Os https://uploader.codecov.io/latest/macos/codecov
    - chmod +x codecov
    - ./codecov -v -f coverage.xml -F zstd -F macos-ventura -F unittest || true

task:
  name: Build Doxygen Documentation
  container:
    image: seladb/ubuntu1804:latest
  env:
    - GITHUB_EMAIL: ENCRYPTED[ae4956ec74c9f329f7787cdfe3a6b5842870659275d0a9b513a0f6e64cd9c71cd2eb64219a9dc695f446fbd93c48fb04]
    - GITHUB_TOKEN: ENCRYPTED[ab88249da2005c70f25f5910b08e907139f73bc0efb31a19b33f832e9e3bffe3cfc8e81932f21d7734c7aceca2a77188]
  get_code_script:
    - git clone https://github.com/PcapPlusPlus/pcapplusplus.github.io.git
  configure_script:
    - cmake -DPCAPPP_BUILD_EXAMPLES=OFF -DPCAPPP_BUILD_TESTS=OFF -B build -S .
  build_script:
    - cmake --build build -j 2
  build_documentation_script:
    - cd pcapplusplus.github.io/static/api-docs/next/doxygen
    - doxygen Doxyfile-ci
  upload_documentation_script: |
    if [ "$CIRRUS_BRANCH" == "master" -a "$CIRRUS_REPO_OWNER" == "seladb" ]; then
      find pcapplusplus.github.io/static/api-docs/next/ -maxdepth 1 -type f -exec rm {} \;
      rm -rf pcapplusplus.github.io/static/api-docs/next/search/
      mv pcapplusplus.github.io/static/api-docs/next/html/* pcapplusplus.github.io/static/api-docs/next/
      cd pcapplusplus.github.io/static/api-docs/next/
      git config user.name "seladb"
      git config user.email "${GITHUB_EMAIL}"
      git add .
      git commit -m "Update API documentation for commit ${CIRRUS_CHANGE_IN_REPO}"
      git push --quiet "https://${GITHUB_TOKEN}@github.com/PcapPlusPlus/pcapplusplus.github.io" master
    fi
