119 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.8 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 ""
 | 
						|
  echo "Publishing new release branch..."
 | 
						|
  echo ""
 | 
						|
  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 ""
 | 
						|
  echo "🚀  Keep an eye on $(underline "https://github.com/${ORG_NAME}/${REPO_NAME}/pulls") for the new release PR"
 | 
						|
  echo ""
 | 
						|
 | 
						|
  echo "Switching back to the main git branch"
 | 
						|
  git checkout $(git remote show origin 2>/dev/null|grep HEAD|sed 's/.* //') &> /dev/null
 | 
						|
  git pull &> /dev/null
 | 
						|
else
 | 
						|
  echo "Aborting..."
 | 
						|
  exit 1
 | 
						|
fi
 |