# Configuration file for Travis continuous integration.
#
# 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

addons:
  sonarcloud:
    organization: "kylin"
    token:
      secure: "2ca24e5a04ad1fca4ca956953810421aa8bd1470"

cache:
  directories:
    - $HOME/.m2

jdk:
  - openjdk8

before_script:
  - echo "Downloading Maven 3.5.3"
      && wget https://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.zip
      && unzip -qq apache-maven-3.5.3-bin.zip
      && export M2_HOME=$PWD/apache-maven-3.5.3
      && export PATH=$M2_HOME/bin:$PATH
      && mvn -version
  - echo "MAVEN_OPTS='-Xms1024m -Xmx3072m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m'" > ~/.mavenrc
  - sed -i 's/log4j.logger.org.apache.kylin=INFO/log4j.logger.org.apache.kylin=WARN/g' build/conf/kylin-server-log4j.properties
  - sed -i 's/log4j.logger.org.apache.kylin=INFO/log4j.logger.org.apache.kylin=WARN/g' build/conf/kylin-tools-log4j.properties

script:
  - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent test coveralls:report -e
  - if [[ -n "${TRAVIS_PULL_REQUEST_SLUG}" && "${TRAVIS_PULL_REQUEST_SLUG}" != "${TRAVIS_REPO_SLUG}" ]]; then
        echo "The pull request from ${TRAVIS_PULL_REQUEST_SLUG} is an EXTERNAL pull request. Skip sonar analysis.";
    else
        git fetch --unshallow --quiet;
        mvn sonar:sonar -e -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=2ca24e5a04ad1fca4ca956953810421aa8bd1470 -Dsonar.organization=kylin;
    fi

notification:
  email:
    recipients:
      - dev@kylin.apache.org
    on_failure: always

after_success:
  - bash <(curl -s https://codecov.io/bash)
  
before_cache:
  # Remove project's local artifacts to force maven reactor resolve
  - rm -rf $HOME/.m2/repository/org/apache/kylin

# blocklist
branches:
  except:
  - document
