# 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: "c918989d018ae3af899798716c35f4fe125296a4"

cache:
  directories:
    - $HOME/.m2

jdk:
  - openjdk8

before_script:
  - echo "MAVEN_OPTS='-Xms1024m -Xmx3072m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m'" > ~/.mavenrc
  - sed -i 's/log4j.logger.org.apache.kylin=DEBUG/log4j.logger.org.apache.kylin=WARN/g' build/conf/kylin-server-log4j.properties
  - sed -i 's/log4j.logger.org.apache.kylin=DEBUG/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;
    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
