#!/bin/bash set -o nounset # disallow usage of unset vars ( set -u ) set -o errexit # Exit immediately if a pipeline returns non-zero. ( set -e ) set -o errtrace # Allow the above trap be inherited by all functions in the script. ( set -E ) set -o pipefail # Return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status IFS=$'\n\t' # Set $IFS to only newline and tab. curr_vers=$(git describe --tags --abbrev=0 | sed 's/v//g') next_ver=$(echo "$curr_vers" | awk -F. -v OFS=. 'NF==1{print ++$NF}; NF>1{if(length($NF+1)>length($NF))$(NF-1)++; $NF=sprintf("%0*d", length($NF), ($NF+1)%(10^length($NF))); print}') echo "" echo "> Current Version: ${curr_vers}" echo "> Next Version: ${next_ver}" echo "" git add --verbose . git commit -a -m "v${next_ver}" git tag "v${next_ver}" git push git push --tags