blob: 25d1e5b4a47a884bbfcab2fbc2b1c9ed86ed036f [file] [log] [blame]
#!/usr/bin/env bash
#*******************************************************************************
# Copyright (c) 2016 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# David Williams - initial API and implementation
#*******************************************************************************
#
if [ $# -ne 1 ]; then
echo USAGE: $0 env_file
exit 1
fi
if [ ! -r "$1" ]; then
echo "$1" cannot be read
echo USAGE: $0 env_file
exit 1
fi
source "$1"
export SCRIPT_PATH=${SCRIPT_PATH:-$(pwd)}
source $SCRIPT_PATH/build-functions.shsource
# derived values
gitCache=$( fn-git-cache "$BUILD_ROOT")
aggDir=$( fn-git-dir "$gitCache" "$AGGREGATOR_REPO" )
if [ -z "$BUILD_ID" ]; then
BUILD_ID=$(fn-build-id "$BUILD_TYPE" )
fi
buildDirectory=$( fn-build-dir "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
basebuilderDir=$( fn-basebuilder-dir "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
$SCRIPT_PATH/getEBuilderForDropDir.sh $buildDirectory $EBUILDER_HASH
fn-checkout-basebuilder "$basebuilderDir"
launcherJar=$( fn-basebuilder-launcher "$basebuilderDir" )
EBuilderDir="${buildDirectory}/eclipse.platform.releng.aggregator/eclipse.platform.releng.tychoeclipsebuilder"
# compute update site parent directory on build server
function updateSiteParent()
{
checkNArgs $# 3
ROOT="$1"; shift
BUILD_ID="$1"; shift
STREAM="$1"; shift
buildType=${BUILD_ID:0:1}
# contrary to intuition (and previous behavior, bash 3.1) do NOT use quotes around right side of expression.
if [[ "${STREAM}" =~ ^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]]
then
eclipseStreamMajor=${BASH_REMATCH[1]}
eclipseStreamMinor=${BASH_REMATCH[2]}
eclipseStreamService=${BASH_REMATCH[3]}
else
echo "STREAM, $STREAM, must contain major, minor, and service versions, such as 4.3.0" >${TRACE_OUTPUT}
return 1
fi
siteDir=${ROOT}/siteDir
updatesSuffix="builds"
siteDirParent=$siteDir/updates/${eclipseStreamMajor}.${eclipseStreamMinor}-${buildType}-${updatesSuffix}
mkdir -p ${siteDirParent}
RC=$?
if [[ $RC != 0 ]]
then
echo "ERROR: could not create update site parent on build machine. RC: $RC" >${TRACE_OUTPUT}
echo " obtained error trying to create ${updateSiteParent}" >${TRACE_OUTPUT}
return 1
fi
echo $siteDirParent
}
# compute update site on build server
function updateSiteOnBuildMachine()
{
checkNArgs $# 3
ROOT="$1"; shift
BUILD_ID="$1"; shift
STREAM="$1"; shift
buildType=${BUILD_ID:0:1}
# contrary to intuition (and previous behavior, bash 3.1) do NOT use quotes around right side of expression.
if [[ "${STREAM}" =~ ^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]]
then
eclipseStreamMajor=${BASH_REMATCH[1]}
eclipseStreamMinor=${BASH_REMATCH[2]}
eclipseStreamService=${BASH_REMATCH[3]}
else
echo "STREAM, $STREAM, must contain major, minor, and service versions, such as 4.3.0" >${TRACE_OUTPUT}
return 1
fi
siteDir=${ROOT}/siteDir
updatesSuffix="builds"
siteDirParentOnBuildMachine=$( updateSiteParent "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
siteDirOnBuildMachine=${siteDirParentOnBuildMachine}/${BUILD_ID}
mkdir -p ${siteDirOnBuildMachine}
RC=$?
if [[ $RC != 0 ]]
then
echo "ERROR: could not create update site on build machine. RC: $RC" >${TRACE_OUTPUT}
echo " obtained error trying to create ${siteDirOnBuildMachine}" >${TRACE_OUTPUT}
return 1
fi
echo $siteDirOnBuildMachine
}
siteDirOnBuildMachine=$( updateSiteOnBuildMachine "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
echo "siteDirOnBuildMachine: ${siteDirOnBuildMachine}"
repositoryDir=${buildDirectory}/repository
echo "repositoryDir: ${repositoryDir}"
# leave both old and new methods for now, so true (1) ==> old straight copy.
# change to false (0) to test new method.
if (( 1 ))
then
DO_NOT_MIRROR_IN_ASSEMBLY="-DdoNotMirror=true"
# for now, straight copy from what was produced to local build machine directory.
# This is partially done so that
# rest of scripts stay common
# but eventually, we might put in some mirror/comparator/remove tasks here.
# NOTE: we are using the "safe copy" we put in drop directory on build machine.
# make posiitive ${repositoryDir} is not empty, or we are basically copying
# all of root! (and, if repositoryDir is empty if we had a failed build!
# and should not be calling this method, anyway.)
if [[ -n "${repositoryDir}" && -d "${repositoryDir}" && -n "${siteDirOnBuildMachine}" && -d "${siteDirOnBuildMachine}" ]]
then
rsync --times --omit-dir-times --recursive "${repositoryDir}/" "${siteDirOnBuildMachine}/"
RC=$?
if [[ $RC != 0 ]]
then
echo "ERROR: rsync of repo returned error. RC: $RC"
echo " obtained while copying"
echo " from ${repositoryDir}"
echo " to ${siteDirOnBuildMachine}"
exit $RC
fi
else
echo "ERROR: Some directory didn't exist for update site copy."
echo " repositoryDir: ${repositoryDir}"
echo " siteDirOnBuildMachine: ${siteDirOnBuildMachine}"
exit $RC
fi
fi
#TODO: the "logic" needs some TLC
# In master, we should not need DO_PATH or DO_REMOVE.
# See patch streams for when/why that might change for patches.
# But we will be sure defined empty by default, since used later in some calls.
DO_PACK=""
DO_REMOVE=""
#DO_PACK="-DdoPack=false"
# In some cases, we do not want to remove "categories", see bug 428099.
#if [[ -n "${PATCH_BUILD}" ]]
#then
# DO_REMOVE="-DdoNotRemove=true"
#fi
java -Djava.io.tmpdir=$TMP_DIR -jar "$launcherJar" \
-data ${buildDirectory}/workspace-processArtifacts \
-application org.eclipse.ant.core.antRunner \
-v \
-buildfile "${EBuilderDir}/eclipse/buildScripts/process-artifacts.xml" \
-DrepositoryDir=${repositoryDir} ${DO_REMOVE} ${DO_PACK} \
-Dbuildlogs=$logsDirectory/comparatorlogs \
-DsiteDirOnBuildMachine=$siteDirOnBuildMachine \
-DcomparatorRepository=$comparatorRepository \
-Djava.io.tmpdir=$TMP_DIR ${DO_NOT_MIRROR_IN_ASSEMBLY}
RC=$?
if [[ $RC != 0 ]]
then
echo "ERROR: java invocation to process-artifacts did not return normally: $RC"
exit $RC
fi
# If doing a "patch build", a "site.xml" is created,
# so a) we'll remove that that, to avoid confusion, and
# b) we must call "process-artifacts again, so this version
# has packgz files. (i.e. Tycho isn't doing it for us).
if [[ -n "${PATCH_BUILD}" ]]
then
# no longer needed, will remove
# rm "${siteDirOnBuildMachine}/site.xml"
# RC=$?
# if [[ $RC != 0 ]]
# then
# echo "ERROR: did not remove 'site.xml' as expected. RC: $RC"
# #exit $RC
# fi
# before we created pack.gz files, we'll create zip file, of archive for
# DL page ... and those zip files best without pack.gz files, since they
# are not used if using local zip archive, so are "wasted" there.
pushd ${siteDirOnBuildMachine}
zipfile=${PATCH_BUILD}-${BUILD_ID}-repository.zip
zip -r ${buildDirectory}/${zipfile} .
# I guess created after "publish"? The checksums are not created, so we'll just create
# them directly. (Note, adding 256, since we will do that for all, in future, so
# do not want to forget.
pushd ${buildDirectory}
echo [md5] ${zipfile}
md5sum -b ${zipfile} > checksum/${zipfile}.md5
echo [sha1] ${zipfile}
sha1sum -b ${zipfile} > checksum/${zipfile}.sha1
echo [sha256] ${zipfile}
sha256sum -b ${zipfile} > checksum/${zipfile}.sha256
echo [sha512] ${zipfile}
sha512sum -b ${zipfile} > checksum/${zipfile}.sha512
popd
popd
# if [[ -n "${PATCH_BUILD}" ]]
# then
# # nothing to remove for patch builds, for now, and we
# # do not want to remove the category we put there intentionally.
# DO_REMOVE="-DdoNotRemove=true"
# # https://bugs.eclipse.org/bugs/show_bug.cgi?id=427873
# # uses 'false' for now.
# DO_PACK="-DdoPack=false"
# fi
#
# java -Djava.io.tmpdir=$TMP_DIR -jar "$launcherJar" \
# -data ${buildDirectory}/workspace-processArtifacts2 \
# -application org.eclipse.ant.core.antRunner \
# -v \
# -buildfile "${EBuilderDir}/eclipse/buildScripts/process-artifacts.xml" \
# -DrepositoryDir=${repositoryDir} ${DO_REMOVE} ${DO_PACK} \
# -Dbuildlogs=$logsDirectory/comparatorlogs \
# -DsiteDirOnBuildMachine=$siteDirOnBuildMachine \
# -DcomparatorRepository=$comparatorRepository \
# -Djava.io.tmpdir=$TMP_DIR ${DO_NOT_MIRROR_IN_ASSEMBLY}
#
# RC=$?
# if [[ $RC != 0 ]]
# then
# echo "ERROR: java invocation to process-artifacts did not return normally: $RC"
# #exit $RC
# fi
# == I do not see a need for this? dw 6/3/2016
# == BUT, if needed, need to "mkdir" first!
# Make composite directly on build machine, for patches only
# repodir is absolute path to composite repository,
# complocation is the (relative) child repository (usually direcotry named 'buildId')
# site parent is "one up" from siteDirOnBuildMachine.
#siteDirParentOnBuildMachine=$( updateSiteParent "$BUILD_ROOT" "$BUILD_ID" "$STREAM" )
#java -Djava.io.tmpdir=$TMP_DIR -jar "$launcherJar" \
# -data ${buildDirectory}/workspace-makeComposite \
# -application org.eclipse.ant.core.antRunner \
# -v \
# -buildfile "${EBuilderDir}/eclipse/buildScripts/addToComposite.xml" \
# -Drepodir=${siteDirParentOnBuildMachine} \
# -Dcomplocation=${BUILD_ID}
#RC=$?
#if [[ $RC != 0 ]]
#then
# echo "ERROR: java invocation to process-artifacts did not return normally: $RC"
#exit $RC
#fi
fi
exit 0