#
# 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: java

# Run it on precise, until we figure out how to make jdk7 work (or no longer support jdk7).
dist: precise

install: true

jdk:
  - oraclejdk7
  - oraclejdk8

# Run once to test core, then test the compat modules in groups, though their respective example modules
# Note: 1.1, 1.2, cdh-57 amd cdh-5.8 all depend on compat-1.1-base, so we run them all together
# Note: -DskipCoreTests will active a profile in tephra-core that skips tests
env:
 - OPTIONS='-am -pl tephra-core'
 - OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-0.96,tephra-hbase-compat-0.98,tephra-examples/hbase-0.96,tephra-examples/hbase-0.98'
 - OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-1.0,tephra-hbase-compat-1.0-cdh,tephra-examples/hbase-1.0,tephra-examples/hbase-1.0-cdh'
 - OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-1.1-base,tephra-examples/hbase-1.1,tephra-examples/hbase-1.2,tephra-examples/cdh-5.7,tephra-examples/cdh-5.8'
 - OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-1.3,tephra-examples/hbase-1.3'
 - OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-1.4,tephra-examples/hbase-1.4'
 - OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-2.0,tephra-examples/hbase-2.0'

# exclude hbase-2.0 for jdk7;
# exclude hbase-1.4 for jdk7; then include it with an extra excluded test to work around TEPHRA-285
matrix:
  exclude:
  - jdk: oraclejdk7
    env: OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-2.0,tephra-examples/hbase-2.0'
  - jdk: oraclejdk7
    env: OPTIONS='-am -DskipCoreTests -pl tephra-hbase-compat-1.4,tephra-examples/hbase-1.4'
  include:
  - jdk: oraclejdk7
    env: OPTIONS='-am -DskipCoreTests -DtestExcludes=org/apache/tephra/hbase/coprocessor/TransactionProcessorTest.java -pl tephra-hbase-compat-1.4,tephra-examples/hbase-1.4'

branches:
  only:
    - master 
    - /^feature\/.*$/
    - /^hotfix\/.*$/
    - /^release\/.*$/

script:
 - mvn test $OPTIONS

sudo: false

cache:
  directories:
    - $HOME/.m2
