#!/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 :)"

