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
 |