#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License
#

language: c
cache: ccache
jobs:
  fast_finish: true
  allow_failures:
    - os: osx
    - name: "qdrouterd:TSAN"
    - arch: arm64
    - arch: s390x
  include:
  - name: "apache-rat:check"
    os: linux
    env: []
    language: java
    addons:
      apt:
        packages: []
    install: []
    before_script: []
    script:
    - mvn apache-rat:check
    before_cache:
    - rm -rf $HOME/.m2/repository/org/apache/qpid/*
    cache:
      directories:
      - $HOME/.m2/repository
    after_script:
    - cat target/rat.txt || true
  # prepending /usr/bin to PATH to avoid mismatched python interpreters in /opt
  - name: "qdrouterd:Debug (gcc on xenial)"
    os: linux
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - PATH="/usr/bin:$PATH" PROTON_VERSION=main BUILD_TYPE=Debug
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan'
  - name: "qdrouterd:Coverage"
    os: linux
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.34.0 BUILD_TYPE=Coverage
  - name: "qdrouterd:RelWithDebInfo+MemoryDebug (gcc on xenial)"
    os: linux
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.34.0 BUILD_TYPE=RelWithDebInfo
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG'
  - name: "qdrouterd:RelWithDebInfo+MemoryDebug (clang on focal)"
    os: linux
    dist: focal
    compiler: clang
    before_install:
    - sudo apt-get install clang-11 llvm-11-dev
    # https://github.com/pypa/virtualenv/issues/1740
    # https://github.com/pypa/virtualenv/issues/1873
    - python -m pip install --user --upgrade pip
    - python -m pip install --user --upgrade tox virtualenv==20.0.23
    # Install quart to run the http2 tests.
    - python -m pip install --user quart
    # DISPATCH-1883: Install selectors to run tcp echo server/client tools
    - python -m pip install --user selectors
    # Install grpcio and protobuf to run the grpc tests.
    - python -m pip install --user grpcio protobuf
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - CC=clang-11
    - CXX=clang++-11
    - PATH="/usr/bin:$PATH" PROTON_VERSION=main BUILD_TYPE=RelWithDebInfo
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG'
  - name: "qdrouterd:RelWithDebInfo+MemoryDebug (gcc on focal)"
    arch: s390x
    os: linux
    dist: focal
    python:
      - "3.9"
    before_install:
      # Install and use the latest Node.js LTS version
      - nvm install "lts/*"
      # https://github.com/pypa/virtualenv/issues/1740
      # https://github.com/pypa/virtualenv/issues/1873
      - python3 -m pip install --user --upgrade pip
      - python3 -m pip install --user --upgrade tox virtualenv==20.0.23
      # Install quart to run the http2 tests.
      - python3 -m pip install --user quart
      # DISPATCH-1883: Install selectors to run tcp echo server/client tools
      - python3 -m pip install --user selectors
      # Install grpcio and protobuf to run the grpc tests.
      #  Installation on s390x currently broken https://github.com/grpc/grpc/pull/25363
      #  Binary wheel is not available in PyPI for s390x and source install requires fetching git submodules first
      - python3 -m pip install --user protobuf
      - sudo apt install python3-grpcio
    env:
      - QPID_SYSTEM_TEST_TIMEOUT=300
      - PROTON_VERSION=main BUILD_TYPE=RelWithDebInfo
      - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG -DQD_ENABLE_ASSERTIONS=ON -DDISPATCH_TEST_TIMEOUT=500'
  - name: "qdrouterd:RelWithDebInfo+MemoryDebug (clang on focal)"
    arch: arm64
    os: linux
    dist: focal
    compiler: clang
    python:
      - "3.9"
    before_install:
      - sudo apt-get install clang-11 llvm-11-dev
      # Install and use the latest Node.js LTS version
      - nvm install "lts/*"
      # https://github.com/pypa/virtualenv/issues/1740
      # https://github.com/pypa/virtualenv/issues/1873
      - python3 -m pip install --user --upgrade pip
      - python3 -m pip install --user --upgrade tox virtualenv==20.0.23
      # Install quart to run the http2 tests.
      - python3 -m pip install --user quart
      # DISPATCH-1883: Install selectors to run tcp echo server/client tools
      - python3 -m pip install --user selectors
      # Install grpcio and protobuf to run the grpc tests.
      - python3 -m pip install --user grpcio protobuf
    env:
      - QPID_SYSTEM_TEST_TIMEOUT=300
      - CC=clang-11
      - CXX=clang++-11
      - PROTON_VERSION=main BUILD_TYPE=RelWithDebInfo
      - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG -DQD_ENABLE_ASSERTIONS=ON -DDISPATCH_TEST_TIMEOUT=500'
  - name: "qdrouterd:Default Build"
    os: linux
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.34.0
  - name: "qdrouterd:TSAN"
    os: linux
    dist: focal
    before_install:
      # https://github.com/pypa/virtualenv/issues/1740
      # https://github.com/pypa/virtualenv/issues/1873
      - python -m pip install --user --upgrade pip
      - python -m pip install --user --upgrade tox virtualenv==20.0.23
      # Install quart to run the http2 tests.
      - python -m pip install --user quart
      # DISPATCH-1883: Install selectors to run tcp echo server/client tools
      - python -m pip install --user selectors
      # Install grpcio and protobuf to run the grpc tests.
      - python -m pip install --user grpcio protobuf
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.34.0
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=tsan'
  - name: "qdrouterd:RelWithDebInfo+MemoryDebug (clang on macOS)"
    os: osx
    osx_image: xcode11
    env:
    - QPID_SYSTEM_TEST_TIMEOUT=300
    - PATH="/opt/local/bin:/opt/local/sbin:/usr/local/bin:$PATH" PROTON_VERSION=main
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG -DQD_ENABLE_ASSERTIONS=ON -DDISPATCH_TEST_TIMEOUT=500'
    # exclude tests that require raw_connection functionality; not available in libuv proactor
    - DISPATCH_CTEST_EXTRA='-E system_tests_tcp_adaptor|system_tests_http1_adaptor|system_tests_http2|system_tests_grpc|system_tests_http1_over_tcp'
    before_install:
    - bash ./macports.sh
    - export COLUMNS=80
    - yes | sudo port install cmake swig swig-python jsoncpp libwebsockets nghttp2 cyrus-sasl2 pkgconfig python37 py37-pip
    # PROTON-2351: install libuv @1.40 because proton is broken with 1.41
    #  https://trac.macports.org/wiki/howto/InstallingOlderPort
    - git clone --single-branch https://github.com/macports/macports-ports.git
    - pushd macports-ports/devel/libuv; git checkout 425dd6e31f6c31886fabd1f911b5f2aa96c4f27d; yes | sudo port install; popd
    # set aliases for CMake's PythonInterp and PythonLibs to find MacPort's `python` on the path first
    - sudo port select --set python python37
    - sudo port select --set python3 python37
    - python -m venv p3venv
    - source p3venv/bin/activate

addons:
  apt:
    packages:
    # Proton requirements
    - cmake
    - libsasl2-dev
    - libssl-dev
    - python2.7
    - python2.7-dev
    - sasl2-bin
    - swig
    - libnghttp2-dev
    # documentation
    - asciidoc
    - asciidoctor
    - dblatex
    # unit test requirement
    - tox
    # code coverage
    - lcov

before_install:
# Install and use the latest Node.js LTS version
- nvm install "lts/*"

install:
- NPROC=2
- PREFIX=$PWD/install
- git clone --depth=10 --branch=$PROTON_VERSION https://github.com/apache/qpid-proton.git
- cmake -version

# Build and install proton from source.
- mkdir qpid-proton/build
- pushd qpid-proton/build
- cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILD_BINDINGS=python
- cmake --build . --target install -- -j $NPROC
- popd

before_script:
- source qpid-proton/build/config.sh
- mkdir build
- pushd build
- cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${DISPATCH_CMAKE_ARGS}
- . config.sh
- make -j $NPROC

script:
- pushd ../qpid-proton
- echo $(echo "Current proton commit:") $(git rev-parse HEAD) "(${PROTON_VERSION})"
- popd
# Workaround on macOS for PROTON-808 Binaries have their library locations stripped
- if [[ "${OSTYPE}" == "darwin"* ]]; then install_name_tool -add_rpath $PREFIX/lib/. $PREFIX/lib/proton/bindings/python/_cproton.so; fi
- ctest --timeout 1200 -V ${DISPATCH_CTEST_EXTRA} && if [ "$BUILD_TYPE" = "Coverage" ]; then cmake --build . --target coverage; fi

after_success:
- cd ${TRAVIS_BUILD_DIR}/build
- if [ "$BUILD_TYPE" = "Coverage" ]; then bash <(curl -s https://codecov.io/bash); fi
