Skip to content

Instantly share code, notes, and snippets.

@sumanmaity112
Last active November 17, 2022 16:00
Show Gist options
  • Save sumanmaity112/872c56d7c05e1c332cb6e9d37216ac0d to your computer and use it in GitHub Desktop.
Save sumanmaity112/872c56d7c05e1c332cb6e9d37216ac0d to your computer and use it in GitHub Desktop.
Update the SemVer in the git repository, where it's maintained using git tags, optionally filtered by tag prefix. It can also be used for MonoRepo
#!/usr/bin/env bash
# git version 2.38.1
set -euo pipefail
_get_latest_tag() {
local prefix="${1:-}"
git tag -i -l "${prefix}*" --sort -v:refname | head -n1
}
_get_current_version() {
local tag_prefix="${1:-}"
local current_version
current_version=$(_get_latest_tag "${tag_prefix}" | sed -e "s/${tag_prefix}//")
if [ -z "${current_version}" ]; then
echo "0.0.0"
else
echo "${current_version}"
fi
}
_bump_semver() {
local current_version="${1}"
local sem_ver_name
sem_ver_name=$(echo "${2}" | tr '[:upper:]' '[:lower:]')
IFS='.' read -r -a semvers <<<"${current_version}"
case "${sem_ver_name}" in
patch) echo "${semvers[0]}.${semvers[1]}.$((semvers[2] + 1))" ;;
minor) echo "${semvers[0]}.$((semvers[1] + 1)).0" ;;
major) echo "$((semvers[0] + 1)).0.0" ;;
*)
echo "Invalid semver"
exit 1
;;
esac
}
_bump_semver_tag() {
local dry_run
if [[ $(echo "${DRY_RUN:-false}" | tr '[:upper:]' '[:lower:]') == "false" ]]; then
dry_run=""
else
dry_run="echo "
fi
local sem_ver_name="${1:-patch}"
local tag_prefix
tag_prefix=$(echo "${2:-}" | tr '[:upper:]' '[:lower:]')
local current_version
current_version=$(_get_current_version "${tag_prefix}")
local new_version
new_version=$(_bump_semver "${current_version}" "${sem_ver_name}")
${dry_run} git tag -a "${tag_prefix}${new_version}" -m "Bump version to ${new_version}"
}
_bump_semver_tag "$@"
# sh bump-semver.sh "patch" "v"
# DRY_RUN=true sh bump-semver.sh "patch" "v"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment