# 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=javax.mail_1.4.0.v200706111329
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

