#!/bin/bash # Thanks goes to @pete-otaqui for the initial gist: # https://gist.github.com/pete-otaqui/4188238 # # Original version modified by Marek Suscak # # works with a file called VERSION in the current directory, # the contents of which should be a semantic version number # such as "1.2.3" or even "1.2.3-beta+001.ab" # this script will display the current version, automatically # suggest a "minor" version update, and ask for input to use # the suggestion, or a newly entered value. # once the new version number is determined, the script will # pull a list of changes from git history, prepend this to # a file called CHANGELOG.md (under the title of the new version # number), give user a chance to review and update the changelist # manually if needed and create a GIT tag. NOW="$(date +'%B %d, %Y')" RED="\033[1;31m" GREEN="\033[0;32m" YELLOW="\033[1;33m" BLUE="\033[1;34m" PURPLE="\033[1;35m" CYAN="\033[1;36m" WHITE="\033[1;37m" RESET="\033[0m" LATEST_HASH=`git log --pretty=format:'%h' -n 1` QUESTION_FLAG="${GREEN}?" WARNING_FLAG="${YELLOW}!" NOTICE_FLAG="${CYAN}❯" ADJUSTMENTS_MSG="${QUESTION_FLAG} ${CYAN}Now you can make adjustments to ${WHITE}CHANGELOG.md${CYAN}. Then press enter to continue." PUSHING_MSG="${NOTICE_FLAG} Pushing new version to the ${WHITE}origin${CYAN}..." if [ -f VERSION ]; then BASE_STRING=`cat VERSION` BASE_LIST=(`echo $BASE_STRING | tr '.' ' '`) V_MAJOR=${BASE_LIST[0]} V_MINOR=${BASE_LIST[1]} V_PATCH=${BASE_LIST[2]} echo -e "${NOTICE_FLAG} Current version: ${WHITE}$BASE_STRING" echo -e "${NOTICE_FLAG} Latest commit hash: ${WHITE}$LATEST_HASH" V_MINOR=$((V_MINOR + 1)) V_PATCH=0 SUGGESTED_VERSION="$V_MAJOR.$V_MINOR.$V_PATCH" echo -ne "${QUESTION_FLAG} ${CYAN}Enter a version number [${WHITE}$SUGGESTED_VERSION${CYAN}]: " read INPUT_STRING if [ "$INPUT_STRING" = "" ]; then INPUT_STRING=$SUGGESTED_VERSION fi echo -e "${NOTICE_FLAG} Will set new version to be ${WHITE}$INPUT_STRING" echo $INPUT_STRING > VERSION # # Fix files that make reference to the new version. Only change versions of images # belonging to this repository. References to other images such as Spark and Zeppelin # will be let alone. # #sed -E -i '' "s;(intersystemsdc/irisdemo-demo-fraudprevention:.+)-version-[0-9][0-9.]*;\1-version-$INPUT_STRING;g" ./docker-compose.yml #sed -E -i '' "s;(intersystemsdc/irisdemo-demo-fraudprevention:.+)-version-[0-9][0-9.]*;\1-version-$INPUT_STRING;g" ./banking_trn_srv/Dockerfile echo "## $INPUT_STRING ($NOW)" > tmpfile git log --pretty=format:" - %s" "v$BASE_STRING"...HEAD >> tmpfile echo "" >> tmpfile echo "" >> tmpfile cat CHANGELOG.md >> tmpfile mv tmpfile CHANGELOG.md echo -e "$ADJUSTMENTS_MSG" read echo -e "$PUSHING_MSG" # # Add files that were changed by the bumpversion.sh: # #git add CHANGELOG.md VERSION docker-compose.yml ./banking_trn_srv/Dockerfile git add CHANGELOG.md VERSION git commit -m "Bump version to ${INPUT_STRING}." git tag -a -m "Tag version ${INPUT_STRING}." "v$INPUT_STRING" git push origin --tags git push else echo -e "${WARNING_FLAG} Could not find a VERSION file." echo -ne "${QUESTION_FLAG} ${CYAN}Do you want to create a version file and start from scratch? [${WHITE}y${CYAN}]: " read RESPONSE if [ "$RESPONSE" = "" ]; then RESPONSE="y"; fi if [ "$RESPONSE" = "Y" ]; then RESPONSE="y"; fi if [ "$RESPONSE" = "Yes" ]; then RESPONSE="y"; fi if [ "$RESPONSE" = "yes" ]; then RESPONSE="y"; fi if [ "$RESPONSE" = "YES" ]; then RESPONSE="y"; fi if [ "$RESPONSE" = "y" ]; then echo "0.1.0" > VERSION echo "## 0.1.0 ($NOW)" > CHANGELOG.md git log --pretty=format:" - %s" >> CHANGELOG.md echo "" >> CHANGELOG.md echo "" >> CHANGELOG.md echo -e "$ADJUSTMENTS_MSG" read echo -e "$PUSHING_MSG" git add VERSION CHANGELOG.md git commit -m "Add VERSION and CHANGELOG.md files, Bump version to v0.1.0." git tag -a -m "Tag version 0.1.0." "v0.1.0" git push origin --tags fi fi echo -e "${NOTICE_FLAG} Finished."