| #!/usr/bin/env bash |
| |
| # 1. Tags the successfully voted RC with |
| # 'myriad-<version>-incubating'. |
| # 2. Pushes the release tag to git. |
| # 3. Deletes the previously tagged RC tags. |
| # 4. Uploads the release artifacts to "release" SVN. |
| # 5. Deletes the previously available RC artifacts from "dev" SVN. |
| |
| function askAndGo() { |
| while true; do |
| read -p "$1 ?" yn |
| case $yn in |
| [Yy]* ) break;; |
| [Nn]* ) echo "OK. Goodbye..!"; exit;; |
| * ) echo "Please answer yes or no.";; |
| esac |
| done |
| } |
| |
| #main |
| test ${#} -eq 2 || \ |
| { echo "Usage: `basename ${0}` [myriad version] [voted rc#]"; exit 1; } |
| |
| VERSION=${1} |
| RC=${2} |
| |
| RC_TAG="myriad-${VERSION}-incubating-rc${RC}" |
| RELEASE_TAG="myriad-${VERSION}-incubating" |
| GIT_URL="https://git-wip-us.apache.org/repos/asf/incubator-myriad.git" |
| WORK_DIR="." |
| |
| echo "Preparing a release ${RELEASE_TAG}.." |
| |
| TEMP="temp" |
| # clone the repo to "temp" |
| git clone $GIT_URL ${TEMP}|| \ |
| { echo "Failed to clone Myriad from ${GIT_URL} into ${TEMP}"; exit 1; } |
| |
| pushd ${TEMP} |
| echo "Creating new release tag '${RELEASE_TAG}' and pushing it to ${GIT_URL} ..." |
| git tag ${RELEASE_TAG} ${RC_TAG} |
| echo "Git tags for version ${VERSION}: " |
| git log --pretty=oneline --abbrev-commit --decorate | grep "tag:" | grep ${VERSION} |
| askAndGo "Push tag '${RELEASE_TAG}' to ${GIT_URL}" |
| git push origin refs/tags/${RELEASE_TAG} |
| |
| echo "Deleting (now) old RC git tags..." |
| for i in `git tag -l | grep ${VERSION} | grep "rc"`; |
| do |
| git tag -d ${i} |
| askAndGo "Delete tag '${i}' from ${GIT_URL}" |
| git push origin :refs/tags/${i} |
| done |
| popd # temp |
| |
| SVN_DEV_REPO="https://dist.apache.org/repos/dist/dev/incubator/myriad" |
| SVN_RELEASE_REPO="https://dist.apache.org/repos/dist/release/incubator/myriad" |
| SVN_DEV_LOCAL="${WORK_DIR}/dev" |
| SVN_RELEASE_LOCAL="${WORK_DIR}/release" |
| |
| echo "Checking out svn dev repo from ${SVN_DEV_REPO} to ${SVN_DEV_LOCAL}..." |
| svn co ${SVN_DEV_REPO} ${SVN_DEV_LOCAL} || \ |
| { echo "Failed to checkout SVN repo from ${SVN_DEV_REPO} to ${SVN_DEV_LOCAL}"; exit 1; } |
| |
| echo "Checking out svn release repo from ${SVN_RELEASE_REPO} to ${SVN_RELEASE_LOCAL}..." |
| svn co ${SVN_RELEASE_REPO} ${SVN_RELEASE_LOCAL} || \ |
| { echo "Failed to checkout SVN repo from ${SVN_RELEASE_REPO} to ${SVN_RELEASE_LOCAL}"; exit 1; } |
| |
| mkdir ${SVN_RELEASE_LOCAL}/${RELEASE_TAG} |
| echo "Copying release artifacts under ${SVN_DEV_LOCAL}/${RC_TAG} to ${SVN_RELEASE_LOCAL}/${RELEASE_TAG}..." |
| cp ${SVN_DEV_LOCAL}/${RC_TAG}/${RC_TAG}.tar.gz ${SVN_RELEASE_LOCAL}/${RELEASE_TAG}/${RELEASE_TAG}.tar.gz |
| cp ${SVN_DEV_LOCAL}/${RC_TAG}/${RC_TAG}.tar.gz.asc ${SVN_RELEASE_LOCAL}/${RELEASE_TAG}/${RELEASE_TAG}.tar.gz.asc |
| cp ${SVN_DEV_LOCAL}/${RC_TAG}/${RC_TAG}.tar.gz.md5 ${SVN_RELEASE_LOCAL}/${RELEASE_TAG}/${RELEASE_TAG}.tar.gz.md5 |
| cp ${SVN_DEV_LOCAL}/${RC_TAG}/${RC_TAG}.tar.gz.sha512 ${SVN_RELEASE_LOCAL}/${RELEASE_TAG}/${RELEASE_TAG}.tar.gz.sha512 |
| |
| pushd ${SVN_RELEASE_LOCAL} |
| echo "Release artifacts under ${SVN_RELEASE_LOCAL}/${RELEASE_TAG}:" |
| ls ${RELEASE_TAG} |
| askAndGo "PUSH THE ${RELEASE_TAG} ARTIFACTS TO ${SVN_RELEASE_REPO}/${RELEASE_TAG}" |
| svn add ${RELEASE_TAG} |
| svn commit -m "Adding ${RELEASE_TAG}." |
| popd # ${SVN_RELEASE_LOCAL} |
| |
| askAndGo "PROCEED TO DELETE OLD RCs FROM ${SVN_DEV_REPO}/" |
| echo "Old RCs in ${SVN_DEV_REPO}:" |
| ls ${SVN_DEV_LOCAL} | grep ${VERSION} |
| |
| ### delete old RCs |
| pushd ${SVN_DEV_LOCAL} |
| for i in `ls | grep ${VERSION}` |
| do |
| askAndGo "DELETE $i FROM ${SVN_DEV_REPO}/" |
| svn delete $i |
| svn commit -m "Deleting $i as ${RELEASE_TAG} is committed to ${SVN_RELEASE_REPO}." |
| done |
| popd # ${SVN_DEV_LOCAL} |
| |
| echo "All good!" |
| askAndGo "Cleanup local repos" |
| rm -rf ${TEMP} |
| rm -rf ${SVN_DEV_LOCAL} |
| rm -rf ${SVN_RELEASE_LOCAL} |
| echo "All clean :)" |
| |