#
# Copyright (c) 2008, 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
#


# build.type should be set to an appropriate value for Milestone Builds {ie. "M4") and be blank for Release Builds
release.version=3.0.0

#These are "default" values. They should already be set by the time this file is loaded
# ie. do NOT depend upon the fact that they will be at runtime as they are defined here.
# ---------------------------------------------------------------
junit.lib=${basedir}/junit.jar
build.root.dir=${basedir}
log.dir=${basedir}/log

# Dependency definitions
# ----------------------
jdbc.driver.lib=${jdbc.driver.lib.dir}/mysql-connector-java-5.1.44-bin.jar
jdbc.driver.lib.dir=/shared/common/mysql-connector-java-5.1.44

# Orbit drop used:  http://download.eclipse.org/tools/orbit/downloads/drops/R20100519200754/
#    The following shell command run from the build server will result in the latest
#    Orbit release "R" build:
#        ls -r /home/data/httpd/download.eclipse.org/tools/orbit/downloads/drops/ | grep -m1 R20
#
# "junit.lib" property is defined in "init" target of autobuild.xml
junit.drop=R200709171314
junit.bundle=org.junit_3.8.2.v200706111738
mail.bundle=com.sun.mail.jakarta.mail_1.6.3
maven.ant.bundle=maven-ant-tasks-2.0.8


extensions.depend.dir=${build.deps.dir}

# URLs to Download Build dependencies
junit.url=http://download.eclipse.org/tools/orbit/downloads/drops/${junit.drop}/bundles/${junit.bundle}.zip
mail.url=http://download.eclipse.org/tools/orbit/downloads/drops/${junit.drop}/bundles/${mail.bundle}.jar
mavenant.url=http://archive.apache.org/dist/maven/binaries/${maven.ant.bundle}.jar

# Logfile definitions
# -------------------
core.test.regression.log=${log.dir}/core.test.regression.log
result.file=${log.dir}/jpa.results

#Automated Build Artifact Definitions
# -----------------------------------
core.test.properties=${basedir}/core.test.properties

#Automated Testing and Test Result Definitions
# --------------------------------------------
# set this to a non existant directory so the tests do not include the struct converter tests
eclipselink.extension.oracle.test=.
eclipselink.extension.oracle.test.trunk=.

# db.user, db.pwd and db.url need to be defined in ${env.HOME_DIR}/db.dat
# db.url left in here for documentation purposes
jdbc.driver.jar=${jdbc.driver.lib}
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://build.eclipse.org/eclipselink?autoReconnect=true&failOverReadOnly=false&maxReconnects=10
db.user=
db.pwd=
db.platform=org.eclipse.persistence.platform.database.MySQLPlatform

# logging level for SRG/LRG testing
# ---------------------------------
test.logging.level=FINEST
#test.logging.level=NONE

# Publishing and Signing Definitions
# ----------------------------------
eclipselink.root.download.dir=/home/data/httpd/download.eclipse.org/rt/eclipselink
signing.dir=/opt/public/download-staging.priv/rt/eclipselink

p2.milestone.repos.name=EclipseLink Milestone Repository
p2.release.repos.name=EclipseLink Release Repository
p2.nightly.repos.name=EclipseLink Nightly Build Repository

