From c9d6c8e05d3dab8e40be22c7c7b1f9da276cd742 Mon Sep 17 00:00:00 2001 From: gampnico <45390064+gampnico@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:29:30 +0100 Subject: [PATCH] feat: add script to bump semantic versioning, makefile Adds bash script to bump build version, and a make command ``make bump-version``. --- Makefile | 5 +-- bump_version.sh | 102 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 bump_version.sh diff --git a/Makefile b/Makefile index dea13aa..65c707b 100644 --- a/Makefile +++ b/Makefile @@ -121,9 +121,8 @@ build: --install-build-deps ## Build COSIPY package $(PYTHON) -m build @twine check dist/* -# .PHONY -# bump-version: -# @grep -Po '\bversion\s*=\s*"\K.*?(?=")' pyproject.toml +bump-version: + @bash bump_version.sh .PHONY: upload-pypi: # Private: upload COSIPY package diff --git a/bump_version.sh b/bump_version.sh new file mode 100644 index 0000000..fae8c95 --- /dev/null +++ b/bump_version.sh @@ -0,0 +1,102 @@ +#!/bin/bash +# 2024 Nicolas Gampierakis. + +# Applies semantic versioning across project + +DIRECTORY="" +VERBOSE=0 +BRANCH="" + +DisplayHelp() { + intro_tag="$(basename "$0") [-h] -- semantic versioning tool" + options="OPTIONS + -h, --help Display help. + -d, --directory [path] Path to target directory, relative to current + working directory. + -v, --verbose Verbosity flag. + " + printf "\n%s\n\n%s\n" "$intro_tag" "$options" +} + +####################################### +# Get project version number +# +# Arguments: +# Keyword for version number in file. +# File path. +####################################### +get_version_number() { + match_string="${1}" + file_name="${2}" + version_number=$(grep -oP '\b'"${match_string}"'\s*=\s*"\K.*?(?=")' "${file_name}") +} + +####################################### +# Set project version number +# +# Arguments: +# Project root directory. +####################################### +set_version_number() { + toml_file="${1}pyproject.toml" + docs_file="${1}docs/source/conf.py" + version_number="" + get_version_number "version" "${toml_file}" + current_py_version="${version_number}" + get_version_number "release" "${docs_file}" + current_docs_version="${version_number}" + current_version="${current_py_version}" + + new_version=${BRANCH#"release-"} + if [ "${new_version}" != "${current_version}" ]; then + printf "%s\n" "Current branch: ${BRANCH}" >&2 + printf "%s\n" "Previous version number: ${current_version}" >&2 + printf "%s\n" "New version number: ${new_version}" >&2 + sed -i "s/${current_py_version}/${new_version}/g" "${toml_file}" + sed -i "s/${current_docs_version}/${new_version}/g" "${docs_file}" + git add "${toml_file}" "${docs_file}" + git commit -m "build: bump version number to ${new_version}" + else + printf "%s\n" "Current and new version numbers are identical: ${current_version}" >&2 + fi +} + +ARGS=$(getopt -o "hd:v" --long "help,directory:,verbose" -- "$@") || exit +eval "set -- $ARGS" +while true; do + case $1 in + -h | --help) + DisplayHelp + exit 0 + ;; + -d | --directory) + DIRECTORY=$2 + shift 2 + ;; + -v | --verbose) + ((VERBOSE++)) + shift + ;; + --) + shift + break + ;; + *) exit 1 ;; # error + esac +done +remaining=("$@") + +if [[ ! $DIRECTORY ]]; then + DIRECTORY="${PWD}/" +else + DIRECTORY="${PWD}/${DIRECTORY}" +fi +readonly DIRECTORY + +BRANCH="$(git rev-parse --abbrev-ref HEAD)" +if [[ "$BRANCH" != *"release-"* ]]; then + echo "Please switch to a release branch." + exit 1 +fi + +set_version_number "${DIRECTORY}"