#!/bin/bash -ex
TOOLS_PREFIX='/opt/tools'
JAVA_PREFIX="${TOOLS_PREFIX}/java/oracle"
MVN_HOME="${TOOLS_PREFIX}/apache-maven/latest"
JAVA_HOME="${JAVA_PREFIX}/jdk-8/latest"
PATH="${MVN_HOME}/bin:${JAVA_HOME}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Maven plugins
VERSIONS_PLUGIN='org.codehaus.mojo:versions-maven-plugin:2.5'
HELP_PLUGIN='org.apache.maven.plugins:maven-help-plugin:2.1.1'
# Directory with project top level pom.xml
BUILD_DIR="${WORKSPACE}"
cd ${BUILD_DIR}
# Check whether top level pom.xml contains SNAPSHOT
version
if ! grep '<version>' pom.xml | grep 'SNAPSHOT'
; then
echo '-[ Missing SNAPSHOT version in POM!
]-------------------------------------------'
exit 1
fi
TEST_MVN=`mvn -version`
echo "Maven version: ${TEST_MVN}"
echo " "
echo "Compute release versions"
PROJECT_VERSION=`mvn -B ${HELP_PLUGIN}:evaluate
-Dexpression=project.version`
echo "Project version: ${PROJECT_VERSION}"
echo "\n"
# Compute release versions
SNAPSHOT_VERSION=`mvn -B ${HELP_PLUGIN}:evaluate
-Dexpression=project.version 2> /dev/null | grep -E
'^[0-9]+(\.[0-9]+)+-SNAPSHOT$'`
if [ -z "${RELEASE_VERSION}" ]; then
if [ -z ${SNAPSHOT_VERSION} ]; then
echo '-[ Missing required snapshot version
number! ]----------------------------------'
fi
RELEASE_VERSION=`echo ${SNAPSHOT_VERSION} | sed -e
's/-SNAPSHOT//'`
fi
# Bash specific code
if [ -z "${NEXT_VERSION}" ]; then
NEXT_VERSION=`echo ${RELEASE_VERSION} | sed -e
's/\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'`
set -f
NEXT_COMPONENTS=(${RELEASE_VERSION//\./ })
LAST_INDEX=$((${#NEXT_COMPONENTS[@]} - 1))
NEXT_COMPONENTS[${LAST_INDEX}]=$((${NEXT_COMPONENTS[${LAST_INDEX}]}
+ 1))
NEXT_VERSION=`echo ${NEXT_COMPONENTS[@]} | tr ' '
'.'`'-SNAPSHOT'
fi
RELEASE_TAG="${RELEASE_VERSION}-RELEASE"
echo "Current version: ${SNAPSHOT_VERSION}"
echo "Release version: ${RELEASE_VERSION}"
echo "Next version: ${NEXT_VERSION}"
echo "Release tag: ${RELEASE_TAG}"
if [ -z "${SNAPSHOT_VERSION}" -o -z
"${RELEASE_VERSION}" -o -z "${NEXT_VERSION}" ]; then
echo '-[ Missing required version numbers!
]------------------------------------------'
exit 1
fi
if [ ${DRY_RUN} = 'true' ]; then
echo '-[ Dry run turned on
]----------------------------------------------------------'
MVN_DEPLOY_ARGS=''
echo '-[ Skipping GitHub branch and tag checks
]--------------------------------------'
else
# MVN_DEPLOY_ARGS='deploy:deploy'
MVN_DEPLOY_ARGS='nexus-staging:deploy'
GIT_ORIGIN=`git remote`
echo '-[ Prepare branch
]-------------------------------------------------------------'
if [[ -n `git branch -r | grep
"${GIT_ORIGIN}/${RELEASE_VERSION}"` ]]; then
if [ "${OVERWRITE}" = 'true' ]; then
echo "${GIT_ORIGIN}/${RELEASE_VERSION} branch
already exists, deleting"
git push --delete origin "${RELEASE_VERSION}"
&& true
else
echo "Error: ${GIT_ORIGIN}/${RELEASE_VERSION}
branch already exists"
exit 1
fi
fi
echo '-[ Release tag cleanup
]--------------------------------------------------------'
if [[ -n `git ls-remote --tags ${GIT_ORIGIN} | grep
"${RELEASE_TAG}"` ]]; then
if [ "${OVERWRITE}" = 'true' ]; then
echo "${RELEASE_TAG} tag already exists,
deleting"
git push --delete origin "${RELEASE_TAG}"
&& true
else
echo "Error: ${RELEASE_TAG} tag already exists"
exit 1
fi
fi
fi
cd ${WORKSPACE}
# Always delete local branch if exists
git branch --delete "${RELEASE_VERSION}" &&
true
git checkout -b ${RELEASE_VERSION}
# Always delete local tag if exists
git tag --delete "${RELEASE_TAG}" && true
# Setup jacc bot account information
git config --global
user.name "Eclipse jacc
Bot"
cd ${BUILD_DIR}
# Project identifiers
ARTIFACT_ID=$(mvn -B ${HELP_PLUGIN}:evaluate
-Dexpression=project.artifactId | grep -Ev '(^\[)')
GROUP_ID=$(mvn -B ${HELP_PLUGIN}:evaluate
-Dexpression=project.groupId | grep -Ev '(^\[)')
echo '-[ Set release version
]--------------------------------------------------------'
# Set release version
mvn -U -C \
-DnewVersion="${RELEASE_VERSION}" \
-DgenerateBackupPoms=false \
clean ${VERSIONS_PLUGIN}:set
cd ${WORKSPACE}
echo '-[ Commit modified pom.xml files
]----------------------------------------------'
POM_FILES=`git status | grep -E 'modified:.*pom\.xml'
| sed -e
's/[[:space:]][[:space:]]*modified:[[:space:]][[:space:]]*//'`
git add ${POM_FILES} && \
git commit -m "Prepare release
${GROUP_ID}:${ARTIFACT_ID}:${RELEASE_VERSION}"
cd ${BUILD_DIR}
echo '-[ Deploy artifacts to staging repository
]-------------------------------------'
mvn -U -C -s /home/jenkins/.m2/settings.xml \
-DskipTests -Ddoclint=none \
-Poss-release -Pstaging\
clean package source:jar javadoc:jar gpg:sign
install:install ${MVN_DEPLOY_ARGS}
cd ${WORKSPACE}
echo '-[ Tag release
]----------------------------------------------------------------'
git tag "${RELEASE_TAG}" -m "Release
${GROUP_ID}:${ARTIFACT_ID}:${RELEASE_VERSION}"
cd ${BUILD_DIR}
echo '-[ Set next snapshot version
]--------------------------------------------------'
mvn -U -C \
-DnewVersion="${NEXT_VERSION}" \
-DgenerateBackupPoms=false \
clean ${VERSIONS_PLUGIN}:set
cd ${WORKSPACE}
echo '-[ Commit modified pom.xml files
]----------------------------------------------'
POM_FILES=`git status | grep -E 'modified:.*pom\.xml'
| sed -e
's/[[:space:]][[:space:]]*modified:[[:space:]][[:space:]]*//'`
git add ${POM_FILES} && \
git commit -m "Prepare next development cycle for
${NEXT_VERSION}"
GIT_STATUS=`git status`
echo $GIT_STATUS
if [ ${DRY_RUN} = 'true' ]; then
echo '-[ Skipping GitHub update
]-----------------------------------------------------'
else
echo '-[ Push branch and tag to GitHub
]----------------------------------------------'
git push origin "${RELEASE_VERSION}"
git push origin "${RELEASE_TAG}"
fi