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

dist: trusty
sudo: required
addons:
  chrome: stable

install: true
language: java
jdk:
  - oraclejdk8
before_install:
  - export M2_HOME=$PWD/apache-maven-3.3.9
  - export PATH=$M2_HOME/bin:$PATH
  - '[[ -d $M2_HOME ]] || curl --retry 10 -O https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.zip'
  - '[[ -d $M2_HOME ]] || unzip -qq apache-maven-3.3.9-bin.zip'
  - npm config set cache $HOME/.npm-cache --global
  - npm config set prefix $HOME/.npm-prefix --global

matrix:
  fast_finish: true
  include:
    - name: Unit Tests
      script:
        - time mvn install -T 2C -q -DskipTests=true -Dmaven.javadoc.skip=true -Dskip.npm -B -V
        - time mvn surefire:test@unit-tests -T 2C

    - name: Integration Tests
      script:
        - time mvn install -T 2C -q -DskipTests=true -Dmaven.javadoc.skip=true -Dskip.npm -B -V
        - time mvn surefire:test@integration-tests

    - name: Alerts UI Tests
      script:
        - time mvn install -T 2C -q -DskipTests=true -Dmaven.javadoc.skip=true -B -V -pl ':metron-alerts'
        - time mvn test -pl ':metron-alerts'

    - name: Management UI Tests
      script:
        - time mvn install -T 2C -q -DskipTests=true -Dmaven.javadoc.skip=true -B -V -pl ':metron-config'
        - time mvn test -pl ':metron-config'

    - name: Site Book
      script:
        - time mvn clean site -pl site-book

    - name: Verify Licenses
      script:
        - time mvn install -T 2C -q -DskipTests=true -Dmaven.javadoc.skip=true -B -V -Dskip.npm
        - time ./dev-utilities/build-utils/verify_licenses.sh

before_cache:
  - rm -rf $HOME/.m2/repository/org/apache/metron

cache:
  timeout: 1000
  directories:
  - $HOME/.npm-cache
  - $HOME/.npm-prefix
  - metron-interface/metron-config/node_modules
  - $HOME/.m2
  - $HOME/.npm
  - $M2_HOME
