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