Browse Source

semver_git_tag verify once

main
pvincent 2 weeks ago
parent
commit
6595ac8cf4
  1. 210
      tools/semver_git_tag

210
tools/semver_git_tag

@ -8,110 +8,110 @@ NOVERIFY=false
# FUNCTIONS # FUNCTIONS
function usage { function usage {
echo "$(dirname $0)/$(basename $0) < --major|-M | --minor|-m | --patch|-p > [--no-verify]"
echo "$(dirname $0)/$(basename $0) < --major|-M | --minor|-m | --patch|-p > [--no-verify]"
} }
function parse_options { function parse_options {
while [[ $# -gt 0 ]]; do
case "$1" in
--major | -M)
shift 1
COMMAND='major'
;;
--minor | -m)
shift 1
COMMAND='minor'
;;
--patch | -p)
shift 1
COMMAND='patch'
;;
--no-verify)
shift 1
NOVERIFY=true
;;
--help | -h)
usage && exit 0
;;
*)
echo "Unknown option: $1"
usage && exit 2
;;
esac
shift 1 # Move to the next argument
done
while [[ $# -gt 0 ]]; do
case "$1" in
--major | -M)
shift 1
COMMAND='major'
;;
--minor | -m)
shift 1
COMMAND='minor'
;;
--patch | -p)
shift 1
COMMAND='patch'
;;
--no-verify)
shift 1
NOVERIFY=true
;;
--help | -h)
usage && exit 0
;;
*)
echo "Unknown option: $1"
usage && exit 2
;;
esac
shift 1 # Move to the next argument
done
} }
function ask_for_tag { function ask_for_tag {
echo -n "Press 'M' for Major, 'm' for minor, 'p' for patch ? "
read -rn1 input
echo
case "$input" in
M)
COMMAND='major'
;;
m)
COMMAND='minor'
;;
p)
COMMAND='patch'
;;
*)
echo >&2 "Unknown option: $input"
exit 3
;;
esac
echo -n "Press 'M' for Major, 'm' for minor, 'p' for patch ? "
read -rn1 input
echo
case "$input" in
M)
COMMAND='major'
;;
m)
COMMAND='minor'
;;
p)
COMMAND='patch'
;;
*)
echo >&2 "Unknown option: $input"
exit 3
;;
esac
} }
function extra_options { function extra_options {
extra=""
[[ $NOVERIFY == true ]] && extra="$extra --no-verify"
echo "$extra"
extra=""
[[ $NOVERIFY == true ]] && extra="$extra --no-verify"
echo "$extra"
} }
function assert_git_covered { function assert_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
fi
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
} }
function assert_git_clean { function assert_git_clean {
[[ -n $(git status -s) ]] &&
echo >&2 "git commit required, please do so before processing further" &&
exit 2
[[ -n $(git status -s) ]] &&
echo >&2 "git commit required, please do so before processing further" &&
exit 2
} }
function assert_git_pull { function assert_git_pull {
git remote update
[[ -n $(git status -su no) ]] &&
echo >&2 "git pull required, please do so before processing further" &&
exit 3
git remote update
[[ -n $(git status -su no) ]] &&
echo >&2 "git pull required, please do so before processing further" &&
exit 3
} }
function git_push { function git_push {
current_branch=$(git rev-parse --abbrev-ref HEAD)
push_needed=$(git rev-list --branches --not --remotes | wc -l)
if [[ $push_needed -ne 0 ]]; then
echo 'git push needed'
git push --set-upstream origin "$current_branch" $(extra_options)
echo 'git push done'
echo '-------------'
fi
current_branch=$(git rev-parse --abbrev-ref HEAD)
push_needed=$(git rev-list --branches --not --remotes | wc -l)
if [[ $push_needed -ne 0 ]]; then
echo 'git push needed'
git push --set-upstream origin "$current_branch" $(extra_options)
echo 'git push done'
echo '-------------'
fi
} }
function latest_tagged_version { function latest_tagged_version {
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)
echo "current is: $VERSION"
else
echo 'not yet tagged!'
VERSION=0.0.0
fi
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)
echo "current is: $VERSION"
else
echo 'not yet tagged!'
VERSION=0.0.0
fi
} }
############# main ############# main
@ -134,27 +134,27 @@ PATCH=${VERSION_BITS[2]:=0}
REPO_NAME=$(basename $REPOSITORY) REPO_NAME=$(basename $REPOSITORY)
REPO_NAME=${REPO_NAME%.git} 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)
if [[ $COMMIT_ID == $LAST_TAG ]]; then
echo "cannot tag twice the same commit id : $LAST_TAG"
exit 1
fi
echo "LATEST VERSION of '$REPO_NAME' is '$MAJOR.$MINOR.$PATCH'"
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
fi
fi fi
case $COMMAND in case $COMMAND in
"major") "major")
let "MAJOR++"
let "MINOR=0"
let "PATCH=0"
;;
let "MAJOR++"
let "MINOR=0"
let "PATCH=0"
;;
"minor") "minor")
let "MINOR++"
let "PATCH=0"
;;
let "MINOR++"
let "PATCH=0"
;;
"patch") "patch")
let "PATCH++"
;;
let "PATCH++"
;;
esac esac
echo "show TAG" echo "show TAG"
@ -163,22 +163,22 @@ echo "new TAG $TAG"
# check if tag exists already! # 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
echo "WARNING: ${TAG} already exists!"
exit 4
fi fi
# check whether NPM project detected, containing package.json on root project # check whether NPM project detected, containing package.json on root project
GIT_ROOT_FOLDER=$(dirname $(git rev-parse --git-dir)) GIT_ROOT_FOLDER=$(dirname $(git rev-parse --git-dir))
if [[ -f "${GIT_ROOT_FOLDER}/package.json" ]]; then if [[ -f "${GIT_ROOT_FOLDER}/package.json" ]]; then
echo "package.json detected, version replaced with new tag <${TAG}>"
if ! command -v yq &>/dev/null; then
echo 'command <yq> not found, hint: go and fetch latest release from https://github.com/mikefarah/yq'
exit 5
fi
echo "package.json detected, version replaced with new tag <${TAG}>"
if ! command -v yq &>/dev/null; then
echo 'command <yq> not found, hint: go and fetch latest release from https://github.com/mikefarah/yq'
exit 5
fi
yq -i ".version=\"$TAG\"" "${GIT_ROOT_FOLDER}/package.json"
git add ${GIT_ROOT_FOLDER}/package.json
yq -i ".version=\"$TAG\"" "${GIT_ROOT_FOLDER}/package.json"
git add ${GIT_ROOT_FOLDER}/package.json
fi fi
echo $TAG >${GIT_ROOT_FOLDER}/.semver_git_tag echo $TAG >${GIT_ROOT_FOLDER}/.semver_git_tag
@ -186,5 +186,5 @@ git add ${GIT_ROOT_FOLDER}/.semver_git_tag
echo "tagging as $TAG ..." echo "tagging as $TAG ..."
git commit -am "tagged as ${TAG}" git commit -am "tagged as ${TAG}"
git tag $TAG git tag $TAG
git push origin "$current_branch" --tags $(extra_options)
git push origin --no-verify "$current_branch" --tags $(extra_options)
echo "done" echo "done"
Loading…
Cancel
Save