#!/usr/bin/env bash

# 1. Tags the HEAD on the 'master' branch with 
#    'myriad-<version>-incubating-rc<RC#>'.
# 2. Creates release artifacts and signs them with GPG key.
# 3. Uploads the release artifacts to "dev" SVN.

test ${#} -eq 2 || \
  { echo "Usage: `basename ${0}` [myriad version] [rc #]"; exit 1; }

VERSION=${1}
RC=${2}

TAG="myriad-${VERSION}-incubating-rc${RC}"
GIT_URL="https://git-wip-us.apache.org/repos/asf/incubator-myriad.git"
WORK_DIR="."

echo "Preparing a release candidate ${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; }

# perform a build
pushd ${TEMP}
./gradlew build || \
  { echo "Failed to build Myriad."; exit 1; }

echo "Creating git tag ${TAG} and pushing to ${GIT_URL} ...${NORMAL}"
git tag ${TAG}
git push ${GIT_URL} refs/tags/${TAG}

popd # temp

# make a fresh clone that syncs to ${TAG}
git clone $GIT_URL ${TAG} --branch ${TAG} || \
  { echo "Failed to clone Myriad from ${GIT_URL}"; exit 1; }

# Remove files/folders that shouldn't be included in the release artifacts
rm -rf ${TAG}/website
rm -rf ${TAG}/support
rm -rf ${TAG}/gradlew.bat
rm -rf ${TAG}/gradlew
rm -rf ${TAG}/gradle/wrapper
rm -rf ${TAG}/.travis.yml
rm -rf ${TAG}/myriad-scheduler/src/main/resources/banner.txt

# Create a tar ball that excludes VCS files
TARBALL=${TAG}.tar.gz
tar -czf ${TARBALL} ${TAG} --exclude-vcs || \
  { echo "Failed to create a tarball of ${TAG}"; exit 1; }

# Sign the tarball.
echo "Signing the distribution ..."
gpg --armor --output ${TARBALL}.asc --detach-sig ${TARBALL} || \
  { echo "Failed to sign the tarball ${TARBALL}"; exit 1; }

# Create MD5 checksum.
echo "Creating a MD5 checksum..."
gpg --print-md MD5 ${TARBALL} > ${TARBALL}.md5 || \
  { echo "Failed to create MD5 checksum for tarball ${TARBALL}"; exit 1; }

# Create SHA512 checksum.
echo "Creating a SHA512 checksum..."
gpg --print-md SHA512 ${TARBALL} > ${TARBALL}.sha512 || \
  { echo "Failed to create SHA512 checksum for tarball ${TARBALL}"; exit 1; }

SVN_DEV_REPO="https://dist.apache.org/repos/dist/dev/incubator/myriad"
SVN_DEV_LOCAL="${WORK_DIR}/dev"

echo "Checking out svn dev repo from ${SVN_DEV_REPO}..."

# Note '--depth=empty' ensures none of the existing files
# in the repo are checked out, saving time and space.
svn co --depth=empty ${SVN_DEV_REPO} ${SVN_DEV_LOCAL} || \
  { echo "Failed to checkout SVN repo from ${SVN_DEV_REPO} to ${SVN_DEV_LOCAL}"; exit 1; }

RELEASE_DIRECTORY="${SVN_DEV_LOCAL}/${TAG}"
mkdir ${RELEASE_DIRECTORY}
mv ${TARBALL} ${TARBALL}.asc ${TARBALL}.md5 ${TARBALL}.sha512 ${RELEASE_DIRECTORY}
echo "Release artifacts moved into ${RELEASE_DIRECTORY}"

pushd ${SVN_DEV_LOCAL}

while true; do
    read -p "PUSH THE ARTIFACTS TO ${SVN_DEV_REPO}/${TAG} ? " yn
    case $yn in
        [Yy]* ) break;;
        [Nn]* ) echo "OK. Goodbye..!"; exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

echo "Uploading the artifacts (the distribution," \
  "signature, MD5 and SHA) to ${SVN_DEV_REPO}/${TAG} ...."

svn add ${TAG}
svn commit -m "Adding ${TAG}."
popd # ${SVN_DEV_LOCAL}

echo "All good!"

