diff options
Diffstat (limited to 'cje-production/promotion/promoteSites.sh')
-rwxr-xr-x | cje-production/promotion/promoteSites.sh | 634 |
1 files changed, 634 insertions, 0 deletions
diff --git a/cje-production/promotion/promoteSites.sh b/cje-production/promotion/promoteSites.sh new file mode 100755 index 000000000..8d26fc0cf --- /dev/null +++ b/cje-production/promotion/promoteSites.sh @@ -0,0 +1,634 @@ +#!/bin/bash -x +#******************************************************************************* +# Copyright (c) 2020 IBM Corporation and others. +# +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Sravan Kumar Lakkimsetti - initial API and implementation +#******************************************************************************* + +function renamefile () +{ + # file name is input parameter + # if the file name ends in gif, do not rename (due to performance analysis gifs). + if [[ ! $1 =~ .*\.gif ]] + then + if [[ $1 =~ (.*)($oldlabel)(.*) ]] + then + echo "changing $1 to ${BASH_REMATCH[1]}$newlabel${BASH_REMATCH[3]}" + mv "$1" "${BASH_REMATCH[1]}$newlabel${BASH_REMATCH[3]}" + fi + fi +} + +function renameBuild () +{ + oldname=$1 + oldlabel=$2 + newdirname=$3 + newlabel=$4 + export dirname=$5 + if [[ -z "${dirname}" ]] + then + export dirname=$oldname + fi + printf "\n\tInput to renameBuild:\n" + printf "\t\toldname: ${oldname}\n" + printf "\t\toldlabel: ${oldlabel}\n" + printf "\t\tnewdirname: ${newdirname}\n" + printf "\t\tnewlabel: ${newlabel}\n" + printf "\t\tdirname: ${dirname}\n\n" + + echo "Renaming build $oldname to $newdirname with $newlabel" + + # save original copy, for easy "compare" or "diff" + mkdir -p ${dirname}/ORIG + for file in ${dirname}/buildproperties.* + do + cp --backup=numbered "${file}" "${dirname}/ORIG/" + done + + fromString="EQ_BUILD_DIR_SEG = \"${oldname}\"" + toString="EQ_BUILD_DIR_SEG = \"${EQUINOX_DL_DROP_DIR_SEGMENT}\"" + replaceDirCommand="s!${fromString}!${toString}!g" + echo "replaceDirCommand: $replaceDirCommand" + perl -w -pi -e "${replaceDirCommand}" ${dirname}/buildproperties.php + + # =============================== + # specific "replace" to make sure checksums URLs are correct for eclipse + fromString="BUILD_DIR_SEG = \"${oldname}\"" + toString="BUILD_DIR_SEG = \"${ECLIPSE_DL_DROP_DIR_SEGMENT}\"" + replaceDirCommand="s!${fromString}!${toString}!g" + echo "replaceDirCommand: $replaceDirCommand" + perl -w -pi -e "${replaceDirCommand}" ${dirname}/buildproperties.php + + + + replaceDirCommand="s!/${oldname}/!/${newdirname}/!g" + perl -w -pi -e "${replaceDirCommand}" ${dirname}/buildproperties.php + + fromString=$oldlabel + toString=$newlabel + replaceCommand="s!${fromString}!${toString}!g" + perl -w -pi -e "${replaceCommand}" ${dirname}/buildproperties.php + # =============================== + # It appears THIS is the one required ... changing label, inside files, + # not "directory name" as above. + perl -w -pi -e "${replaceCommand}" ${dirname}/checksum/* + + # =============================== + # Integration --> Stable + # Integration --> Release Candidate + # Integration --> Release + # These are for cases where used in headers, titles, etc. + + OLD_BUILD_TYPE=${BUILD_TYPE} + # =============================== + if [[ "${oldlabel}" =~ .*RC.* ]] + then + oldString="Release Candidate Build" + elif [[ "${OLD_BUILD_TYPE}" == "I" ]] + then + oldString="Integration Build" + elif [[ "${OLD_BUILD_TYPE}" == "S" ]] + then + oldString="Stable Build" + else + echo -e "ERROR: Unexpected OLD_BUILD_TYPE: ${OLD_BUILD_TYPE}" + exit 1 + fi + + if [[ "${newlabel}" =~ .*RC.* ]] + then + newString="Release Candidate Build" + elif [[ "${DL_TYPE}" == "R" ]] + then + newString="Release Build" + elif [[ "${DL_TYPE}" == "S" ]] + then + newString="Stable Build" + else + echo -e "ERROR: Unexpected DL_TYPE: ${DL_TYPE}" + exit 1 + fi + + echo -e "\n\tReplacing ${oldString} with ${newString} in ${dirname}/buildproperties.php\n" + + replaceBuildNameCommand="s!${oldString}!${newString}!g" + # quotes are critical here, since strings contain spaces! + perl -w -pi -e "${replaceBuildNameCommand}" ${dirname}/buildproperties.php + + oldString="BUILD_TYPE = \"${OLD_BUILD_TYPE}\"" + # We export explicitly what new TYPE should be, from promoteSites.sh script. + newString="BUILD_TYPE = \"${DL_TYPE}\"" + + replaceBuildNameCommand="s!${oldString}!${newString}!g" + # quotes are critical here, since strings contain spaces! + perl -w -pi -e "${replaceBuildNameCommand}" ${dirname}/buildproperties.php + + oldString="BUILD_ID = \"${BUILD_LABEL}\"" + # We export explicitly what new TYPE should be, from promoteSites.sh script. + newString="BUILD_ID = \"${DL_LABEL}\"" + + replaceBuildNameCommand="s!${oldString}!${newString}!g" + # quotes are critical here, since strings contain spaces! + perl -w -pi -e "${replaceBuildNameCommand}" ${dirname}/buildproperties.php + + if [[ "${oldlabel}" =~ .*RC.* ]] + then + oldString="BUILD_TYPE_NAME = \"Release Candidate\"" + elif [[ $OLD_BUILD_TYPE == "I" ]] + then + oldString="BUILD_TYPE_NAME = \"Integration\"" + elif [[ $OLD_BUILD_TYPE == "S" ]] + then + oldString="BUILD_TYPE_NAME = \"Stable\"" + else + echo -e "\n\tERROR: Unexpected OLD_BUILD_TYPE value. ${OLD_BUILD_TYPE}, in $0." + exit 1 + fi + + if [[ "${newlabel}" =~ .*RC.* ]] + then + newString="BUILD_TYPE_NAME = \"Release Candidate\"" + elif [[ "${DL_TYPE}" == "R" ]] + then + newString="BUILD_TYPE_NAME = \"Release\"" + elif [[ "${DL_TYPE}" == "S" ]] + then + newString="BUILD_TYPE_NAME = \"Stable\"" + else + echo -e "\n\tERROR: Unexpected DL_TYPE value, ${DL_TYPE}, in $0." + exit 1 + fi + + echo -e "\n\tReplacing ${oldString} with ${newString} in ${dirname}/buildproperties.php\n" + + replaceBuildNameCommand="s!${oldString}!${newString}!g" + # quotes are critical here, since strings might contain spaces! + perl -w -pi -e "${replaceBuildNameCommand}" ${dirname}/buildproperties.php + + echo -e "\n\tMove old directory, $oldname, to new directory, $newdirname. (before file renames)\n" + mv $oldname $newdirname + + echo -e "\n\tRename files in new directory, ./${newdirname}, to new name." + echo -e "\tLooking for file names containing oldlabel: \"*${oldlabel}*\"" + nFiles=$(find ./${newdirname} -mindepth 1 -maxdepth 2 -name "*${oldlabel}*" -print | wc -l) + echo -e "\n\t $nFiles files found to rename.\n" + + for file in $(find ./${newdirname} -mindepth 1 -maxdepth 2 -name "*${oldlabel}*" -print) + do + renamefile $file + done +} + +function createBaseBuilder () +{ + epRelDir=$(ssh genie.releng@projects-storage.eclipse.org ls -d --format=single-column ${BUILDMACHINE_BASE_DL}/R-*|sort|tail -1) + BASEBUILDER_DIR=${WORKSPACE}/basebuilder + export BASEBUILDER_DIR + mkdir -p ${BASEBUILDER_DIR} + pushd ${WORKSPACE} + scp genie.releng@projects-storage.eclipse.org:${epRelDir}/eclipse-platform-*-linux-gtk-x86_64.tar.gz eclipse-platform.tar.gz + tar xvzf eclipse-platform.tar.gz + ${workspace}/eclipse/eclipse -nosplash \ + -debug -consolelog -data ${WORKSPACE}/workspace-toolsinstall \ + -application org.eclipse.equinox.p2.director \ + -repository "https://download.eclipse.org/eclipse/updates/4.15/","https://download.eclipse.org/eclipse/updates/buildtools/","https://download.eclipse.org/webtools/downloads/drops/R3.17.0/R-3.17.0-20200306035042/repositoryunittests" \ + -installIU org.eclipse.platform.ide,org.eclipse.pde.api.tools,org.eclipse.releng.build.tools.feature.feature.group,org.eclipse.wtp.releng.tools.feature.feature.group,org.apache.derby.core.feature.feature.group \ + -destination ${BASEBUILDER_DIR} \ + -profile SDKProfile + popd + export ECLIPSE_EXE=${BASEBUILDER_DIR}/eclipse +} + +function addRepoProperties () +{ + APP_NAME=org.eclipse.wtp.releng.tools.addRepoProperties + devworkspace=${devworkspace:-${WORKSPACE}/workspaceAddRepoProperties} + + REPO=$1 + REPO_TYPE=$2 + BUILD_ID=$3 + + createBaseBuilder + MIRRORURL=/eclipse/updates/${REPO_TYPE}/${BUILD_ID} + MIRRORURL_ARG="https://www.eclipse.org/downloads/download.php?format=xml&file=${MIRRORURL}" + + ART_REPO_NAME="Eclipse Project Repository for ${TRAIN_NAME}" + CON_REPO_NAME="Eclipse Project Repository for ${TRAIN_NAME}" + + MIRRORS_URL_ARG=-Dp2MirrorsURL=${MIRRORURL_ARG} + ART_REPO_ARG=-DartifactRepoDirectory=${REPO} + CON_REPO_ARG=-DmetadataRepoDirectory=${REPO} + ART_REPO_NAME_ARG=-Dp2ArtifactRepositoryName=\"${ART_REPO_NAME}\" + CON_REPO_NAME_ARG=-Dp2MetadataRepositoryName=\"${CON_REPO_NAME}\" + + ${ECLIPSE_EXE} --launcher.suppressErrors -nosplash -consolelog -debug -data ${devworkspace} -application ${APP_NAME} -vmargs ${MIRRORS_URL_ARG} -Dp2ArtifactRepositoryName="${ART_REPO_NAME}" -Dp2MetadataRepositoryName="${CON_REPO_NAME}" ${ART_REPO_ARG} ${CON_REPO_ARG} +} + +function createXZ +{ + BUILDMACHINE_SITE=$1 + + CONTENT_JAR_FILE="${BUILDMACHINE_SITE}/content.jar" + if [[ ! -e "${CONTENT_JAR_FILE}" ]] + then + echo -e "\n\tERROR: content.jar file did not exist at ${BUILDMACHINE_SITE}." + return 1 + fi + ARTIFACTS_JAR_FILE="${BUILDMACHINE_SITE}/artifacts.jar" + if [[ ! -e "${ARTIFACTS_JAR_FILE}" ]] + then + echo -e "\n\tERROR: artifacts.jar file did not exist at ${BUILDMACHINE_SITE}." + return 1 + fi + + # Notice we overwrite the XML files, if they already exists. + unzip -q -o "${CONTENT_JAR_FILE}" -d "${BUILDMACHINE_SITE}" + RC=$? + if [[ $RC != 0 ]] + then + echo "ERROR: could not unzip ${CONTENT_JAR_FILE}." + return $RC + fi + # Notice we overwrite the XML files, if they already exists. + unzip -q -o "${ARTIFACTS_JAR_FILE}" -d "${BUILDMACHINE_SITE}" + RC=$? + if [[ $RC != 0 ]] + then + echo "ERROR: could not unzip ${ARTIFACTS_JAR_FILE}." + return $RC + fi + + CONTENT_XML_FILE="${BUILDMACHINE_SITE}/content.xml" + ARTIFACTS_XML_FILE="${BUILDMACHINE_SITE}/artifacts.xml" + # We will check the content.xml and artifacts.xml files really exists. In some strange world, the jars could contain something else. + if [[ ! -e "${CONTENT_XML_FILE}" || ! -e "${ARTIFACTS_XML_FILE}" ]] + then + echo -e "\n\tERROR: content.xml or artifacts.xml file did not exist as expected at ${BUILDMACHINE_SITE}." + return 1 + fi + + # finally, compress them, using "extra effort" + # Notice we use "force" to over write any existing file, presumably there from a previous run? + XZ_EXE=$(which xz) + if [[ $? != 0 || -z "${XZ_EXE}" ]] + then + echo -e "\n\tERROR: xz executable did not exist." + return 1 + fi + echo -e "\n\tXZ compression of ${CONTENT_XML_FILE} ... " + $XZ_EXE -e --force "${CONTENT_XML_FILE}" + RC=$? + if [[ $RC != 0 ]] + then + echo "ERROR: could not compress, using $XZ_EXE -e ${CONTENT_XML_FILE}." + return $RC + fi + + echo -e "\tXZ compression of ${ARTIFACTS_XML_FILE} ... " + $XZ_EXE -e --force "${ARTIFACTS_XML_FILE}" + RC=$? + if [[ $RC != 0 ]] + then + echo "ERROR: could not compress, using $XZ_EXE -e ${ARTIFACTS_XML_FILE}." + return $RC + fi + + + # Notice we just write over any existing p2.index file. + # May want to make backup of this and other files, for production use. + P2_INDEX_FILE="${BUILDMACHINE_SITE}/p2.index" + echo "version=1" > "${P2_INDEX_FILE}" + echo "metadata.repository.factory.order= content.xml.xz,content.xml,!" >> "${P2_INDEX_FILE}" + echo "artifact.repository.factory.order= artifacts.xml.xz,artifacts.xml,!" >> "${P2_INDEX_FILE}" + echo -e "\tCreated ${P2_INDEX_FILE}" + + return 0 +} + +DROP_ID=$(echo $DROP_ID|tr -d ' ') + +if [[ -z "${DROP_ID}" ]] +then + echo -e "\n\t[ERROR] DROP_ID must be defined for ${0##*/}" + exit 1 +else + export DROP_ID + echo -e "\n\t[INFO] DROP_ID: $DROP_ID" +fi + +# CHECKPOINT is the code for either milestone (M1, M2, ...) +# or release candidate (RC1, RC2, ...). +# It should be empty for the final release. +CHECKPOINT=$(echo $CHECKPOINT|tr -d ' ') +if [[ -z "${CHECKPOINT}" ]] +then + echo -e "\n\t[WARNING] CHECKPOINT was blank in ${0##*/}" +else + export CHECKPOINT + echo -e "\n\t[INFO] CHECKPOINT: $CHECKPOINT" +fi + +# This SIGNOFF_BUG should not be defined, if there are no errors in JUnit tests. +SIGNOFF_BUG=$(echo $SIGNOFF_BUG|tr -d ' ') +if [[ -z "${SIGNOFF_BUG}" ]] +then + echo -e "\n\t[WARNING] SIGNOFF_BUG was not defined. That is valid if no Unit Tests failures but otherwise should be defined." + echo -e "\t\tCan be added by hand to buildproperties.php in drop site, if in fact there were errors, and simply forgot to specify." +else + export SIGNOFF_BUG + echo -e "\t\t[INFO] SIGNOFF_BUG: $SIGNOFF_BUG" +fi + + +TRAIN_NAME=$(echo $TRAIN_NAME|tr -d ' ') +if [[ -z "${TRAIN_NAME}" ]] +then + echo -e "\n\t[ERROR] TRAIN_NAME must be defined for ${0##*/}" + exit 1 +else + export TRAIN_NAME + echo -e "\n\t[INFO] TRAIN_NAME: $TRAIN_NAME" +fi + +# STREAM is the three digit release number, such as 4.7.0 or 4.6.1. +STREAM=$(echo $STREAM|tr -d ' ') +if [[ -z "${STREAM}" ]] +then + echo -e "\n\t[ERROR] STREAM must be defined for ${0##*/}" + exit 1 +else + export STREAM + echo -e "\n\t[INFO] STREAM: $STREAM" +fi + +# DL_TYPE ("download type") is the build type we are naming +# the build *TO* +# for main line (master) code, it is always 'S' (from I-build) until it's 'R' +#export DL_TYPE=S +#export DL_TYPE=R +DL_TYPE=$(echo $DL_TYPE|tr -d ' ') +if [[ -z "${DL_TYPE}" ]] +then + echo -e "\n\t[ERROR] DL_TYPE must be defined for ${0##*/}" + exit 1 +else + # Could probably define default - or validate! - based on first letter of DROP_ID + # M --> M + # I --> S + export DL_TYPE + echo -e "\n\t[INFO] DL_TYPE: $DL_TYPE" +fi + +SSH_PREFIX="ssh genie.releng@projects-storage.eclipse.org" +export STAGE2DIRSEG=stage2output${TRAIN_NAME}${CHECKPOINT} +export CL_SITE=${WORKSPACE}/${STAGE2DIRSEG} +mkdir -p "${CL_SITE}" + +# Main promotion scripts starts here + +if [[ "${STREAM}" =~ ^([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]] +then + export BUILD_MAJOR=${BASH_REMATCH[1]} + export BUILD_MINOR=${BASH_REMATCH[2]} + export BUILD_SERVICE=${BASH_REMATCH[3]} +else + echo "STREAM must contain major, minor, and service versions, such as 4.3.0" + echo " but found ${STREAM}" + exit 1 +fi + +# regex section +# BUILD_TYPE is the prefix of the build -- +# that is, for what we are renaming the build FROM +PATTERN="^([MI])([[:digit:]]{8})-([[:digit:]]{4})$" +if [[ "${DROP_ID}" =~ $PATTERN ]] +then + export BUILD_TYPE=${BASH_REMATCH[1]} + export BUILD_TIMESTAMP=${BASH_REMATCH[2]}${BASH_REMATCH[3]} + # Label and ID are the same, in this case + export BUILD_LABEL=$DROP_ID + export BUILD_LABEL_EQ=$DROP_ID + export DROP_ID_EQ=$DROP_ID +else + echo -e "\n\tERROR: DROP_ID, ${DROP_ID}, did not match any expected pattern." + exit 1 +fi + +# For initial releases, do not include service in label +if [[ "${BUILD_SERVICE}" == "0" ]] +then + export DL_LABEL=${BUILD_MAJOR}.${BUILD_MINOR}${CHECKPOINT} +else + export DL_LABEL=${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_SERVICE}${CHECKPOINT} +fi + +export DL_LABEL_EQ=${DL_LABEL} + +# This is DL_DROP_ID for Eclipse. The one for equinox has DL_LABEL_EQ in middle. +export DL_DROP_ID=${DL_TYPE}-${DL_LABEL}-${BUILD_TIMESTAMP} +export DL_DROP_ID_EQ=${DL_TYPE}-${DL_LABEL_EQ}-${BUILD_TIMESTAMP} + +# for I builds, stable and RCs go to in milestones +# for M builds, even RCs also go in <version>-M-builds +case ${DL_TYPE} in + "S" ) + export REPO_SITE_SEGMENT=${BUILD_MAJOR}.${BUILD_MINOR}milestones + if [[ "${CHECKPOINT}" =~ ^M.*$ ]] + then + export NEWS_ID=${BUILD_MAJOR}.${BUILD_MINOR} + fi + # except for RC4. Since it it intended to be "final" we include the variables + # just like they were for an "R" build. (See bug 495252). + # to accomidate "respins", we use a regex so that adding an "a" or "b", + # will still match. + RCPATH=^RC.[abcd]?$ + if [[ "${CHECKPOINT}" =~ $RCPATH ]] + then + export NEWS_ID=${BUILD_MAJOR}.${BUILD_MINOR} + export ACK_ID=${BUILD_MAJOR}.${BUILD_MINOR} + export README_ID=${BUILD_MAJOR}.${BUILD_MINOR} + fi + ;; + "R" ) + export REPO_SITE_SEGMENT=${BUILD_MAJOR}.${BUILD_MINOR} + export NEWS_ID=${BUILD_MAJOR}.${BUILD_MINOR} + export ACK_ID=${BUILD_MAJOR}.${BUILD_MINOR} + export README_ID=${BUILD_MAJOR}.${BUILD_MINOR} + ;; + *) + echo -e "\n\tERROR: case statement for repo output did not match any pattern." + echo -e "\t Not written to handle DL_TYPE of ${DL_TYPE}\n" + exit 1 +esac + +export HIDE_SITE=true +# Build machine locations (would very seldom change) +export BUILD_ROOT=${BUILD_ROOT:-/home/data/httpd/download.eclipse.org} +export BUILDMACHINE_BASE_SITE=${BUILD_ROOT}/updates/${BUILD_MAJOR}.${BUILD_MINOR}-${BUILD_TYPE}-builds + +export BUILDMACHINE_BASE_DL=${BUILD_ROOT}/eclipse/downloads/drops4 +export BUILDMACHINE_BASE_EQ=${BUILD_ROOT}/equinox/drops + +# Eclipse Drop Site (final segment) +export ECLIPSE_DL_DROP_DIR_SEGMENT=${DL_TYPE}-${DL_LABEL}-${BUILD_TIMESTAMP} +# Equinox Drop Site (final segment) +export EQUINOX_DL_DROP_DIR_SEGMENT=${DL_TYPE}-${DL_LABEL_EQ}-${BUILD_TIMESTAMP} + +export INITIAL_MAIL_LINES="We are pleased to announce that ${TRAIN_NAME} ${CHECKPOINT} is available for download and updates." +export CLOSING_MAIL_LINES="Thank you to everyone who made this checkpoint possible." + +echo -e "\n\t[INFO] INITIAL_MAIL_LINES: $INITIAL_MAIL_LINES" +echo -e "\n\t[INFO] CLOSING_MAIL_LINES: $CLOSING_MAIL_LINES" + +printf "\n\t%s\n\n" "Promoted on: $( date )" > "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "DROP_ID" "$DROP_ID" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "BUILD_LABEL" "$BUILD_LABEL" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "DROP_ID_EQ" "$DROP_ID_EQ" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "BUILD_LABEL_EQ" "$BUILD_LABEL_EQ" >> "${CL_SITE}/checklist.txt" +printf "\n" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "DL_TYPE" "$DL_TYPE" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "DL_LABEL" "$DL_LABEL" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "DL_LABEL_EQ" "$DL_LABEL_EQ" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "ECLIPSE_DL_DROP_DIR_SEGMENT" "$ECLIPSE_DL_DROP_DIR_SEGMENT" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "EQUINOX_DL_DROP_DIR_SEGMENT" "$EQUINOX_DL_DROP_DIR_SEGMENT" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s" "REPO_SITE_SEGMENT" "$REPO_SITE_SEGMENT" >> "${CL_SITE}/checklist.txt" +printf "\n\t%20s%25s\n" "HIDE_SITE" "${HIDE_SITE}" >> "${CL_SITE}/checklist.txt" + +printf "\t%s\n" "Eclipse downloads:" >> "${CL_SITE}/checklist.txt" +printf "\t%s\n\n" "https://download.eclipse.org/eclipse/downloads/drops4/${ECLIPSE_DL_DROP_DIR_SEGMENT}/" >> "${CL_SITE}/checklist.txt" + +printf "\t%s\n" "Update existing (non-production) installs:" >> "${CL_SITE}/checklist.txt" +printf "\t%s\n\n" "https://download.eclipse.org/eclipse/updates/${REPO_SITE_SEGMENT}/" >> "${CL_SITE}/checklist.txt" + +printf "\t%s\n" "Specific repository good for building against:" >> "${CL_SITE}/checklist.txt" +printf "\t%s\n\n" "https://download.eclipse.org/eclipse/updates/${REPO_SITE_SEGMENT}/${ECLIPSE_DL_DROP_DIR_SEGMENT}/" >> "${CL_SITE}/checklist.txt" + +printf "\t%s\n" "Equinox specific downloads:" >> "${CL_SITE}/checklist.txt" +printf "\t%s\n\n" "https://download.eclipse.org/equinox/drops/${EQUINOX_DL_DROP_DIR_SEGMENT}/" >> "${CL_SITE}/checklist.txt" + +# mail template + +# start with empty line, and '>' to be sure re-created if exists already. +printf "\n" > "${CL_SITE}/mailtemplate.txt" + +printf "\n%s\n\n" "${INITIAL_MAIL_LINES}" >> "${CL_SITE}/mailtemplate.txt" + +printf "\t%s\n" "Eclipse downloads:" >> "${CL_SITE}/mailtemplate.txt" +printf "\t%s\n\n" "https://download.eclipse.org/eclipse/downloads/drops4/${ECLIPSE_DL_DROP_DIR_SEGMENT}/" >> "${CL_SITE}/mailtemplate.txt" + +printf "\t%s\n" "New and Noteworthy:" >> "${CL_SITE}/mailtemplate.txt" +printf "\t%s\n\n" "https://www.eclipse.org/eclipse/news/${NEWS_ID}/" >> "${CL_SITE}/mailtemplate.txt" + +printf "\t%s\n" "Update existing (non-production) installs:" >> "${CL_SITE}/mailtemplate.txt" +printf "\t%s\n\n" "https://download.eclipse.org/eclipse/updates/${REPO_SITE_SEGMENT}/" >> "${CL_SITE}/mailtemplate.txt" + +printf "\t%s\n" "Specific repository good for building against:" >> "${CL_SITE}/mailtemplate.txt" +printf "\t%s\n\n" "https://download.eclipse.org/eclipse/updates/${REPO_SITE_SEGMENT}/${ECLIPSE_DL_DROP_DIR_SEGMENT}/" >> "${CL_SITE}/mailtemplate.txt" + +printf "\t%s\n" "Equinox specific downloads:" >> "${CL_SITE}/mailtemplate.txt" +printf "\t%s\n\n" "https://download.eclipse.org/equinox/drops/${EQUINOX_DL_DROP_DIR_SEGMENT}/" >> "${CL_SITE}/mailtemplate.txt" + +printf "\n\n%s\n" "${CLOSING_MAIL_LINES}" >> "${CL_SITE}/mailtemplate.txt" + +#Take backup of current build +LOCAL_EP_DIR=${WORKSPACE}/eclipse +LOCAL_EQ_DIR=${WORKSPACE}/equinox +LOCAL_REPO=${WORKSPACE}/updates +mkdir -p ${LOCAL_EP_DIR} +mkdir -p ${LOCAL_EQ_DIR} +mkdir -p ${LOCAL_REPO} + +pushd ${LOCAL_EP_DIR} +scp -r genie.releng@projects-storage.eclipse.org:${BUILDMACHINE_BASE_DL}/${DROP_ID} . +popd + +pushd ${LOCAL_EQ_DIR} +scp -r genie.releng@projects-storage.eclipse.org:${BUILDMACHINE_BASE_EQ}/${DROP_ID_EQ} . +popd + +pushd ${LOCAL_REPO} +scp -r genie.releng@projects-storage.eclipse.org:${BUILDMACHINE_BASE_SITE}/${DROP_ID} . +popd + +# ### Begins the point of making modifications to the build ### +if [[ "${DL_TYPE}" != "R" ]] +then + if [[ "${CHECKPOINT}" =~ $RCPATH ]] + then + echo -e "\$NEWS_ID = \"${BUILD_MAJOR}.${BUILD_MINOR}\";" >> "${LOCAL_EP_DIR}/${DROP_ID}/buildproperties.php" + echo -e "\$ACK_ID = \"${BUILD_MAJOR}.${BUILD_MINOR}\";" >> "${LOCAL_EP_DIR}/${DROP_ID}/buildproperties.php" + echo -e "\$README_ID = \"${BUILD_MAJOR}.${BUILD_MINOR}\";" >> "${LOCAL_EP_DIR}/${DROP_ID}/buildproperties.php" + fi +else + printf "\tINFO: %s\n" "But, we did create NEWS_ID, ACK_ID and README_ID and added to buildproperties.php, since doing Release promote." + echo -e "\$NEWS_ID = \"${BUILD_MAJOR}.${BUILD_MINOR}\";" >> "${LOCAL_EP_DIR}/${DROP_ID}/buildproperties.php" + echo -e "\$ACK_ID = \"${BUILD_MAJOR}.${BUILD_MINOR}\";" >> "${LOCAL_EP_DIR}/${DROP_ID}/buildproperties.php" + echo -e "\$README_ID = \"${BUILD_MAJOR}.${BUILD_MINOR}\";" >> "${LOCAL_EP_DIR}/${DROP_ID}/buildproperties.php" +fi + + + +# SIGNOFF_BUG should not be defined if there are no JUnit failures to investigate and explain +if [[ -n "${SIGNOFF_BUG}" ]] +then + echo -e "<p>Any unit test failures below have been investigated and found to be test-related and do not affect the quality of the build.\nSee the sign-off page <a href=\"https://bugs.eclipse.org/bugs/show_bug.cgi?id=${SIGNOFF_BUG}\">(bug ${SIGNOFF_BUG})</a> for details.</p>" > "${LOCAL_EP_DIR}/${DROP_ID}/testNotes.html" +fi + +# promote equinox +pushd ${LOCAL_EQ_DIR} + + renameBuild ${DROP_ID_EQ} ${BUILD_LABEL_EQ} ${DL_DROP_ID_EQ} ${DL_LABEL} + if [[ "${HIDE_SITE}" == "true" ]] + then + touch ${DL_DROP_ID_EQ}/buildHidden + fi + + printf "\n\t%s\n" "Promoting Equinox" +# scp -r ${LOCAL_EQ_DIR}/${DL_DROP_ID_EQ} genie.releng@projects-storage.eclipse.org:/home/data/httpd/download.eclipse.org/equinox/drops/ + + if [[ "${DL_TYPE}" == "R" ]] + then + printf "\n\t%s\n" "Creating archive" +# scp -r ${LOCAL_EQ_DIR}/${DL_DROP_ID_EQ} genie.releng@projects-storage.eclipse.org:/home/data/httpd/archive.eclipse.org/equinox/drops/ + fi + +popd + +# Promote Eclipse platform +pushd ${LOCAL_EP_DIR} + + renameBuild ${DROP_ID} ${BUILD_LABEL} ${DL_DROP_ID} ${DL_LABEL} + if [[ "${HIDE_SITE}" == "true" ]] + then + touch ${DL_DROP_ID}/buildHidden + fi + + printf "\n\t%s\n" "Promoting Platform" +# scp -r ${LOCAL_EP_DIR}/${DL_DROP_ID} genie.releng@projects-storage.eclipse.org:/home/data/httpd/download.eclipse.org/eclipse/downloads/drops4/ + + if [[ "${DL_TYPE}" == "R" ]] + then + printf "\n\t%s\n" "Creating archive" +# scp -r ${LOCAL_EP_DIR}/${DL_DROP_ID} genie.releng@projects-storage.eclipse.org:/home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/ + fi + +popd + + +#Promote Repository +pushd ${LOCAL_REPO} + BUILDMACHINE_SITE=${LOCAL_REPO}/${DROP_ID} + ${BUILDMACHINE_SITE} ${REPO_SITE_SEGMENT} ${DL_DROP_ID} + createXZ ${BUILDMACHINE_SITE} + mv ${DROP_ID} ${DL_DROP_ID} +# scp -r ${LOCAL_REPO}/${DL_DROP_ID} genie.releng@projects-storage.eclipse.org:/home/data/httpd/download.eclipse.org/eclipse/updates/${REPO_SITE_SEGMENT} +popd |