| #!/bin/sh |
| |
| ################################################################################ |
| ## |
| ## Licensed to the Apache Software Foundation (ASF) under one or more |
| ## contributor license agreements. See the NOTICE file distributed with |
| ## this work for additional information regarding copyright ownership. |
| ## The ASF licenses this file to You under the Apache License, Version 2.0 |
| ## (the "License"); you may not use this file except in compliance with |
| ## the License. You may obtain a copy of the License at |
| ## |
| ## http://www.apache.org/licenses/LICENSE-2.0 |
| ## |
| ## Unless required by applicable law or agreed to in writing, software |
| ## distributed under the License is distributed on an "AS IS" BASIS, |
| ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ## See the License for the specific language governing permissions and |
| ## limitations under the License. |
| ## |
| ################################################################################ |
| |
| BUILDTOOLS_DIR=`dirname $0` |
| |
| IOTDB_ROOT_DIR=. |
| # BUNDLE_DIR is results of maven release:perform's creation of release candidate |
| BUNDLE_DIR=${IOTDB_ROOT_DIR}/target/checkout/target |
| |
| IOTDB_ASF_GIT_URL=https://git-wip-us.apache.org/repos/asf/iotdb.git |
| IOTDB_ASF_DIST_URL=https://www.apache.org/dist/iotdb |
| IOTDB_ASF_DIST_DYN_URL=https://www.apache.org/dyn/closer.cgi/iotdb |
| IOTDB_ASF_SVN_RELEASE_URL=https://dist.apache.org/repos/dist/release/iotdb |
| IOTDB_ASF_SVN_RC_URL=https://dist.apache.org/repos/dist/dev/iotdb |
| |
| USAGE= |
| |
| RELEASE_PROP_FILE=${IOTDB_ROOT_DIR}/iotdb.release.properties |
| |
| function die() { # [$* msgs] |
| [ $# -gt 0 ] && echo "Error: $*" |
| exit 1 |
| } |
| |
| function setUsage() { # $1: usage string |
| USAGE=$1 |
| } |
| |
| function usage() { # [$*: msgs] |
| [ $# -gt 0 ] && echo "Error: $*" |
| echo "Usage: ${USAGE}" |
| exit 1 |
| } |
| |
| function handleHelp() { # usage: handleHelp "$@" |
| if [ "$1" == "-?" -o "$1" == "--help" ]; then |
| usage |
| fi |
| } |
| |
| function requireArg() { # usage: requireArgs "$@" |
| if [ $# -lt 1 ] || [[ $1 =~ ^- ]]; then |
| usage "missing argument" |
| fi |
| } |
| |
| function noExtraArgs() { # usage: noExtraArgs "$@" |
| [ $# = 0 ] || usage "extra arguments" |
| } |
| |
| function getAbsPath() { # $1: rel-or-abs-path |
| echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")" |
| } |
| |
| function confirm () { # [$1: question] |
| while true; do |
| # call with a prompt string or use a default |
| /bin/echo -n "${1:-Are you sure?}" |
| read -r -p " [y/n] " response |
| case $response in |
| [yY]) return `true` ;; |
| [nN]) return `false` ;; |
| *) echo "illegal response '$response'" ;; |
| esac |
| done |
| } |
| |
| function dieSuperceeded { # no args |
| die "This tool is superceeded with the new maven build tooling. See src/site/asciidoc/releasing.adoc." |
| } |
| |
| function checkIOTDBSourceRootGitDie { # no args; dies if !ok |
| [ -d "${IOTDB_ROOT_DIR}/.git" ] || die "Not an IOTDB source root git directory \"${IOTDB_ROOT_DIR}\"" |
| } |
| |
| function checkUsingMgmtCloneWarn() { # no args; warns if iotdb root isn't a mgmt clone |
| CLONE_DIR=`cd ${IOTDB_ROOT_DIR}; pwd` |
| CLONE_DIRNAME=`basename $CLONE_DIR` |
| if [ ! `echo $CLONE_DIRNAME | grep -o -E '^mgmt-iotdb'` ]; then |
| echo "Warning: the IOTDB root dir \"${IOTDB_ROOT_DIR}\" is not a release mgmt clone!" |
| return 1 |
| else |
| return 0 |
| fi |
| } |
| |
| function checkBundleDir() { # no args returns true/false (0/1) |
| if [ -d ${BUNDLE_DIR} ]; then |
| return 0 |
| else |
| return 1 |
| fi |
| } |
| |
| function checkVerNum() { # $1: X.Y.Z returns true/false (0/1) |
| if [ `echo $1 | grep -o -E '^\d+\.\d+\.\d+$'` ]; then |
| return 1 |
| else |
| return 0 |
| fi |
| } |
| |
| function checkVerNumDie() { # $1: X.Y.Z dies if not ok |
| checkVerNum $1 || die "Not a X.Y.Z version number \"$1\"" |
| } |
| |
| function checkRcNum() { # $1: rc-num returns true/false (0/1) |
| if [ `echo $1 | grep -o -E '^\d+$'` ] && [ $1 != 0 ]; then |
| return 1 |
| else |
| return 0 |
| fi |
| } |
| |
| function checkRcNumDie() { # $1: rc-num dies if not ok |
| checkRcNum $1 || die "Not a release candidate number \"$1\"" |
| } |
| |
| function createReleaseProperties { # X.Y.Z |
| VER="$1" |
| checkVerNumDie ${VER} |
| echo "releaseNum=${VER}" > ${RELEASE_PROP_FILE} |
| } |
| |
| function getReleaseProperty { # <property-name> |
| PN=$1 |
| PNVAL=`grep ${PN} ${RELEASE_PROP_FILE}` |
| VAL=`echo ${PNVAL} | sed -e "s/^${PN}=//"` |
| echo ${VAL} |
| } |
| |
| function getIOTDBVer() { # [$1 == "bundle"] |
| MSG="getIOTDBVer(): unknown mode \"$1\"" |
| VER="" |
| if [ "$1" == "" ]; then |
| VER=`getReleaseProperty releaseNum` |
| MSG="Unable to identify the release version id from ${RELEASE_PROP_FILE}" |
| elif [ $1 == "gradle" ]; then |
| die "'getIOTDBVer() gradle' is no longer supported" |
| # Get the X.Y.Z version from gradle build info |
| PROPS=${IOTDB_ROOT_DIR}/gradle.properties |
| VER=`grep build_version ${PROPS} | grep -o -E '\d+\.\d+\.\d+'` |
| MSG="Unable to identify the version id from ${PROPS}" |
| elif [ $1 == "bundle" ]; then |
| # Get the X.Y.Z version from a build generated bundle's name |
| BUNDLE=`echo ${BUNDLE_DIR}/apache-iotdb-*-source-release.tar.gz` |
| VER=`echo ${BUNDLE} | grep -o -E '\d+\.\d+\.\d+'` |
| MSG="Unable to identify the version id from bundle ${BUNDLE}" |
| fi |
| [ "${VER}" ] || die "${MSG}" |
| echo $VER |
| } |
| |
| function getMajMinVerNum() { # $1: X.Y.Z returns X.Y |
| VER=$1; shift |
| checkVerNumDie ${VER} |
| MAJ_MIN_VER=`echo ${VER} | sed -e 's/\.[0-9][0-9]*$//'` |
| echo ${MAJ_MIN_VER} |
| } |
| |
| function getReleaseBranch() { # $1: X.Y.Z version |
| MAJ_MIN_NUM=`getMajMinVerNum $1` |
| echo "release/${MAJ_MIN_NUM}" |
| } |
| |
| function getReleaseTag() { # $1: X.Y.Z [$2: rc-num] |
| VER=$1; shift |
| checkVerNumDie ${VER} |
| RC_SFX="" |
| if [ $# -gt 0 ] && [ "$1" != "" ]; then |
| RC_SFX="-RC$1" |
| fi |
| echo "${VER}${RC_SFX}" |
| } |
| |
| function getReleaseTagComment() { # $1: X.Y.Z [$2: rc-num] |
| VER=$1; shift |
| checkVerNumDie ${VER} |
| RC_SFX="" |
| if [ $# -gt 0 ] && [ "$1" != "" ]; then |
| RC_SFX=" RC$1" |
| fi |
| echo "Apache IOTDB ${VER}${RC_SFX}" |
| } |