# 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
#
# https://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

os: linux
dist: bionic

services:
  - docker

env:
  jobs:
    - DB_PROFILE=hsql
    - DB_PROFILE=h2
    - DB_PROFILE=derby
    - DB_PROFILE=mysql-docker
    - DB_PROFILE=postgres-docker
    - DB_PROFILE=sqlserver-docker
  global:
    # travis encrypt -r apache/cayenne "SNAPSHOT_REPO_USERNAME='username'"
    # travis encrypt -r apache/cayenne "SNAPSHOT_REPO_PASSWORD='password'"
    - secure: "ssx4T8lnuLcR6bRx8BWeWRDa5IfK7RBi5CfNoFlQMoSaiiFvbW0TG+1YAqsYnvf07PfU7YJ4+6b0pG+E83Serw7TSoXehvCeCK8AzsT9/BbVpvuQVlbj/cG9rfrJcTvGyZI7p02+nVBR70XSN2qcvWQt5q2me7ZApS3unmen350="
    - secure: "cysyR/fEtBHC26lYHGhfXYIPMaol1c1wP+r59idByE4iq71QiOffA4j1CQCAnN5Zo7QsNavz/GZoIxNif4SUcY7sW5M92a78VFVK3aYGTOBtN9jpqWDJoFc8jm5C75j3CoBe7dVFkxw3pCdMlZQ7HJj7L+GiyZ5USu6E2vD5X7A="

jdk:
  - openjdk8
  - openjdk11
  - openjdk-ea

script:
  - travis_wait mvn verify -q $EXCLUDE_MODULES -DcayenneTestConnection=$DB_PROFILE -DcayenneLogLevel=ERROR

jobs:
  allow_failures:
    - jdk: openjdk-ea
  include:
    - stage: deploy
      script: mvn deploy -DskipTests --settings .travis-mvn-settings.xml
      jdk: openjdk8
      if: type = push AND branch = master AND repo = apache/cayenne

# prevent Travis from unneeded "mvn install" run
install: true

cache:
  directories:
    - $HOME/.m2
