1#!/usr/bin/env bash 2 3# safety checks 4if [[ $# -ne 1 ]]; then 5 echo "usage: $0 <major|minor|patch>" >&2 6 exit 1 7fi 8if [[ "$(git rev-parse --abbrev-ref HEAD)" != 'master' ]]; then 9 echo "not on the master branch" >&2 10 exit 1 11fi 12 13# get latest and check if clean 14git pull 15if [[ -n "$(git status --porcelain)" ]]; then 16 echo "working directory is dirty" >&2 17 exit 1 18fi 19 20# get the current verison from last git tag into array and 21# inc the provided part 22semver_expression='s/^v([0-9]+)\.([0-9]+)\.([0-9]+).*$/\1 \2 \3/' 23version=( $(git describe --tags | sed -E -e "$semver_expression" ) ) 24case "$1" in 25 major) 26 ((version[0]++)) 27 version[1]=0 28 version[2]=0 29 ;; 30 minor) 31 ((version[1]++)) 32 version[2]=0 33 ;; 34 patch) 35 ((version[2]++)) 36 ;; 37 *) 38 echo 'please provide a valid version in increment' >&2 39 exit 1 40esac 41new_version="v${version[0]}.${version[1]}.${version[2]}" 42 43# write version to go 44mkdir version >/dev/null 2>&1 45cat > version/version.go << EOL 46// generated by \`_do_bump_version\` script in project root 47// $(date) 48// DO NOT EDIT 49 50package version 51 52const NAME = "gonic" 53const NAME_UPPER = "GONIC" 54const NAME_EMBED = "gonicembed" 55const NAME_SCAN = "gonicscan" 56const VERSION = "$new_version" 57EOL 58 59./_do_gen_handler_tests 60 61# create and tag single commit with a change to the version file 62git commit --all --file - << EOL 63bump to $new_version 64 65generated by \`_do_bump_version\` script in project root 66EOL 67git tag "$new_version" 68