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