#  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

env:
  - SCRIPT="mvn surefire:test@unit-tests -T 2C"
  - SCRIPT="mvn surefire:test@integration-tests"
  - SCRIPT="mvn clean site --projects site-book"
  - SCRIPT="mvn test --projects metron-interface/metron-config,metron-interface/metron-alerts"
  - SCRIPT="./dev-utilities/build-utils/verify_licenses.sh"

install: true
language: java
jdk:
  - oraclejdk8
before_install:
  - wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.zip
  - unzip -qq apache-maven-3.3.9-bin.zip
  - export M2_HOME=$PWD/apache-maven-3.3.9
  - export PATH=$M2_HOME/bin:$PATH
  - npm config set cache $HOME/.npm-cache --global
  - npm config set prefix $HOME/.npm-prefix --global

install:
  - time mvn install -T 2C -q -DskipTests=true -Dmaven.javadoc.skip=true -B -V

script:
  - time $SCRIPT

matrix:
  fast_finish: true

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
