#  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

env:
  - TEST_TYPE=default

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 -q -T 2C -DskipTests clean install

script:
  - time mvn -q -T 2C surefire:test@unit-tests && time mvn -q surefire:test@integration-tests && time mvn -q test --projects metron-interface/metron-config && time 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
