#
# 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"
  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"
    os: linux
    env:
    - PATH="/usr/bin:$PATH" PROTON_VERSION=master BUILD_TYPE=Debug
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan'
  - name: "qdrouterd:Coverage"
    os: linux
    env:
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.33.0 BUILD_TYPE=Coverage
  - name: "qdrouterd:RelWithDebInfo+MemoryDebug (gcc on xenial)"
    os: linux
    env:
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.33.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-10 llvm-10-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:
    - CC=clang-10
    - CXX=clang++-10
    - PATH="/usr/bin:$PATH" PROTON_VERSION=master BUILD_TYPE=RelWithDebInfo
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=asan -DCMAKE_C_FLAGS=-DQD_MEMORY_DEBUG'
  - name: "qdrouterd:Default Build"
    os: linux
    env:
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.33.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:
    - PATH="/usr/bin:$PATH" PROTON_VERSION=0.33.0
    - DISPATCH_CMAKE_ARGS='-DRUNTIME_CHECK=tsan'
  - os: osx
    osx_image: xcode11
    env:
    - PATH="/opt/local/bin:/opt/local/sbin:/usr/local/bin:$PATH" PROTON_VERSION=master
    before_install:
    - bash ./macports.sh
    - export COLUMNS=80
    - yes | sudo port install cmake swig swig-python libuv jsoncpp libwebsockets nghttp2 cyrus-sasl2 pkgconfig python37 py37-pip
    # 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
    - python-unittest2
    - 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 -DBUILD_PYTHON=YES -DBUILD_JAVASCRIPT=NO -DBUILD_CPP=NO -DBUILD_GO=NO -DBUILD_RUBY=NO -DBUILD_PHP=NO -DBUILD_PERL=NO
- 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 -V && 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
