language: c

sudo: required
dist: xenial

# don't build tags separately
if: tag IS blank

compiler: gcc

cache: ccache

before_install:
  - travis_retry ./scripts/test.sh deps
  - travis_retry ./scripts/test.sh pydeps

before_script:
  - sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 || true

script:
  - ./scripts/test.sh

after_success:
  if [ "$TEST" == "coverage" ]; then
    bash <(curl -s https://codecov.io/bash);
  fi

after_failure:
  - cat config.log
  - sleep 1

env:
  global:
    - TESTS_REDUCED_KEYLENGTHS=yes
    - LEAK_DETECTIVE=no
    - MONOLITHIC=no

matrix:
  include:
    - env: TEST=sonarcloud
      if: type = push AND env(SONAR_TOKEN) IS present
      git:
        depth: false
      addons:
        sonarcloud:
          organization: "strongswan"
    - env: TEST=osx
      compiler: clang
      os: osx
    - env: TEST=all
    - env: TEST=all
      compiler: clang
    - env: TEST=all MONOLITHIC=yes
    - env: TEST=all MONOLITHIC=yes
      compiler: clang
    - env: TEST=all LEAK_DETECTIVE=yes
    - env: TEST=all LEAK_DETECTIVE=yes
      compiler: clang
    - env: TEST=coverage
    - env: TEST=fuzzing MONOLITHIC=yes
      compiler: clang
    - env: TEST=win64 MONOLITHIC=yes
    - env: TEST=win32 MONOLITHIC=yes
    - env: TEST=dist
    # "default" with GCC is already tested with "dist" above
    - env: TEST=default
      compiler: clang
    - env: TEST=default MONOLITHIC=yes
    - env: TEST=default MONOLITHIC=yes
      compiler: clang
    - env: TEST=default LEAK_DETECTIVE=yes
    - env: TEST=default LEAK_DETECTIVE=yes
      compiler: clang
    # we can't test Vstr as negative int args are not properly passed to CBs
    - env: TEST=printf-builtin
    - env: TEST=printf-builtin
      compiler: clang
    - env: TEST=printf-builtin LEAK_DETECTIVE=yes
    - env: TEST=printf-builtin LEAK_DETECTIVE=yes
      compiler: clang
    # the crypto plugins are build-tested with clang via "all" above
    - env: TEST=botan
    - env: TEST=botan LEAK_DETECTIVE=yes
    - env: TEST=wolfssl
    - env: TEST=wolfssl LEAK_DETECTIVE=yes
    - env: TEST=openssl
    - env: TEST=openssl LEAK_DETECTIVE=yes
    - env: TEST=openssl-1.0
    - env: TEST=openssl-1.0 LEAK_DETECTIVE=yes
    - env: TEST=gcrypt
    - env: TEST=gcrypt LEAK_DETECTIVE=yes
    - env: TEST=apidoc