#!/bin/bash

# This script runs as https://build.eclipse.org/hudson/job/cbi-*/configure
# and is archived (for example) in http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/hudson/run.sh?root=Technology_Project
# Build runs under ${WORKSPACE} == /opt/users/hudsonbuild/.hudson/jobs/cbi-*/workspace

echo "[`date +%Y/%m/%d\ %H:%M`] Hudson job ${JOBNAME} build #${BUILD_NUMBER} (${BUILD_ID}) started." 

##############################################################################################

# BEGIN CONFIGURATION

buildTimestamp="`date +%Y%m%d%H%M`"

# where should we look for pre-checked out project sources for org.eclipse.dash.common.releng and org.eclipse.releng.basebuilder ?
cvsProjectBaseDir=/opt/public/cbi/build # build.eclipse.org
if [[ ! -d $cvsProjectBaseDir ]]; then cvsProjectBaseDir=/home/builduser/workspace; fi # local build? 
if [[ ! -d $cvsProjectBaseDir ]]; then 
	echo "ERROR: cannot find where org.eclipse.dash.common.releng and org.eclipse.releng.basebuilder are on disk. Must exit!"
	exit 1;
fi 

# need a place to store existing 3rd party jars, eg., ant-contrib.jar (if not in /usr/share/java/)
thirdPartyJarsDir=/opt/public/cbi/build/3rdPartyJars # build.eclipse.org
if [[ ! -d $thirdPartyJarsDir ]]; then thirdPartyJarsDir=/tmp/build/3rdPartyJars; fi # local build 
if [[ ! -d $thirdPartyJarsDir ]]; then mkdir $thirdPartyJarsDir; fi 

# DONE CONFIGURATION

##############################################################################################

# exposed as a Hudson build parameter for convenience
if [[ $BUILDTYPE ]]; then
	buildType="$BUILDTYPE"
else
	buildType="N"
fi

##############################################################################################

# collect required variables 
# could also set them here as variable="some value" static variables, or use 
# export VARIABLE="some value" in Hudson script for convenience when copying/editing jobs

# if NOT hardcoded here, then this script is COMPLETELY boilerplate and need not be copied into the build's .releng folder.

haderror=0
if [[ $PROJECTID ]]; then 
	projectid="$PROJECTID" 
else
	echo "Error: Must set projectid in run.sh or PROJECTID in Hudson config." 
	haderror=1
fi

if [[ $VERSION ]]; then 
	version="$VERSION"
else
	echo "Error: Must set version in run.sh or VERSION in Hudson config." 
	haderror=1
fi

if [[ $PROJRELENGROOT ]]; then
	projRelengRoot="$PROJRELENGROOT"
else
	echo "Error: Must set projRelengRoot in run.sh or PROJRELENGROOT in Hudson config." 
	haderror=1
fi

if [[ $PROJRELENGPATH ]]; then
	projRelengPath="$PROJRELENGPATH"
else
	echo "Error: Must set projRelengPath in run.sh or PROJRELENGPATH in Hudson config." 
	haderror=1
fi

# optional override; assume HEAD or trunk if not specified
if [[ $PROJRELENGBRANCH ]]; then
	projRelengBranch="$PROJRELENGBRANCH"
else
	projRelengBranch="";
fi

if [[ $haderror -gt 0 ]]; then
	exit 1;
fi

# pass in additional flags like -buildAlias=1.0.0RC2 using the $EXTRAFLAGS Hudson parameter
# buildAlias will rename zips from foo-SDK-N200901011234.zip to foo-SDK-1.0.0RC2.zip

##############################################################################################

# define where to do all the work; start with a fresh folder each time
writableBuildRoot="/home/data/httpd/download-staging.priv/modeling/m2m/qvtoml"
if [[ -d ${writableBuildRoot} ]]; then rm -fr ${writableBuildRoot}/*.*; fi

# define required folders
downloadsDir="${writableBuildRoot}/downloads"
signingDir="${writableBuildRoot}/signing"

# long form (default if omitted)
#   buildDir="${writableBuildRoot}/${projectid//.//}/downloads/drops/${version}/${buildType}${buildTimestamp}"
# short form (non-default)
if [[ $SNAPSHOT ]]; then # build in a path that will always be the same (so downstream projects can depend on Update zip)
  buildDir="${writableBuildRoot}/${buildType}-SNAPSHOT"
  EXTRAFLAGS="-buildAlias ${buildType}-SNAPSHOT ${EXTRAFLAGS}"
else
  buildDir="${writableBuildRoot}/${buildType}${buildTimestamp}"
fi

# create required folders & files (as symlinks is possible)
mkdir -p ${downloadsDir} ${signingDir} ${buildDir}

# create .cvspass file to shut up unnecessary warnings
touch ${writableBuildRoot}/.cvspass

#define symlinked required folders
relengBaseBuilderDir="${writableBuildRoot}/org.eclipse.releng.basebuilder"
relengCommonBuilderDir="${writableBuildRoot}/org.eclipse.dash.common.releng"
# symlink basebuilder and common.releng; alternatively, if you omit this, they'll be checked out in start.sh
ln -s ${cvsProjectBaseDir}/org.eclipse.releng.basebuilder ${writableBuildRoot}/
ln -s ${cvsProjectBaseDir}/org.eclipse.dash.common.releng ${writableBuildRoot}/

# symlink 3rdPartyJars (reuse existing content on build.eclipse.org for ant-contrib.jar, etc.)
if [[ ! -d ${thirdPartyJarsDir} ]]; then ln -s ${thirdPartyJarsDir} ${writableBuildRoot}/; fi
thirdPartyJarsDir="${writableBuildRoot}/3rdPartyJars"

# clean up any *-SNAPSHOT.zip files in ${downloadsDir}
find ${downloadsDir} -maxdepth 1 -type f -name "*-SNAPSHOT.zip" -exec rm -f {} \;

# run a build - may have to pass in "-javaHome /usr/lib/jvm/java" or similar here if default JVM not found
cd ${writableBuildRoot}/org.eclipse.dash.common.releng/tools/scripts
./start.sh -projectid ${projectid} -version ${version} -buildType ${buildType} -buildTimestamp ${buildTimestamp} \
  -writableBuildRoot ${writableBuildRoot} -thirdPartyJarsDir ${thirdPartyJarsDir} -downloadsDir ${downloadsDir} -buildDir ${buildDir} \
  ${projRelengRoot} ${projRelengPath} ${projRelengBranch} ${EXTRAFLAGS} 2>&1

# remove file so workspace navigation is one click simpler
rm -f ${writableBuildRoot}/.cvspass

echo "[`date +%Y/%m/%d\ %H:%M`] Hudson job ${JOBNAME} build #${BUILD_NUMBER} (${BUILD_ID}) done." 
