Repository: incubator-edgent Updated Branches: refs/heads/master 365bf3aa1 -> a3ab4a2c4
Add a full collection of buildTools Project: http://git-wip-us.apache.org/repos/asf/incubator-edgent/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-edgent/commit/a3ab4a2c Tree: http://git-wip-us.apache.org/repos/asf/incubator-edgent/tree/a3ab4a2c Diff: http://git-wip-us.apache.org/repos/asf/incubator-edgent/diff/a3ab4a2c Branch: refs/heads/master Commit: a3ab4a2c46def45f48d523fcc498bf603213f3bc Parents: 365bf3a Author: Dale LaBossiere <[email protected]> Authored: Thu Dec 15 20:22:52 2016 -0500 Committer: Dale LaBossiere <[email protected]> Committed: Thu Dec 15 20:22:52 2016 -0500 ---------------------------------------------------------------------- buildTools/check_sigs.sh | 32 +++--- buildTools/common.sh | 166 +++++++++++++++++++++++++++++ buildTools/download_edgent_asf.sh | 132 +++++++++++++++++++++++ buildTools/make_release_branch.sh | 66 ++++++------ buildTools/merge_release.sh | 67 ++++++++++++ buildTools/publish_release.sh | 80 ++++++++++++++ buildTools/refresh_release_branch.sh | 51 +++++++++ buildTools/stage_release_candidate.sh | 127 ++++++++++++++++++++++ buildTools/tag_release.sh | 86 +++++++++++++++ buildTools/tag_release_candidate.sh | 46 ++++++++ 10 files changed, 804 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/check_sigs.sh ---------------------------------------------------------------------- diff --git a/buildTools/check_sigs.sh b/buildTools/check_sigs.sh index 764cd6d..671c746 100755 --- a/buildTools/check_sigs.sh +++ b/buildTools/check_sigs.sh @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/sh ################################################################################ ## @@ -19,32 +19,29 @@ ## ################################################################################ +set -e + # Checks the signatures of all bundles in the build/release-edgent directory # Or checks the bundles in the specified directory -if [ $1 == "-?" -o $1 == "help" -o $# -gt 1 ] -then - echo "Usage: check_sigs.sh [bundle-directory]" - exit 1 -fi +. `dirname $0`/common.sh -# Assumes run from the root of the edgent git repo -EDGENT_ROOT=. +setUsage "`basename $0` [bundle-directory]" +handleHelp "$@" -BUNDLE_DIR="${EDGENT_ROOT}/build/release-edgent" if [ $# -ge 1 ] then - BUNDLE_DIR=$1 + BUNDLE_DIR=$1; shift fi -if [ ! -d ${BUNDLE_DIR} ] -then - echo "Bundle directory '${BUNDLE_DIR}' does not exist" - exit 1 -fi +noExtraArgs "$@" + +[ -d ${BUNDLE_DIR} ] || die "Bundle directory \"${BUNDLE_DIR}\" does not exist" function checkFile() { FILE="$1" + echo + echo "Checking $FILE..." HASH=`md5 -q "${FILE}"` CHECK=`cat "${FILE}.md5"` @@ -72,9 +69,10 @@ function checkFile() { } -for bundle in "${BUNDLE_DIR}/*.tgz" +for bundle in ${BUNDLE_DIR}/*.tgz do - checkFile $bundle + checkFile ${bundle} done +echo echo "SUCCESS: all checksum and signature files OK" http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/common.sh ---------------------------------------------------------------------- diff --git a/buildTools/common.sh b/buildTools/common.sh new file mode 100755 index 0000000..d351b33 --- /dev/null +++ b/buildTools/common.sh @@ -0,0 +1,166 @@ +#!/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` + +EDGENT_ROOT_DIR=. +BUNDLE_DIR=${EDGENT_ROOT_DIR}/build/release-edgent + +EDGENT_ASF_GIT_URL=https://git-wip-us.apache.org/repos/asf/incubator-edgent.git +EDGENT_ASF_SVN_RELEASE_URL=https://dist.apache.org/repos/dist/release/incubator/edgent +EDGENT_ASF_SVN_RC_URL=https://dist.apache.org/repos/dist/dev/incubator/edgent + +USAGE= + +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 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 checkEdgentSourceRootGitDie { # no args; dies if !ok + [ -d "${EDGENT_ROOT_DIR}/.git" ] || die "Not an Edgent source root git directory \"${EDGENT_ROOT_DIR}\"" +} + +function checkUsingMgmtCloneWarn() { # no args; warns if edgent root isn't a mgmt clone + CLONE_DIR=`cd ${EDGENT_ROOT_DIR}; pwd` + CLONE_DIRNAME=`basename $CLONE_DIR` + if [ ! `echo $CLONE_DIRNAME | grep -o -E '^mgmt-edgent'` ]; then + echo "Warning: the Edgent root dir \"${EDGENT_ROOT_DIR}\" is not a release mgmt clone!" + return 1 + else + return 0 + fi +} + +function getEdgentVer() { # $1 == "gradle" | "bundle" + MSG="getEdgentVer(): unknown mode \"$1\"" + VER="" + if [ $1 == "gradle" ]; then + # Get the X.Y.Z version from gradle build info + PROPS=${EDGENT_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}/*-src.tgz` + 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 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 0 + else + return 1 + 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 0 + else + return 1 + fi +} + +function checkRcNumDie() { # $1: rc-num dies if not ok + checkRcNum $1 || die "Not a release candidate number \"$1\"" +} + +function getReleaseBranch() { # $1: X.Y.Z version + checkVerNumDie $1 + echo "release-$1" +} + +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}-incubating${RC_SFX}" +} + +function getReleaseTagComment() { # $1: X.Y.Z [$2: rc-num] + VER=$1; shift + checkVerNumDie ${VER} + RC_SFX="" + if [ $# -gt 0 ] && [ "$1" != "" ]; then + checkRcNumDie $1 + RC_SFX=" RC$1" + fi + echo "Apache Edgent ${VER}-incubating${RC_SFX}" +} http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/download_edgent_asf.sh ---------------------------------------------------------------------- diff --git a/buildTools/download_edgent_asf.sh b/buildTools/download_edgent_asf.sh new file mode 100755 index 0000000..b464513 --- /dev/null +++ b/buildTools/download_edgent_asf.sh @@ -0,0 +1,132 @@ +#!/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. +## +################################################################################ + +set -e + +# Download the collection of files associated with an Apache Edgent +# Release or Release Candidate from the Apache Distribution area: +# https://dist.apache.org/repos/dist/release/incubator/edgent +# or https://dist.apache.org/repos/dist/dev/incubator/edgent +# respectively. +# +# Prompts before taking actions unless "--nquery" +# Prompts to perform signature validation (using buildTools/check_sigs.sh) +# unless --nvalidate or --validate is specified. + +. `dirname $0`/common.sh + +setUsage "`basename $0` [--nquery] [--validate|--nvalidate] <version> [<rc-num>]" +handleHelp "$@" + +NQUERY= +if [ "$1" == "--nquery" ]; then + NQUERY="--nquery"; shift +fi + +VALIDATE=-1 # query +if [ "$1" == "--validate" ]; then + VALIDATE=1; shift +elif [ "$1" == "--nvalidate" ]; then + VALIDATE=0; shift +fi + +requireArg "$@" +VER=$1; shift +checkVerNum $VER || usage "Not a X.Y.Z version number \"$VER\"" + +RC_NUM= +if [ $# -gt 0 ]; then + RC_NUM=$1; shift + checkRcNum ${RC_NUM} || usage "Not a release candidate number \"${RC_NUM}\"" +fi + +noExtraArgs "$@" + +# Release or Release Candidate mode +IS_RC= +if [ ${RC_NUM} ]; then + IS_RC=1 +fi + +BASE_URL=${EDGENT_ASF_SVN_RELEASE_URL} +if [ ${IS_RC} ]; then + BASE_URL=${EDGENT_ASF_SVN_RC_URL} +fi + +RC_SFX= +if [ ${IS_RC} ]; then + RC_SFX=rc${RC_NUM} +fi + +DST_BASE_DIR=downloaded-edgent-${VER}${RC_SFX} +DST_VER_DIR=${DST_BASE_DIR}/${VER}-incubating +if [ ${IS_RC} ]; then + DST_VER_DIR=${DST_VER_DIR}/${RC_SFX} +fi +[ -d ${DST_BASE_DIR} ] && die "${DST_BASE_DIR} already exists" + +[ ${NQUERY} ] || confirm "Proceed to download to ${DST_BASE_DIR} from ${BASE_URL}?" || exit + +echo Downloading to ${DST_BASE_DIR} ... + +# make a template structure of everything we're going to retrieve +mkdir -p ${DST_BASE_DIR} +(cd ${DST_BASE_DIR}; touch KEYS) + +mkdir -p ${DST_VER_DIR} +(cd ${DST_VER_DIR}; touch LICENSE README RELEASE_NOTES apache-edgent-${VER}-incubating-src.tgz{,.asc,.md5,.sha} ) + +mkdir -p ${DST_VER_DIR}/binaries +(cd ${DST_VER_DIR}/binaries; touch LICENSE apache-edgent-${VER}-incubating-bin.tgz{,.asc,.md5,.sha} ) + +# download everything identified in the template tree +ORIG_DIR=`pwd` +cd `pwd`/${DST_BASE_DIR} +for i in `find . -type f`; do + echo ======= $i + uri=`echo $i | sed -e s?^./??` # strip leading "./" + url=${BASE_URL}/$uri + d=`dirname $i` + # OSX lacks wget by default + echo "(cd $d; curl -f -O $url)" + (cd $d; curl -f -O $url) +done +cd ${ORIG_DIR} + +echo +echo Done Downloading to ${DST_BASE_DIR} + +[ ${VALIDATE} == 0 ] && exit +[ ${VALIDATE} == 1 ] || [ ${NQUERY} ] || confirm "Do you want to check the bundle signatures?" || exit + +echo +echo "If the following bundle gpg signature checks fail, you may need to" +echo "import the project's list of signing keys to your keyring" +echo " $ gpg ${DST_BASE_DIR}/KEYS # show the included keys" +echo " $ gpg --import ${DST_BASE_DIR}/KEYS" + +echo +echo "Verifying the source bundle signatures..." +$BUILDTOOLS_DIR/check_sigs.sh ${DST_VER_DIR} + +echo +echo "Verifying the binary bundle signatures..." +$BUILDTOOLS_DIR/check_sigs.sh ${DST_VER_DIR}/binaries http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/make_release_branch.sh ---------------------------------------------------------------------- diff --git a/buildTools/make_release_branch.sh b/buildTools/make_release_branch.sh index 8b4d377..02d449c 100755 --- a/buildTools/make_release_branch.sh +++ b/buildTools/make_release_branch.sh @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/sh ################################################################################ ## @@ -19,44 +19,46 @@ ## ################################################################################ +set -e -# This script creates a release branch for the Apache Edgent version from gradle.properties/build_version +# Creates a branch for the release. +# Uses the version id from gradle.properties. +# Prompts before taking actions unless "--nquery". # -# Must be run at the root of a clone of the master ASF git repository from https://git-wip-us.apache.org/repos/asf/incubator-edgent.git +# Run from the root of the release management git clone. +# +# Prior to running this, create a new release management clone +# from the ASF git repository. The name of the clone's directory should +# start with "mgmt-edgent" as the builtTools scripts check for that +# to help keep one on the right path, e.g., +# +# git clone https://git-wip-us.apache.org/repos/asf/incubator-edgent.git mgmt-edgent<version> -if [ $# -ne 0 ] -then - echo Usage: buildTools/make_release_branch.sh -fi +. `dirname $0`/common.sh -EDGENT_VERSION=`grep build_version gradle.properties | awk '{print $2}'` -CHECK=`echo "$EDGENT_VERSION" | grep -q -E '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,3}$'` +setUsage "`basename $0` [--nquery]" +handleHelp "$@" -if [ $? -ne 0 ] -then - echo "Apache Edgent version needs to be in the form [0-100].[0-100].[0-999]" - exit 1; +NQUERY= +if [ "$1" == "--nquery" ]; then + NQUERY="--nquery"; shift fi -EDGENT_ROOT=. -RELEASE_BRANCH=release${EDGENT_VERSION} -RELEASE_CLONE_DIRNAME=asfclone-edgent${EDGENT_VERSION} +noExtraArgs "$@" + +checkEdgentSourceRootGitDie +checkUsingMgmtCloneWarn || [ ${NQUERY} ] || confirm "Proceed using this clone?" || exit + +VER=`getEdgentVer gradle` +RELEASE_BRANCH=`getReleaseBranch $VER` -echo "Updating local master branch" -git checkout master -git fetch origin -git rebase origin/master +(set -x; git checkout -q master) +(set -x; git status) +[ ${NQUERY} ] || confirm "Proceed to create release branch ${RELEASE_BRANCH}?" || exit echo "Creating release branch ${RELEASE_BRANCH}" -git push -u origin master:${RELEASE_BRANCH} - -echo "Creating new clone ${RELEASE_CLONE_DIRNAME} for release work" -cd ${EDGENT_ROOT}/.. -mkdir "${RELEASE_CLONE_DIRNAME}" -cd "${RELEASE_CLONE_DIRNAME}" -git clone https://git-wip-us.apache.org/repos/asf/incubator-edgent.git . - -echo "Creating the RC1 tag" -git checkout ${RELEASE_BRANCH} -git tag -a apache-edgent-${EDGENT_VERSION}RC1 -m "Apache Edgent ${EDGENT_VERSION} RC1" -git push --tags +# don't just use "git push -u origin master:${RELEASE_BRANCH}" as some suggested +# to *create* the branch as that changes the local master to track the new +# remote branch. yikes. +(set -x; git checkout -b ${RELEASE_BRANCH}) +(set -x; git push -u origin ${RELEASE_BRANCH}) http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/merge_release.sh ---------------------------------------------------------------------- diff --git a/buildTools/merge_release.sh b/buildTools/merge_release.sh new file mode 100755 index 0000000..c4b627f --- /dev/null +++ b/buildTools/merge_release.sh @@ -0,0 +1,67 @@ +#!/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. +## +################################################################################ + +set -e + +# Merges the release branch to the master branch. +# Uses the version id from gradle.properties to identify the branch. +# Prompts before taking actions. +# +# Run from the root of the release management git clone. + +. `dirname $0`/common.sh + +setUsage "`basename $0`" +handleHelp "$@" + +noExtraArgs "$@" + +checkEdgentSourceRootGitDie +checkUsingMgmtCloneWarn || confirm "Proceed using this clone?" || exit + +VER=`getEdgentVer gradle` +RELEASE_BRANCH=`getReleaseBranch $VER` + +(set -x; git checkout -q master) +(set -x; git status) + +confirm "Proceed to refresh the local master branch prior to merging?" || exit +(set -x; git pull origin master) + +echo +echo "If you proceed to merge and there are conflicts you will need to" +echo "fix the conflicts and then commit the merge and push:" +echo " git commit -m \"merged ${RELEASE_BRANCH}\"" +echo " git push origin master" +echo "If you choose not to proceed you may run this script again later." + +confirm "Proceed to (no-commit) merge branch ${RELEASE_BRANCH} to master?" || exit +(set -x; git merge --no-commit --no-ff ${RELEASE_BRANCH}) + +echo +echo "If you choose not to proceed you will need to manually complete the" +echo "merge and push:" +echo " git commit -m \"merged ${RELEASE_BRANCH}\"" +echo " git push origin master" + +confirm "Proceed to commit the merge and push?" || exit +(set -x; git commit -m "merged ${RELEASE_BRANCH}") +(set -x; git push origin master) http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/publish_release.sh ---------------------------------------------------------------------- diff --git a/buildTools/publish_release.sh b/buildTools/publish_release.sh new file mode 100755 index 0000000..572e268 --- /dev/null +++ b/buildTools/publish_release.sh @@ -0,0 +1,80 @@ +#!/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. +## +################################################################################ + +set -e + +# Copy the (approved) release candidate artifacts and KEYS from the +# ASF subversion Edgent Release Candidate repository to the +# ASF subversion Edgent Release repository. +# Prompts before taking actions. +# +# Run from the root of the release management git clone. + +. `dirname $0`/common.sh + +setUsage "`basename $0` <rc-num>" +handleHelp "$@" + +requireArg "$@" +RC_NUM=$1; shift +checkRcNum ${RC_NUM} || usage "Not a release candidate number \"${RC_NUM}\"" +RC_DIRNAME="rc${RC_NUM}" + +noExtraArgs "$@" + +SVN_DEV_EDGENT=~/svn/dist.apache.org/repos/dist/dev/incubator/edgent +SVN_REL_EDGENT=~/svn/dist.apache.org/repos/dist/release/incubator/edgent + +checkUsingMgmtCloneWarn || confirm "Proceed using this clone?" || exit + +# Get the X.Y.Z version from gradle +VER=`getEdgentVer gradle` +VER_DIRNAME=${VER}-incubating + +RC_TAG=`getReleaseTag ${VER} ${RC_NUM}` +RELEASE_TAG=`getReleaseTag ${VER}` + +COMMIT_MSG="Release Apache Edgent ${RELEASE_TAG} from ${RC_TAG}" + +confirm "Proceed to publish release ${RELEASE_TAG} from candidate ${RC_TAG}?" || exit + +echo +confirm "Proceed to update the KEYS?" || exit +(set -x; svn update ${SVN_DEV_EDGENT}/KEYS) +SVN_PARENT_DIR=`dirname ${SVN_REL_EDGENT}` +(set -x; mkdir -p ${SVN_PARENT_DIR}) +(set -x; cd ${SVN_PARENT_DIR}; svn co ${EDGENT_ASF_SVN_RELEASE_URL} --depth empty) +(set -x; svn update ${SVN_REL_EDGENT}/KEYS) +(set -x; cp ${SVN_DEV_EDGENT}/KEYS ${SVN_REL_EDGENT}/KEYS) +# it's OK if nothing changed / nothing to commit... +(set -x; svn commit ${SVN_REL_EDGENT}/KEYS -m "${COMMIT_MSG}") + +echo +confirm "Proceed to move the ${RC_TAG} artifacts?" || exit +(set -x; svn move \ + ${EDGENT_ASF_SVN_DEV_URL}/${VER_DIRNAME}/${RC_DIRNAME} \ + ${EDGENT_ASF_SVN_RELEASE_URL}/${VER_DIRNAME} \ + -m "${COMMIT_MSG}") + +echo +echo "The ASF dev and release repositories have been updated:" +echo " ${EDGENT_ASF_SVN_DEV_URL}" +echo " ${EDGENT_ASF_SVN_RELEASE_URL}" http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/refresh_release_branch.sh ---------------------------------------------------------------------- diff --git a/buildTools/refresh_release_branch.sh b/buildTools/refresh_release_branch.sh new file mode 100755 index 0000000..bf7ab87 --- /dev/null +++ b/buildTools/refresh_release_branch.sh @@ -0,0 +1,51 @@ +#!/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. +## +################################################################################ + +set -e + +# Refresh the clone's release branch from the "origin" git remote. +# Prompts before taking actions unless "--nquery" + +. `dirname $0`/common.sh + +setUsage "`basename $0` [--nquery]" +handleHelp "$@" + +NQUERY= +if [ "$1" == "--nquery" ]; then + NQUERY="--nquery"; shift +fi + +noExtraArgs "$@" + +checkEdgentSourceRootGitDie +checkUsingMgmtCloneWarn || [ ${NQUERY} ] || confirm "Proceed using this clone?" || exit + +VER=`getEdgentVer gradle` +RELEASE_BRANCH=`getReleaseBranch ${VER}` + +(set -x; git checkout -q ${RELEASE_BRANCH}) +(set -x; git status) + +[ ${NQUERY} ] || confirm "Proceed to refresh branch ${RELEASE_BRANCH} from the origin?" || exit + +echo "Refreshing branch ${RELEASE_BRANCH}" +(set -x; git pull origin ${RELEASE_BRANCH}) http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/stage_release_candidate.sh ---------------------------------------------------------------------- diff --git a/buildTools/stage_release_candidate.sh b/buildTools/stage_release_candidate.sh new file mode 100755 index 0000000..51f68ef --- /dev/null +++ b/buildTools/stage_release_candidate.sh @@ -0,0 +1,127 @@ +#!/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. +## +################################################################################ + +set -e + +# Copy the build generated artifacts to a working copy of the +# ASF subversion Edgent Release Candidate repository. +# If the user hasn't already setup a svn checkout the script offers to do it +# to ~/svn/dist.apache.org/repos/dist/dev/incubator/edgent. +# The user is provided with the svn command to commit the changes to the repo. +# Prompts before taking actions. +# +# Run from the root of the release management git clone. + + +. `dirname $0`/common.sh + +setUsage "`basename $0` <rc-num>" +handleHelp "$@" + +requireArg "$@" +RC_NUM=$1; shift +checkRcNum ${RC_NUM} || usage "Not a release candidate number \"${RC_NUM}\"" +RC_DIRNAME="rc${RC_NUM}" + +noExtraArgs "$@" + +SVN_DEV_EDGENT=~/svn/dist.apache.org/repos/dist/dev/incubator/edgent + +checkBundleDir || die "Bundle directory '${BUNDLE_DIR}' does not exist" + +checkUsingMgmtCloneWarn || confirm "Proceed using this clone?" || exit + +# Get the X.Y.Z version from the bundle name +VER=`getEdgentVer bundle` +VER_DIRNAME=${VER}-incubating + +RC_TAG=`getReleaseTag ${VER} ${RC_NUM}` + +echo "Base svn Edgent dev directory to stage to: ${SVN_DEV_EDGENT}" +confirm "Proceed with staging for ${RC_TAG}?" || exit + +# Offer to do svn checkout if needed +if [ ! -d ${SVN_DEV_EDGENT}/.svn ]; then + echo "${SVN_DEV_EDGENT}/.svn: No such file or directory" + confirm "Setup that svn checkout now?" || exit + echo "Be patient while downloading..." + SVN_PARENT_DIR=`dirname ${SVN_DEV_EDGENT}` + (set -x; mkdir -p ${SVN_PARENT_DIR}) + (set -x; cd ${SVN_PARENT_DIR}; svn co ${EDGENT_ASF_SVN_RC_URL} --depth empty) + (set -x; svn update ${SVN_DEV_EDGENT}/KEYS) +fi + +SVN_VER_DIR=${SVN_DEV_EDGENT}/${VER_DIRNAME} +SVN_RC_DIR=${SVN_VER_DIR}/${RC_DIRNAME} + +echo "" +echo "Checking the svn status of ${SVN_DEV_EDGENT}:" +(cd ${SVN_DEV_EDGENT}; svn status) +echo +confirm "Is the svn status ok to continue (blank / nothing reported) ?" || exit + +# Create this structure in the Edgent dev svn tree +# +# KEYS +# X.Y.Z-incubating +# rc<n> +# README +# RELEASE_NOTES +# LICENSE +# source bundles and signatures +# binaries +# LICENSE +# source bundles and signatures + +echo "" +echo "Copying artifacts to ${SVN_DEV_EDGENT}..." + +mkdir -p ${SVN_DEV_EDGENT} +cp KEYS ${SVN_DEV_EDGENT} +# svn add KEYS # adding was a one-time event + +if [ ! -d ${SVN_VER_DIR} ]; then + mkdir -p ${SVN_VER_DIR} +fi + +mkdir -p ${SVN_RC_DIR} +cp LICENSE ${SVN_RC_DIR} +cp README ${SVN_RC_DIR} +cp RELEASE_NOTES ${SVN_RC_DIR} +cp ${BUNDLE_DIR}/*-src.* ${SVN_RC_DIR} + +mkdir -p ${SVN_RC_DIR}/binaries +cp LICENSE ${SVN_RC_DIR}/binaries +cp ${BUNDLE_DIR}/*-bin.* ${SVN_RC_DIR}/binaries + +(set -x; svn add ${SVN_RC_DIR}) + +echo +(set -x; svn status ${SVN_DEV_EDGENT}) + +echo +echo "If you choose not to proceed, you can later run the following to commit the changes:" +echo " (cd ${SVN_DEV_EDGENT}; svn commit -m \"Add Apache Edgent ${VER}-incubating/rc${RC_NUM}\")" +confirm "Proceed to commit the changes?" || exit +(set -x; cd ${SVN_DEV_EDGENT}; svn commit -m \"Add Apache Edgent ${VER}-incubating/rc${RC_NUM}\") + +echo +echo "The KEYS and ${RC_TAG} have been staged to ${EDGENT_ASF_SVN_RC_URL}" \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/tag_release.sh ---------------------------------------------------------------------- diff --git a/buildTools/tag_release.sh b/buildTools/tag_release.sh new file mode 100755 index 0000000..ba06bdc --- /dev/null +++ b/buildTools/tag_release.sh @@ -0,0 +1,86 @@ +#!/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. +## +################################################################################ + +set -e + +# Create a tag on the release branch for the Edgent version from gradle.properties/build_version +# A "release" tag is created unless directed to create a "release candidate" +# tag via "--as-rcnum <rc-num>" +# Specify "--from-rctag <rc-num>" to create the tag on the commit +# that has the release candidate <rc-num> tag. +# Prompts before taking actions unless "--nquery" +# +# Run from the root of the release management git clone. + +. `dirname $0`/common.sh + +setUsage "`basename $0` [--nquery] [--as-rcnum <rc-num>] [--from-rctag <rc-num>]" +handleHelp "$@" + +NQUERY= +if [ "$1" == "--nquery" ]; then + NQUERY="--nquery"; shift +fi + +RC_NUM= +if [ "$1" == "--as-rcnum" ]; then + shift; requireArg "$@" + RC_NUM=$1; shift + checkRcNum ${RC_NUM} || usage "Not a release candidate number \"${RC_NUM}\"" +fi + +FROM_RCTAG_NUM= +if [ "$1" == "--from-rctag" ]; then + shift; requireArg "$@" + FROM_RCTAG_NUM=$1; shift + checkRcNum ${FROM_RCTAG_NUM} || usage "Not a release candidate number \"${FROM_RCTAG_NUM}\"" +fi + +noExtraArgs "$@" + +checkEdgentSourceRootGitDie +checkUsingMgmtCloneWarn || [ ${NQUERY} ] || confirm "Proceed using this clone?" || exit + +VER=`getEdgentVer gradle` +RELEASE_BRANCH=`getReleaseBranch ${VER}` + +TAG=`getReleaseTag ${VER} ${RC_NUM}` +TAG_COMMENT=`getReleaseTagComment ${VER} ${RC_NUM}` + +TO_MSG="branch ${RELEASE_BRANCH}" + +FROM_RCTAG= +if [ "${FROM_RCTAG_NUM}" ]; then + FROM_RCTAG=`getReleaseTag ${VER} ${FROM_RCTAG_NUM}` + TO_MSG="tag ${FROM_RCTAG}" +fi + +[ ${NQUERY} ] || confirm "Proceed to add tag \"${TAG}\" to ${TO_MSG}?" || exit + +echo "Creating tag ${TAG} to ${TO_MSG}" +(set -x; git checkout -q ${RELEASE_BRANCH}) +if [ "$FROM_RCTAG" ]; then + (set -x; git tag -a ${TAG} -m "${TAG_COMMENT}" ${FROM_RCTAG}) +else + (set -x; git tag -a ${TAG} -m "${TAG_COMMENT}") +fi +(set -x; git push origin ${TAG}) +(set -x; git show ${TAG} -s) http://git-wip-us.apache.org/repos/asf/incubator-edgent/blob/a3ab4a2c/buildTools/tag_release_candidate.sh ---------------------------------------------------------------------- diff --git a/buildTools/tag_release_candidate.sh b/buildTools/tag_release_candidate.sh new file mode 100755 index 0000000..62fe6ac --- /dev/null +++ b/buildTools/tag_release_candidate.sh @@ -0,0 +1,46 @@ +#!/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. +## +################################################################################ + +set -e + +# Create a tag on the release branch for the release candidate +# Edgent version from gradle.properties/build_version +# Prompts before taking actions unless "--nquery" +# +# Run from the root of the release management git clone. + +. `dirname $0`/common.sh + +setUsage "`basename $0` [--nquery] <rc-num>" +handleHelp "$@" + +NQUERY= +if [ "$1" == "--nquery" ]; then + NQUERY="--nquery"; shift +fi + +requireArg "$@" +RC_NUM=$1; shift +checkRcNum ${RC_NUM} || usage "Not a release candidate number \"${RC_NUM}\"" + +noExtraArgs "$@" + +`dirname $0`/tag_release.sh ${NQUERY} --as-rcnum ${RC_NUM}
