#
# Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0,
# or the Eclipse Distribution License v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#

language: java
sudo: required
dist: xenial

branches:
  except:
    - /^[12].[0-6].*/

addons:
  apt:
    packages:
      - libmysql-java
      - mysql-server
      - mysql-client

services:
  - mysql
  - mongodb

env:
  global:
    - MAVEN_OPTS="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
  matrix:
    - MAVEN_TEST=core-lrg-mysql
    - MAVEN_TEST=jpa-lrg-mysql
    - MAVEN_TEST=moxy-lrg
    - MAVEN_TEST=sdo-lrg
    - MAVEN_TEST=nosql-lrg
    - MAVEN_TEST="jpa-modelgen jpa-jse ext jpql wdf jpars dbws dbws-builder distribution"
    - MAVEN_TEST=javadoc
    - MAVEN_TEST=corba
#    - MAVEN_TEST=jpa-lrg-server1-mysql
#    - MAVEN_TEST=jpa-lrg-server2-mysql

jobs:
  allow_failures:
    - env: MAVEN_TEST=jpa-lrg-server1-mysql
    - env: MAVEN_TEST=jpa-lrg-server2-mysql

jdk:
  - openjdk8
  - openjdk11
  - openjdk15

cache:
  directories:
    - .autoconf
    - $HOME/.m2
    - $HOME/lib.external

before_install:
  - sudo mysql_upgrade
  - sudo mysql -u root -e "use mysql; update user set authentication_string=PASSWORD('root') where User='root'; update user set plugin='mysql_native_password';FLUSH PRIVILEGES;CREATE DATABASE IF NOT EXISTS ecltests;"
  - sudo service mysql restart

install:
  - mkdir $HOME/lib.external || true
  - wget -nc https://download.jboss.org/wildfly/18.0.0.Final/wildfly-18.0.0.Final.tar.gz -O $HOME/lib.external/wildfly-18.0.0.Final.tar.gz || true
  - cp etc/el-test.derby.properties ~
  - cp etc/el-test.mysql.properties ~
  - cp etc/el-test.mongodb.properties ~
  - cp etc/el-testjee.wildfly.properties ~
  - sed -i -e 's+skip.jee.server.installation=false+skip.jee.server.installation=true+g' ~/el-testjee.wildfly.properties
  - sed -i -e 's+${user.home}/.eclipselinktests/wildfly-18.0.0.Final+'$HOME'/wildfly-18.0.0.Final+g' ~/el-testjee.wildfly.properties

before_script:
  - mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B clean install -pl '!:eclipselink,!:org.eclipse.persistence.bundles.other,!:org.eclipse.persistence.distribution.tests,!:p2site' -DskipTests

script:
  - echo 'RUNNING TESTS, BE PATIENT...'
  - echo 'ENVIRONMENT:'
  - env
  - set -o pipefail
  - if [ "$MAVEN_TEST" == "core-lrg-mysql" ]; then mvn verify -pl :org.eclipse.persistence.core.test -P test-core-lrg,mysql; fi
  - if [ "$MAVEN_TEST" == "jpa-lrg-mysql" ]; then mvn verify -pl :org.eclipse.persistence.jpa.test -P test-jpa-lrg,mysql; fi
  - if [ "$MAVEN_TEST" == "moxy-lrg" ]; then mvn test -pl :org.eclipse.persistence.moxy -P test-moxy-lrg; fi
  - if [ "$MAVEN_TEST" == "sdo-lrg" ]; then mvn verify -pl :org.eclipse.persistence.sdo -Ptest-sdo; fi
  - if [ "$MAVEN_TEST" == "nosql-lrg" ]; then mvn verify -pl :org.eclipse.persistence.nosql -P mongodb; fi
  - if [ "$MAVEN_TEST" == "jpa-modelgen jpa-jse ext jpql wdf jpars dbws dbws-builder distribution" ]; then
      mvn clean install -pl :eclipselink;
      mvn verify -pl :org.eclipse.persistence.jpa.modelgen.processor,:org.eclipse.persistence.jpa.jse.test,:org.eclipse.persistence.extension,:org.eclipse.persistence.jpa.jpql,:org.eclipse.persistence.jpa.wdf.test,:org.eclipse.persistence.jpars,:org.eclipse.persistence.dbws,:org.eclipse.persistence.dbws.builder,:eclipselink,:org.eclipse.persistence.distribution.tests -P mysql;
    fi
  - if [ "$MAVEN_TEST" == "corba" ]; then mvn verify -pl :org.eclipse.persistence.corba -P mysql; fi
  - if [ "$MAVEN_TEST" == "jpa-lrg-server1-mysql" ]; then
      tar -x -z -C $HOME -f $HOME/lib.external/wildfly-18.0.0.Final.tar.gz;
      mvn verify -pl :org.eclipse.persistence.jpa.test -P server-test-jpa-lrg1,mysql;
    fi
  - if [ "$MAVEN_TEST" == "jpa-lrg-server2-mysql" ]; then
      tar -x -z -C $HOME -f $HOME/lib.external/wildfly-18.0.0.Final.tar.gz;
      mvn verify -pl :org.eclipse.persistence.jpa.test -P server-test-jpa-lrg2,mysql;
    fi
  - if [ "$MAVEN_TEST" == "javadoc" ]; then mvn package -DskipTests -Poss-release; fi
