language: java
sudo: false

cache:
  apt: true
  directories:
    - ~/.m2

addons:
  apt:
    packages:
      - xsltproc
      - xmlstarlet
      - oracle-java8-installer

branches:
  only:
    - master

install:
  - |
    if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
      # https://github.com/travis-ci/travis-ci/issues/6307#issuecomment-233315824
      rvm get head
    fi

matrix:
  fast_finish: true
  include:
    # testing of PR format
    - env:
        - DESC="test Issue ref in PR description"
        - CMD="./.ci/travis/travis.sh pr-description"

    # unit tests (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests and deploy"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Xms1024m -Xmx2048m'"
        - DEPLOY="true"

    # checkstyle (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="checkstyle and sevntu-checkstyle"
        - CMD="export MAVEN_OPTS='-Xmx2000m' && mvn clean verify -DskipTests -DskipITs -Dpmd.skip=true -Dfindbugs.skip=true -Dcobertura.skip=true"

    # cobertura and codecov (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="cobertura and codecov"
        - CMD="./.ci/travis/travis.sh cobertura-check"
        - CMD_AFTER_SUCCESS="bash <(curl -s https://codecov.io/bash)"

    # findbugs, spotbugs and pmd (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="findbugs,spotbugs,pmd"
        - CMD="export MAVEN_OPTS='-Xmx2000m' && mvn clean compile pmd:check findbugs:check spotbugs:check"

    # eclipse static analysis
    - jdk: oraclejdk8
      env:
        - DESC="eclipse static analysis"
        - CMD="mvn clean compile exec:exec -Peclipse-compiler"

    # Releasenotes generation - validaton
    - jdk: oraclejdk8
      env:
        - DESC="Releasenotes generation"
        - CMD="./.ci/travis/travis.sh releasenotes-gen"

    # NonDex (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="NonDex"
        - CMD="./.ci/travis/travis.sh nondex"

    # site (oraclejdk8 as 'site' success is required to be sure that on release time all will be ok, admins will use oracle8 version)
    # moved to https://codeship.com/projects/124310/configure_tests
    #- jdk: oraclejdk8
    #  env:
    #    - DESC="site"
    #    - CMD1="mvn clean site -Dlinkcheck.skip=true -DskipTests -DskipITs "
    #    - CMD2=" -Dpmd.skip=true -Dfindbugs.skip=true -Dcobertura.skip=true "
    #    - CMD3=" -Dcheckstyle.ant.skip=true -Dcheckstyle.skip=true"
    #    - CMD=$CMD1$CMD2$CMD3
    #    - COVERAGE_CMD=""

    # unit tests in German locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests de"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=de -Duser.country=DE -Xms1024m -Xmx2048m'"
    # unit tests in Spanish locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests es"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=es -Duser.country=ES -Xms1024m -Xmx2048m'"
    # unit tests in Finnish locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests fi"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=fi -Duser.country=FI -Xms1024m -Xmx2048m'"
    # unit tests in French locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests fr"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=fr -Duser.country=FR -Xms1024m -Xmx2048m'"
    # unit tests in Chinese locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests zh"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=zh -Duser.country=CN -Xms1024m -Xmx2048m'"
    # unit tests in Japanese locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests ja"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=ja -Duser.country=JP -Xms1024m -Xmx2048m'"
    # unit tests in Portuguese locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests pt"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=pt -Duser.country=PT -Xms1024m -Xmx2048m'"
    # unit tests in Turkish locale (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="tests tr"
        - CMD="mvn clean integration-test failsafe:verify -DargLine='-Duser.language=tr -Duser.country=TR -Xms1024m -Xmx2048m'"

    # assembly (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="assembly & run '-all' jar"
        - CMD="./.ci/travis/travis.sh assembly-run-all-jar"

    # NoExceptiontest - Guava with google_checks (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="NoExceptionTest - Guava with google_checks"
        - CMD="./.ci/travis/travis.sh no-exception-test-guava-with-google-checks"

    # release dry run (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="release dry run"
        - CMD="./.ci/travis/travis.sh release-dry-run"

    # Check the chmod on files.
    - env:
        - DESC="check permissions on all files"
        - CMD="./.ci/travis/travis.sh check-chmod"

    # Ensure that all Sevntu check are kused
    - jdk: oraclejdk8
      env:
        - DESC="All sevntu checks should be used"
        - CMD="./.ci/travis/travis.sh all-sevntu-checks"

    # MacOS verify (till cache is not working, we can not do verify)
    - os: osx
      env:
        - DESC="MacOS verify, site, assembly"
        - CMD="export JAVA_HOME=$(/usr/libexec/java_home) && mvn package -Dlinkcheck.skip=true && mvn package -Passembly "

    # https://sonarqube.com (oraclejdk8)
    - jdk: oraclejdk8
      env:
        - DESC="sonarqube.com"
        - CMD="./.ci/travis/travis.sh sonarqube"

    # No error testing - simple-binary-encoding
    - jdk: oraclejdk8
      env:
        - DESC="no error test on simple-binary-encoding"
        - CMD="./.ci/travis/travis.sh no-error-test-sbe"

script:
  - SKIP_FILES=".github|appveyor.yml|circle.yml|distelli-manifest.yml|fast-forward-merge.sh|LICENSE|LICENSE.apache20|README.md|release.sh|RIGHTS.antlr|shippable.yml|wercker.yml|intellij-idea-inspections.xml"
  - SKIP_CI=$(if [[ $(git diff --name-only HEAD HEAD~1 | grep -vE "$SKIP_FILES" | cat | wc -c | sed 's/^ *//' ) > 0 ]]; then echo false; else echo true; fi;)
  - echo "SKIP_CI="$SKIP_CI
  - |
    set -e
    if [[ $SKIP_CI == 'false' ]];
    then
         eval $CMD;
         echo "eval of CMD is completed"
    fi

after_success:
  - |
    set -e
    if [[ -n $CMD_AFTER_SUCCESS
          && $SKIP_CI == 'false'
       ]];
    then
        eval $CMD_AFTER_SUCCESS;
        echo "CMD_AFTER_SUCCESS is finished";
    fi
  - |
    set -e
    SKIP_DEPLOY=$(if [ $(git log -1 | grep -E "\[maven-release-plugin\] prepare release" | cat | wc -l) -lt 1 ]; then echo false; else echo true; fi;)
    if [[ $TRAVIS_REPO_SLUG == 'checkstyle/checkstyle'
            && $TRAVIS_BRANCH == 'master'
            && $TRAVIS_PULL_REQUEST == 'false'
            && $DEPLOY == 'true'
            && $SKIP_CI == 'false'
            && $SKIP_DEPLOY == 'false'
       ]];
    then
        mvn -s config/deploy-settings.xml -Pno-validations deploy;
        echo "deploy to maven snapshot repository is finished";
    fi
