# 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.

os: linux
dist: xenial
services:
  - docker
env:
  global:
    - MONGODB=4.4.3
  jobs:
    - MODULE=oak-jcr PROFILE="-PintegrationTesting" UT="-Dsurefire.skip.ut=true" MONGODB_MODE="--single"
    - MODULE=oak-jcr PROFILE="" UT="" MONGODB_MODE="--single"
    - MODULE=oak-store-document PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
    - MODULE=oak-store-document PROFILE="-PintegrationTesting,replicaset" UT="" MONGODB_MODE="--replicaset"
    - MODULE=oak-lucene PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
    - MODULE=oak-it PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
    - MODULE=oak-run PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
    - MODULE=oak-upgrade PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
    - MODULE=oak-pojosr PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
    - MODULE=oak-it-osgi PROFILE="-PintegrationTesting" UT="" MONGODB_MODE="--single"
before_install:
  - docker pull trekawek/azurite
install:
  - wget -N http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-${MONGODB}.tgz -P $HOME/.mongodb
  - tar --skip-old-files -C $HOME/.mongodb -xf $HOME/.mongodb/mongodb-linux-x86_64-ubuntu1604-${MONGODB}.tgz
  - mkdir -p target/mongodb/data
  - cd target/mongodb
  - pyenv versions
  - pyenv install 3.6.3
  - pyenv global 3.6.3
  - python -V
  - python -m venv mtools
  - source mtools/bin/activate
  - pip install --upgrade pip
  - pip install python-dateutil psutil pymongo mtools
  - mlaunch init ${MONGODB_MODE} --binarypath $HOME/.mongodb/mongodb-linux-x86_64-ubuntu1604-${MONGODB}/bin --dir ${TRAVIS_BUILD_DIR}/target/mongodb/data
  - cd $TRAVIS_BUILD_DIR
  - mvn --batch-mode -DskipTests -Dbaseline.skip=true install -pl :${MODULE} -am -nsu
script:   mvn --batch-mode clean verify -DtrimStackTrace=false -Dbaseline.skip=true ${UT} ${PROFILE} -Dnsfixtures=DOCUMENT_NS -pl :${MODULE} -nsu
language: java
jdk:
  - openjdk8
cache:
  directories:
    - $HOME/.m2
    - $HOME/.mongodb
addons:
  apt:
    packages:
      - python-pip
notifications:
  email: false
