Addition of linkPoms.sh [skip ci]

This commit is contained in:
alandavis
2021-10-29 08:07:21 +01:00
parent a8df8cb7ed
commit f2292c288b
4 changed files with 344 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
#!/usr/bin/env bash
function updatePomParent() {
local PROJECT="$1"
local PARENT_POM_VERSION="$2"
if [ -d "${ROOT_DIR}/${PROJECT}" -a -n "${PARENT_POM_VERSION}" ]
then
# Cannot use "mvn versions:update-parent" as the version must exist before it can be set. The ed command is also faster.
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
ed -s pom.xml &>/tmp/$$.log << EOF
/<parent>
/<version>.*<\/version>/s//<version>${PARENT_POM_VERSION}<\/version>/
wq
EOF
if [ $? -ne 0 ]
then
echo
echo "\"update of <pom><parent><version> version failed on ${PROJECT}"
cat "/tmp/$$.log"
exit 1
fi
printf "%-25s %46s=%s\n" "${PROJECT}" "<pom><parent><version>" "${PARENT_POM_VERSION}"
popd &>/dev/null
fi
}
function updatePomProperty() {
local PROJECT="$1"
local PROPERTY_VALUE="$2"
local PROPERTY_NAME="$3"
if [ -d "${ROOT_DIR}/${PROJECT}" -a -n "${PROPERTY_VALUE}" ]
then
# Can use "mvn versions:set-property", but ed is so much faster.
# mvn -B versions:set-property versions:commit -Dproperty="${PROPERTY_NAME}" "-DnewVersion=${PROPERTY_VALUE}"
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
ed -s pom.xml &>/tmp/$$.log << EOF
/\(<${PROPERTY_NAME}>\).*\(<\/${PROPERTY_NAME}>\)/s//\1${PROPERTY_VALUE}\2/
wq
EOF
if [ $? -ne 0 ]
then
echo
echo "\"update of <${PROPERTY_NAME}> failed on ${PROJECT}"
cat "/tmp/$$.log"
exit 1
fi
printf "%-25s %46s=%s\n" "${PROJECT}" "<${PROPERTY_NAME}>" "${PROPERTY_VALUE}"
popd &>/dev/null
fi
}

245
scripts/dev/linkPoms.sh Normal file
View File

@@ -0,0 +1,245 @@
#!/usr/bin/env bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="${SCRIPT_DIR}/../../.."
ENV_FILE=".linkPoms.env"
ENV_PATH="${ROOT_DIR}/${ENV_FILE}"
source "$(dirname "${BASH_SOURCE[0]}")/dev_functions.sh"
usage() {
echo "Updates the downstream projects with the versions of the upstream projects. Reversed by unlinkPoms.sh" 1>&2;
echo 1>&2;
echo "Usage: $0 [-b <branch>] [-mpxuh]" 1>&2;
echo " -m: Checkout master of each project" 1>&2;
echo " -b: Checkout the <branch> of each project or master if <branch> is blank" 1>&2;
echo " -p: Pull the latest version of each project" 1>&2;
echo " -x: Skip the extract of values from each project" 1>&2;
echo " -u: Skip the update of values in each project" 1>&2;
echo " -h: Display this help" 1>&2;
exit 1;
}
function checkout() {
local PROJECT="${1}"
local BRANCH="${2}"
if [ -d "${ROOT_DIR}/${PROJECT}" ]
then
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
git checkout "${BRANCH}" &>/tmp/$$.log
if [ $? -ne 0 ]
then
echo
echo "\"git checkout ${BRANCH}\" failed on ${PROJECT}"
cat "/tmp/$$.log"
exit 1
fi
echo "${PROJECT} is now on ${BRANCH}"
popd &>/dev/null
fi
}
function pull_latest() {
local PROJECT="${1}"
if [ -d "${ROOT_DIR}/${PROJECT}" ]
then
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
git pull &>/tmp/$$.log
if [ $? -ne 0 ]
then
echo
echo "\"git pull\" failed on ${PROJECT}"
cat "/tmp/$$.log"
exit 1
fi
echo "${PROJECT} is now using latest"
popd &>/dev/null
fi
}
function readTopLevelTag() {
local TAG_NAME="${1}"
local POM_FILE="${2}"
# Might be possible to generalise this function to accept an XPath so it could be used in place of sed commands
# Read the file with an IFS (Input Field Separator) of the start of XML tag character <
local IFS=\>
local DEPTH=-99
while read -d \< ENTITY CONTENT
do
if [[ $ENTITY == project\ * ]] # outer <project> tag
then
DEPTH=0
elif [[ $ENTITY == /* ]] # end tag
then
((DEPTH=DEPTH-1))
else # start tag
((DEPTH=DEPTH+1))
fi
if [[ $ENTITY = "${TAG_NAME}" ]] && [[ $DEPTH == 1 ]] ; then
echo $CONTENT
exit
fi
done < $POM_FILE
exit 1
}
function exportPomVersion() {
local PROJECT="${1}"
local ENV_NAME="${2}"
if [ -d "${ROOT_DIR}/${PROJECT}" ]
then
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
# Same as slower/simpler: "mvn help:evaluate -Dexpression=project.version"
VERSION=$(readTopLevelTag version pom.xml)
if [ $? -ne 0 ]
then
echo
echo "\"readTopLevelTagContent version pom.xml\" failed on ${PROJECT}"
exit 1
fi
echo "export ${ENV_NAME}=${VERSION}" >> "${ENV_PATH}"
popd &>/dev/null
fi
}
function exportPomParent() {
local PROJECT="${1}"
local ENV_NAME="${2}"
if [ -d "${ROOT_DIR}/${PROJECT}" ]
then
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
# Same as slower/simpler: "mvn help:evaluate -Dexpression=project.parent.version"
PROPERTY_VALUE=$(sed -n '/<parent>/,/<\/parent>/p' pom.xml | sed -n "s/.*<version>\(.*\)<\/version>/\1/p" | sed 's/\r//g')
if [ $? -ne 0 ]
then
echo
echo "\"sed -n '/<parent>/,/<\/parent>/p' pom.xml | sed -n \\\"s/.*<version>\(.*\)<\/version>/\1/p\\\" | sed 's/\r//g'\" failed on ${PROJECT}"
exit 1
fi
echo "export ${ENV_NAME}=${PROPERTY_VALUE}" >> "${ENV_PATH}"
popd &>/dev/null
fi
}
# Original version was simpler/slower: exportPomPropertyOrig <project> <env_name> project.parent.version
function exportPomProperty() {
local PROJECT="${1}"
local ENV_NAME="${2}"
local PROPERTY_NAME="${3}"
if [ -d "${ROOT_DIR}/${PROJECT}" ]
then
pushd "${ROOT_DIR}/${PROJECT}" &>/dev/null
# Same as slower/simpler: "mvn help:evaluate -Dexpression=${PROPERTY_NAME}"
PROPERTY_VALUE=$(sed -n '/<properties>/,/<\/properties>/p' pom.xml | sed -n "s/.*<${PROPERTY_NAME}>\(.*\)<\/${PROPERTY_NAME}>/\1/p" | sed 's/\r//g')
if [ $? -ne 0 ]
then
echo
echo "\"sed -n '/<properties>/,/<\/properties>/p' pom.xml | sed -n \\\"s/.*<${PROPERTY_NAME}>\(.*\)<\/${PROPERTY_NAME}>/\1/p\\\" | sed 's/\r//g'\" failed on ${PROJECT}"
exit 1
fi
echo "export ${ENV_NAME}=${PROPERTY_VALUE}" >> "${ENV_PATH}"
popd &>/dev/null
fi
}
while getopts "b:mpxuh" arg; do
case $arg in
b)
B_FLAG_SET="true"
;;
m)
M_FLAG_B_FLAG_SET="true"
;;
p)
# git pull after git checkout
;;
x)
SKIP_EXPORT="true"
;;
u)
SKIP_UPDATE="true"
;;
h | *)
usage
exit 0
;;
esac
done
if [ -n "${B_FLAG_SET}" -a -n "${M_FLAG_B_FLAG_SET}" ]
then
echo "-m and -b may not both be set"
exit 1
fi
OPTIND=1
while getopts "b:mpxuh" arg; do
case $arg in
b)
BRANCH="${OPTARG:-master}"
checkout alfresco-community-repo "${BRANCH}"
checkout alfresco-community-share "${BRANCH}"
checkout acs-community-packaging "${BRANCH}"
;;
m)
BRANCH="master"
checkout alfresco-community-repo "${BRANCH}"
checkout alfresco-community-share "${BRANCH}"
checkout acs-community-packaging "${BRANCH}"
;;
esac
done
OPTIND=1
while getopts "b:mpxuh" arg; do
case $arg in
p)
pull_latest alfresco-community-repo
pull_latest alfresco-community-share
pull_latest acs-community-packaging
;;
esac
done
if [ -z ${SKIP_EXPORT+x} ]
then
rm -f "${ENV_FILE}"
exportPomVersion alfresco-community-repo COM_R_VERSION
exportPomVersion alfresco-enterprise-repo ENT_R_VERSION
exportPomParent alfresco-enterprise-repo ENT_R_PARENT
exportPomProperty alfresco-enterprise-repo ENT_R_DEP_COM_R dependency.alfresco-community-repo.version
exportPomVersion alfresco-community-share COM_S_VERSION
exportPomProperty alfresco-community-share COM_S_DEP_COM_R dependency.alfresco-community-repo.version
exportPomProperty alfresco-community-share COM_S_DEP_ENT_R dependency.alfresco-enterprise-repo.version
exportPomVersion acs-community-packaging COM_P_VERSION
exportPomParent acs-community-packaging COM_P_PARENT
exportPomProperty acs-community-packaging COM_P_DEP_COM_R dependency.alfresco-community-repo.version
exportPomProperty acs-community-packaging COM_P_DEP_COM_S dependency.alfresco-community-share.version
cat "${ENV_FILE}"
fi
if [ -z ${SKIP_UPDATE+x} ]
then
if [ ! -f "${ENV_FILE}" ]
then
echo ""${ENV_FILE}" does not exist."
exit 1
fi
source "${ENV_FILE}"
updatePomProperty alfresco-community-share "$COM_R_VERSION" dependency.alfresco-community-repo.version
updatePomParent acs-community-packaging "$COM_R_VERSION"
updatePomProperty acs-community-packaging "$COM_R_VERSION" dependency.alfresco-community-repo.version
updatePomProperty acs-community-packaging "$COM_S_VERSION" dependency.alfresco-community-share.version
fi

37
scripts/dev/unlinkPoms.sh Normal file
View File

@@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -o errexit
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="${SCRIPT_DIR}/../../.."
ENV_FILE=".linkPoms.env"
source "$(dirname "${BASH_SOURCE[0]}")/dev_functions.sh"
usage() {
echo "Reverts changes made by linkPoms.sh using values stored in ${ENV_FILE}" 1>&2;
echo 1>&2;
echo "Usage: $0 [-h]" 1>&2;
echo " -h: Display this help" 1>&2;
exit 1;
}
while getopts "lh" arg; do
case $arg in
l)
LOGGING_OUT=`tty`
;;
h | *)
usage
exit 0
;;
esac
done
source ${ENV_FILE}
updatePomProperty alfresco-community-share "$COM_S_DEP_COM_R" dependency.alfresco-community-repo.version
updatePomParent acs-community-packaging "$COM_P_PARENT"
updatePomProperty acs-community-packaging "$COM_P_DEP_COM_R" dependency.alfresco-community-repo.version
updatePomProperty acs-community-packaging "$COM_P_DEP_COM_S" dependency.alfresco-community-share.version