|
|
@ -1,40 +1,47 @@ |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
function usage { |
|
|
|
set -euo pipefail |
|
|
|
|
|
|
|
function usage() { |
|
|
|
echo 'usage: --major | -M | --minor | -m | --patch | -p' |
|
|
|
exit -1 |
|
|
|
exit 1 |
|
|
|
} |
|
|
|
|
|
|
|
function setCommand { |
|
|
|
function setCommand() { |
|
|
|
#arg1 input, #arg2 return value |
|
|
|
declare -n ret=$2 |
|
|
|
|
|
|
|
case $1 in |
|
|
|
-M|--major) |
|
|
|
ret='major' ;; |
|
|
|
-m|--minor) |
|
|
|
ret='minor' ;; |
|
|
|
-p|--patch) |
|
|
|
ret='patch' ;; |
|
|
|
*) # unknown option |
|
|
|
echo |
|
|
|
echo 'unknown option, quitting' |
|
|
|
exit -1 |
|
|
|
;; |
|
|
|
-M | --major) |
|
|
|
ret='major' |
|
|
|
;; |
|
|
|
-m | --minor) |
|
|
|
ret='minor' |
|
|
|
;; |
|
|
|
-p | --patch) |
|
|
|
ret='patch' |
|
|
|
;; |
|
|
|
--help) |
|
|
|
usage |
|
|
|
;; |
|
|
|
*) # unknown option |
|
|
|
echo |
|
|
|
echo 'unknown option, quitting' |
|
|
|
echo |
|
|
|
usage |
|
|
|
;; |
|
|
|
esac |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
############# main |
|
|
|
|
|
|
|
# check more than one argument |
|
|
|
if [[ $# -gt 1 ]];then usage ;fi |
|
|
|
|
|
|
|
|
|
|
|
# check git covered |
|
|
|
REPOSITORY=`git config --get remote.origin.url` |
|
|
|
if [[ $? -ne 0 ]]; then |
|
|
|
echo 'no remote origin defined yet, please perform: `git remote add`' |
|
|
|
exit -1 |
|
|
|
REPOSITORY=$(git config --get remote.origin.url) |
|
|
|
if [[ "$?" -ne 0 ]]; then |
|
|
|
echo 'no remote origin defined yet, please perform: git remote add' |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
# check if dirty status |
|
|
@ -45,50 +52,42 @@ if [[ ! $changed -eq 0 ]]; then |
|
|
|
fi |
|
|
|
|
|
|
|
git remote update |
|
|
|
pulled_needed=$(git status -s -u no| wc -l) |
|
|
|
pulled_needed=$(git status -s -u no | wc -l) |
|
|
|
if [[ ! $changed -eq 0 ]]; then |
|
|
|
echo "git pull required, please do so before processing further" |
|
|
|
exit 3 |
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
# check if push needed before tagging |
|
|
|
push_needed=`git rev-list --branches --not --remotes |wc -l` |
|
|
|
push_needed=$(git rev-list --branches --not --remotes | wc -l) |
|
|
|
if [[ $push_needed -ne 0 ]]; then |
|
|
|
echo 'git push needed' |
|
|
|
echo 'git push needed' |
|
|
|
git push --set-upstream origin master |
|
|
|
echo 'git push done' |
|
|
|
echo '-------------' |
|
|
|
echo 'git push done' |
|
|
|
echo '-------------' |
|
|
|
fi |
|
|
|
|
|
|
|
# check latest tagged version |
|
|
|
LAST_TAG=`git rev-list --tags --max-count=1 2>/dev/null` |
|
|
|
LAST_TAG=$(git rev-list --tags --max-count=1 2>/dev/null) |
|
|
|
if [[ $? -eq 0 && -n "$LAST_TAG" ]]; then |
|
|
|
echo "LAST=${LAST_TAG}" |
|
|
|
VERSION=`git describe --tags $LAST_TAG` |
|
|
|
VERSION=$(git describe --tags $LAST_TAG) |
|
|
|
else |
|
|
|
echo 'not yet tagged!' |
|
|
|
VERSION=0.0.0 |
|
|
|
fi |
|
|
|
|
|
|
|
# check belongs to git.artcode.re |
|
|
|
#if [[ ! ("$REPOSITORY" =~ ^git@artcode.re+) ]]; then |
|
|
|
# echo "$REPOSITORY => $VERSION" |
|
|
|
# echo 'folder not covered by git.artcode.re, read-only' |
|
|
|
# exit -1 |
|
|
|
#fi |
|
|
|
|
|
|
|
# split into array |
|
|
|
VERSION_BITS=(${VERSION//./ }) |
|
|
|
MAJOR=${VERSION_BITS[0]:=0} |
|
|
|
MINOR=${VERSION_BITS[1]:=0} |
|
|
|
PATCH=${VERSION_BITS[2]:=0} |
|
|
|
|
|
|
|
REPO_NAME=`basename $REPOSITORY` |
|
|
|
REPO_NAME=$(basename $REPOSITORY) |
|
|
|
REPO_NAME=${REPO_NAME%.git} |
|
|
|
if [[ $VERSION != '0.0.0' ]];then |
|
|
|
if [[ $VERSION != '0.0.0' ]]; then |
|
|
|
echo "LATEST VERSION of '$REPO_NAME' is '$MAJOR.$MINOR.$PATCH'" |
|
|
|
COMMIT_ID=`git log --format="%H" -n 1` |
|
|
|
COMMIT_ID=$(git log --format="%H" -n 1) |
|
|
|
if [[ $COMMIT_ID == $LAST_TAG ]]; then |
|
|
|
echo "cannot tag twice the same commit id : $LAST_TAG" |
|
|
|
exit -1 |
|
|
@ -96,7 +95,7 @@ if [[ $VERSION != '0.0.0' ]];then |
|
|
|
fi |
|
|
|
|
|
|
|
COMMAND="${1:-ask}" |
|
|
|
if [[ $COMMAND == 'ask' ]];then |
|
|
|
if [[ $COMMAND == 'ask' ]]; then |
|
|
|
echo -n "Press 'M' for Major, 'm' for minor, 'p' for patch ? " |
|
|
|
read -n1 input |
|
|
|
echo |
|
|
@ -106,25 +105,24 @@ fi |
|
|
|
setCommand $COMMAND COMMAND |
|
|
|
|
|
|
|
case $COMMAND in |
|
|
|
"major") |
|
|
|
let "MAJOR++" |
|
|
|
let "MINOR=0" |
|
|
|
let "PATCH=0" |
|
|
|
;; |
|
|
|
"minor") |
|
|
|
let "MINOR++" |
|
|
|
let "PATCH=0" |
|
|
|
;; |
|
|
|
"patch") |
|
|
|
let "PATCH++" |
|
|
|
;; |
|
|
|
"major") |
|
|
|
let "MAJOR++" |
|
|
|
let "MINOR=0" |
|
|
|
let "PATCH=0" |
|
|
|
;; |
|
|
|
"minor") |
|
|
|
let "MINOR++" |
|
|
|
let "PATCH=0" |
|
|
|
;; |
|
|
|
"patch") |
|
|
|
let "PATCH++" |
|
|
|
;; |
|
|
|
esac |
|
|
|
|
|
|
|
|
|
|
|
TAG="$MAJOR.$MINOR.$PATCH" |
|
|
|
|
|
|
|
# check if tag exists already! |
|
|
|
if [[ -n $(git tag -l $TAG) ]];then |
|
|
|
if [[ -n $(git tag -l $TAG) ]]; then |
|
|
|
echo "WARNING: ${TAG} already exists!" |
|
|
|
exit 4 |
|
|
|
fi |
|
|
@ -134,20 +132,19 @@ GIT_ROOT_FOLDER=$(dirname $(git rev-parse --git-dir)) |
|
|
|
if [[ -f "${GIT_ROOT_FOLDER}/package.json" ]]; then |
|
|
|
|
|
|
|
echo "package.json detected, version replaced with new tag <${TAG}>" |
|
|
|
if ! command -v jq &> /dev/null |
|
|
|
then |
|
|
|
if ! command -v jq &>/dev/null; then |
|
|
|
echo 'command <jq> not found, hint: `sudo apt install jq`' |
|
|
|
exit 5 |
|
|
|
fi |
|
|
|
|
|
|
|
tmp=$(mktemp) |
|
|
|
jq '.version = $TAG' --arg TAG $TAG "${GIT_ROOT_FOLDER}/package.json" > "$tmp" && mv "$tmp" "${GIT_ROOT_FOLDER}/package.json" |
|
|
|
|
|
|
|
jq '.version = $TAG' --arg TAG $TAG "${GIT_ROOT_FOLDER}/package.json" >"$tmp" && mv "$tmp" "${GIT_ROOT_FOLDER}/package.json" |
|
|
|
|
|
|
|
fi |
|
|
|
|
|
|
|
set -e # EXITS when any error occurs |
|
|
|
|
|
|
|
echo $TAG > ${GIT_ROOT_FOLDER}/.semver_git_tag |
|
|
|
echo $TAG >${GIT_ROOT_FOLDER}/.semver_git_tag |
|
|
|
git add ${GIT_ROOT_FOLDER}/.semver_git_tag |
|
|
|
echo "tagging as $TAG ..." |
|
|
|
git commit -am "tagged as ${TAG}" |
|
|
|