#!/usr/bin/env bash

# In this example utility, we make use of the "fetchAndbuild.xml" file.
# It would likely need some "adjustment" to some variables 
# for others to use from their own command line. 

export BUILD_HOME=${PWD}/BUILDAREA
mkdir -p ${BUILD_HOME}
# This is there we will "tee" the output of the ant command.
buildOutput=${BUILD_HOME}/buildoutput$( date +%Y%m%d-%H%M).log.txt

# Assuming nothing else, we start by getting one file which
# can bootstrap the whole process. getSimRelTools.sh will either
# clone or pull the "org.eclipse.simrel.tools" project which 
# then contains the other utilities and files needed to do the 
# aggregation build from the command line.

wget --no-verbose -O ${BUILD_HOME}/getSimRelTools.sh http://git.eclipse.org/c/simrel/org.eclipse.simrel.tools.git/plain/bootstrapScript/getSimRelTools.sh 2>&1
RC=$?
if [[ $RC != 0 ]]
then
  printf "\n[ERROR] wget returned non-zero return code: $RC. Exiting"
  exit 1
fi
chmod +x ${BUILD_HOME}/getSimRelTools.sh
RC=$?
if [[ $RC != 0 ]]
then
  printf "\n[ERROR] chmod returned non-zero return code: $RC. Exiting"
  exit 1
fi
${BUILD_HOME}/getSimRelTools.sh
RC=$?
if [[ $RC != 0 ]]
then
  printf "\n[ERROR] getSimRelTools.sh returned non-zero return code: $RC. Exiting"
  exit 1
fi

# We require Java to be version 8 and Ant to be at least "1.8".
# (And, for example, the defaults on "build.eclipse.org" are still
# set at Java 6 and Ant 1.7!) These may not be needed if your 
# personal machine has the defaults required.
export JAVA_HOME=/shared/common/jdk1.8.0_x64-latest
export JAVA_EXEC_DIR=/shared/common/jdk1.8.0_x64-latest/jre/bin
export ANT_HOME=/shared/common/apache-ant-1.8.2
export PATH=${JAVA_EXEC_DIR}:${ANT_HOME}/bin/:$PATH
#
# In addition to using the getModelFromGit target on ant command line, 
#   One of the following "aggregation targets" can be specified.
#   (Actually, if none specified, runAggregatorValidateOnly is the default.)
# runAggregatorValidateOnly
# runAggregatorBuildOnly
# runAggregatorCleanBuild
#
# In addition to the targets, the following are some handy parameters which 
# may be specified to override the defaults.
#  -DrootLocation=file:///absolutePath/ofLocal/PlatformBinary.tar.gz
#     The scripts must be able to find a standard "Eclipse Platform" to install into.
#     The default is what it would be if running on the Eclipse.org infrastructure, so 
#     if running locally this value (correct location of local version) will need to be provided.
# -Drelease=oxygen
#     The 'release' value is typically required, even if building against 'master',
#     since its "correct" value would change from year to year.
#     While we could "assume" a value, if the value is wrong, it has the potential 
#     to "damage" data in staging repo (i.e. replaces with wrong thing), hence
#     we require it to be explicit.
# -DBUILD_BRANCH=Neon_maintenance
#     'BUILD_BRANCH' is assumed to be "master" unless overridden on command line.
#     The value of 'release' should of course match whatever branch is being built.
# -DinstallEclipseAndTools
#    'installEclipseAndTools' causes Eclipse, the aggregator, wtp releng tools, and the p2repo analyzer tools
#    to be reinstalled, if already present. (They are always installed, if "eclipse" is not
#    installed to begin with.)
# -Dgit_protocol=file://
#    'git_protocol' specifies an alternative way to "get" the git repositories of the 'simrel.build' and 'simrel.tools'. 
#    Can be slightly more efficient and reliable to use direct file access instead
#    of the default of "git://git.eclipse.org".
# -DrewriteRepositoryURLValue=file:///home/data/httpd/download.eclipse.org
#    'rewriteRepositoryURLValue' is, again, a way to specify the file protocol be used, 
#    but in this case is is for the input that comes from the *.aggr* files in 'simrel.build'.
#    Using the parameter assumes, of course, you really do have "file" access, such as if 
#    running on build.eclipse.org, or running against a local mirror of that 'simrel.build' repo.

ant -f ${BUILD_HOME}/org.eclipse.simrel.tools/fetchAndbuild.xml -DBUILD_HOME=${BUILD_HOME} -DrootLocation=file:///home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/R-4.6.1-201609071200 \
 -Drelease=oxygen getModelFromGit runAggregatorValidateOnly 2>&1 | tee ${buildOutput}
