# 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
sudo: false

matrix:
  allow_failures:
    # May not yet be supported by all plugins
    - jdk: openjdk-ea

jdk:
  - openjdk8
  - openjdk10
  - openjdk11
  - openjdk12
  - openjdk13
  - openjdk-ea

script:
  - mvn
  - mvn -P commons-geometry-examples --projects commons-geometry-examples verify apache-rat:check checkstyle:check

after_success:
  - mvn jacoco:report coveralls:report
