# 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.

language: java
cache:
  directories:
    - $HOME/.m2
matrix:
  include:
    - os: linux-ppc64le
      jdk: openjdk8
  allow_failures:
    - jdk: openjdk-ea
jdk:
  - oraclejdk11
  - openjdk8
  - openjdk11
  - openjdk14  
  - openjdk-ea

script:
  - mvn -V
  # japicmp requires a package
  - mvn -V jar:jar japicmp:cmp -P japicmp

after_success:
  # jacoco will run in the main script. Include the profile to submit to coveralls.
  - mvn -V jacoco:report coveralls:report -Ptravis-jacoco
