#  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:
  - curl --retry 10 -O 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
