111 lines
2.6 KiB
Bash
Executable File
111 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
source .utils
|
|
|
|
set -e
|
|
|
|
print_usage() {
|
|
orange "gs-release - create a new release of a Giant Swarm repo"
|
|
echo " "
|
|
underline "Usage:"
|
|
echo "gs-release [SEMVER LEVEL]"
|
|
echo " "
|
|
echo " "
|
|
underline "Options:"
|
|
echo "-h, --help show this help text"
|
|
}
|
|
|
|
while test $# -gt 0; do
|
|
case "$1" in
|
|
-h|--help)
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
SEMVER=$1
|
|
|
|
CURRENT_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
|
|
MAIN_BRANCH=$(git remote show origin 2>/dev/null|grep HEAD|sed 's/.* //')
|
|
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
|
|
|
if [ "$MAIN_BRANCH" != "$CURRENT_BRANCH" ]; then
|
|
echo "Not currently on main branch, please switch to ${MAIN_BRANCH} to perform a release"
|
|
exit 1
|
|
fi
|
|
|
|
VERSION_PARTS=($(echo $CURRENT_TAG | tr "." "\n"))
|
|
VERSION_MAJOR=${VERSION_PARTS[0]}
|
|
VERSION_MINOR=${VERSION_PARTS[1]}
|
|
VERSION_PATCH=${VERSION_PARTS[2]}
|
|
|
|
echo "The latest released version is ${CURRENT_TAG}"
|
|
echo ""
|
|
|
|
echo "The release will include:"
|
|
sed -n "/^## \[Unreleased\]$/,/^## /p" CHANGELOG.md | tail -n +3 | tail -r | tail -n +2 | tail -r | sed "s/^/ /g"
|
|
echo ""
|
|
|
|
if [[ "$SEMVER" == "" ]]; then
|
|
printf "What semver release level? (patch, minor or major): "
|
|
read SEMVER
|
|
fi
|
|
|
|
case ${SEMVER} in
|
|
patch)
|
|
VERSION_PATCH=$((VERSION_PATCH+1))
|
|
;;
|
|
|
|
minor)
|
|
VERSION_MINOR=$((VERSION_MINOR+1))
|
|
VERSION_PATCH=0
|
|
;;
|
|
|
|
major)
|
|
if [[ ${VERSION_MAJOR:0:1} == "v" ]]; then
|
|
VERSION_MAJOR="v$((VERSION_MAJOR+1))"
|
|
else
|
|
VERSION_MAJOR=$((VERSION_MAJOR+1))
|
|
fi
|
|
VERSION_MINOR=0
|
|
VERSION_PATCH=0
|
|
;;
|
|
|
|
*)
|
|
echo "Unknown Semver level provided"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
NEW_VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
|
|
NEW_BRANCH="${MAIN_BRANCH}#release#${NEW_VERSION}"
|
|
|
|
echo ""
|
|
echo "✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ "
|
|
echo "Current version ${CURRENT_TAG}"
|
|
echo " New version ${NEW_VERSION}"
|
|
echo " Release branch ${NEW_BRANCH}"
|
|
echo "✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ ✨ "
|
|
echo ""
|
|
|
|
printf "Confirm? (y/n): "
|
|
read CONFIRM
|
|
|
|
if [ "${CONFIRM}" = "y" ]; then
|
|
echo "Publishing new release branch..."
|
|
git checkout -b "${NEW_BRANCH}"
|
|
git push -u origin "${NEW_BRANCH}"
|
|
|
|
ORG_NAME=$(git remote get-url origin | sed 's/.*github.com[:|\/]//' | sed 's/\.git$//' | tr '/' ' ' | awk '{print $1}')
|
|
REPO_NAME=$(git remote get-url origin | sed 's/.*github.com[:|\/]//' | sed 's/\.git$//' | tr '/' ' ' | awk '{print $2}')
|
|
|
|
echo "🚀 Keep an eye on https://github.com/${ORG_NAME}/${REPO_NAME}/pulls for the new release PR"
|
|
else
|
|
echo "Aborting..."
|
|
exit 1
|
|
fi
|