1
0
mirror of https://github.com/pacoorozco/ssham.git synced 2025-09-21 09:42:01 +03:00
Files
ssham/utils/bumpversion.sh
pacoorozco 62e128102a Added script to bump versions
Signed-off-by: pacoorozco <paco@pacoorozco.info>
2020-06-23 12:40:16 +02:00

174 lines
4.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Copyright (c) 2016 Paco Orozco <paco@pacoorozco.info>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# ----------------------------------------------------------------------
# This is a utility script for bumping the version on the Gamify
# application. It uses `sed` to update the version variable in the
# version file(s).
#
# NOTE: see the usage text for additional information regarding version
# numbers.
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# DO NOT MODIFY BEYOND THIS LINE
# ----------------------------------------------------------------------
# Program name and version
PN=$(basename "$0")
VER='0.4'
# Root directory where files reside in
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# ----------------------------------------------------------------------
# Functions
# ----------------------------------------------------------------------
usage() {
cat <<-EndUsage
Bump the version of Gamify!
version ${VER}
usage: ${PN} [-h|--help] part
Arguments:
part (required)
The part of the version to increase, e.g. minor.
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.
The new VERSION will be updated in two files:
config/app.php
CHANGELOG.md
Options:
-h, --help Prints usage and help.
EndUsage
}
print_finish_release_note() {
#
# Get the current branch name
#
local _current_branch
_current_branch=$(git rev-parse --abbrev-ref HEAD)
#
# Get last commit messages
#
local _last_commits
_last_commits=$(git log "v${current_version}..HEAD" --pretty=format:'* %B' --no-merges --reverse | cat)
cat <<-EndFinishReleaseNote
Remember to:
1. Update CHANGELOG.md
${_last_commits}
2. Commit changes:
$ git commit -s -m "Bump version ${current_version} -> ${new_version}" config/app.php CHANGELOG.md
3. Tag the tree:
$ git tag -s -m "Version ${new_version}" v${new_version}
$ git push origin ${_current_branch} --tags
4. Go to GitHub, create a PR and merge to the master branch:
5. Update any development branch:
$ git checkout ${_current_branch}
$ git merge --no-ff ${_current_branch}
EndFinishReleaseNote
}
get_new_version_number() {
#
# Set new version
#
case $1 in
major) new_version=$(echo "${current_version}" | awk -F. '{ printf ("%d.%d.%d\n", $1 + 1, 0, 0); }') ;;
minor) new_version=$(echo "${current_version}" | awk -F. '{ printf ("%d.%d.%d\n", $1, $2 + 1, 0); }') ;;
patch) new_version=$(echo "${current_version}" | awk -F. '{ printf ("%d.%d.%d\n", $1, $2, $3 + 1); }') ;;
esac
}
get_current_version_number() {
#
# Get current version from config/app.php
#
current_version=$(grep "'version' => '\(.*\)'" "${ROOT_DIR}/config/app.php" |
head -1 |
awk '{ print $3 }' | sed "s/[',]//g")
}
bump_version() {
#
# Format the current date for the README header
#
local _date
_date=$(date '+%Y-%m-%d')
echo -e "Bump version: ${current_version} -> ${new_version}\n"
# Update version number on config/app.php
sed -i "${ROOT_DIR}/config/app.php" -e "s/'version' => '\(.*\)'/'version' => '${new_version}'/g"
# Create a new section on CHANGELOG
sed -i "${ROOT_DIR}/CHANGELOG.md" -e "s/^## Unreleased/## Unreleased\n\n## ${new_version} - ${_date}\n/g"
}
# ----------------------------------------------------------------------
# Main
# ----------------------------------------------------------------------
get_current_version_number
if [[ -z "${current_version}" ]]; then
echo "ERROR: Can't determine the current version."
exit 1
fi
case $1 in
-h | --help)
usage
;;
major | minor | patch)
if [[ -n "$(git status -s -uno)" ]]; then
echo 'ERROR: Uncommitted changes in repository. Commit before bump version' 1>&2
exit 1
fi
get_new_version_number "$1"
bump_version
print_finish_release_note
;;
*)
echo "ERROR: You have failed to specify what to do correctly. Use '${PN} --help' for more information."
exit 1
;;
esac
exit 0