diff --git a/scripts/core.sh b/scripts/core.sh index 542d0cd..4256d40 100755 --- a/scripts/core.sh +++ b/scripts/core.sh @@ -24,7 +24,12 @@ usage() { echo " -p: Publish (requires a version)" 1>&2; echo " -X: Staging Deploy (requires a version)" 1>&2; echo " -x: Production Deploy (requires a version)" 1>&2; - echo " -t: Software version, this will be used for the docker tag (default: local)" 1>&2; + echo " Tagging, docker images (default: local)" 1>&2; + echo " -t: Manual tag" 1>&2; + echo " -T: Autotag patch/release" 1>&2; + echo " -m: Autotag minor" 1>&2; + echo " -M: Autotag major" 1>&2; + echo " -P: Pre-release" 1>&2; echo " -v: Verbose" 1>&2; exit 1; } @@ -35,10 +40,13 @@ PUBLISH_MODE=0 DEPLOY_TEST_MODE=0 DEPLOY_PROD_MODE=0 SELECTED_MODES=0 +TAG_IMPLICIT=1 TAG="local" +TAG_OPTS="" +AUTOTAG=0 -while getopts "t:hvudpxX" o; do +while getopts "t:TmMPhvudpxX" o; do case "${o}" in u) UNIT_MODE=1 @@ -63,6 +71,27 @@ while getopts "t:hvudpxX" o; do t) TAG=${OPTARG} + TAG_IMPLICIT=0 + ;; + T) + TAG_OPTS="${TAG_OPTS}r" + TAG_IMPLICIT=0 + AUTOTAG=1 + ;; + m) + TAG_OPTS="${TAG_OPTS}m" + TAG_IMPLICIT=0 + AUTOTAG=1 + ;; + M) + TAG_OPTS="${TAG_OPTS}M" + TAG_IMPLICIT=0 + AUTOTAG=1 + ;; + P) + TAG_OPTS="${TAG_OPTS}p" + TAG_IMPLICIT=0 + AUTOTAG=1 ;; v) VERBOSE=1 @@ -87,6 +116,11 @@ if [[ $SELECTED_MODES -ne 1 ]]; then usage fi +if [[ $AUTOTAG -eq 1 ]]; then + TAG=`./next-ver.sh -${TAG_OPTS}` + echo "Using tag $TAG" +fi + ./aws-login.sh if [[ $UNIT_MODE -eq 1 ]]; then @@ -115,6 +149,11 @@ if [[ $PUBLISH_MODE -eq 1 ]]; then ./run-unit.sh $VERBOPT -t $TAG ./publish.sh $VERBOPT -t $TAG + + if [[ $TAG_IMPLICIT -ne 1 ]]; then + git tag $TAG + git push --tags + fi fi diff --git a/scripts/latest-ver.sh b/scripts/latest-ver.sh new file mode 100755 index 0000000..adb1052 --- /dev/null +++ b/scripts/latest-ver.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +git tag -l --sort=-version:refname | head -n 1 \ No newline at end of file diff --git a/scripts/next-ver.sh b/scripts/next-ver.sh new file mode 100755 index 0000000..22215fb --- /dev/null +++ b/scripts/next-ver.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +usage() { + echo "Usage: $0 [-h] [-m|M] [-p]" 1>&2; + echo " -h: This message" 1>&2; + echo " -p: Pre release" 1>&2; + echo " -m: Increment minor" 1>&2; + echo " -M: Increment major" 1>&2; +} + +PRE_RELEASE=0 +ALTERS=0 +ALTER_NAME="release" + +while getopts "hpmMr" o; do + case "${o}" in + p) + PRE_RELEASE=1 + ;; + r) + ALTERS=$ALTERS+1 + ALTER_NAME="release" + ;; + m) + ALTERS=$ALTERS+1 + ALTER_NAME="minor" + ;; + M) + ALTERS=$ALTERS+1 + ALTER_NAME="major" + ;; + h) + usage + exit 0; + ;; + *) + printerr "Unsupported option ${o}" + usage + exit 1; + ;; + esac +done + +if [[ $ALTERS -gt 1 ]]; then + echo "You can specify exactly one option between m and M" + usage + exit 1; +fi + +CURRENT_VERSION=`./latest-ver.sh` + +INCREMENT_NAME=$ALTER_NAME +if [[ $PRE_RELEASE -gt 0 ]]; then + INCREMENT_NAME="pre$INCREMENT_NAME" +fi + +NEW_VERSION=`semver $CURRENT_VERSION --preid rc -i $INCREMENT_NAME` + +echo "$NEW_VERSION" \ No newline at end of file