2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-22 09:57:41 +00:00
kea/tools/bump-lib-versions.sh

163 lines
5.2 KiB
Bash
Raw Normal View History

2020-11-21 13:21:37 +02:00
#!/bin/sh
2023-03-24 23:51:18 +01:00
# Copyright (C) 2020-2023 Internet Systems Consortium, Inc. ("ISC")
2020-11-21 13:21:37 +02:00
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Usage:
#
# ./tools/bump-lib-versions.sh Kea-1.9.1 Kea-1.9.2
set -eu
# Define some ANSI color codes.
if test -t 1; then
red='\033[91m'
reset='\033[0m'
else
red=
reset=
fi
# Print usage.
# Expressions don't expand in single quotes, use double quotes for that. [SC2016]
# shellcheck disable=SC2016
print_usage() {
printf \
'Usage: %s {{options}} $old_release_tag $new_release_tag
Options:
[-d|--debug] enable debug mode, showing every executed command
[-h|--help] print usage (this text)
Example:
./tools/bump_lib_versions.sh Kea-1.9.1 Kea-1.9.2
' \
"$(basename "${0}")"
}
error() {
printf "${red}ERROR: %s${reset}\\n" "${1}" 1>&2
print_usage
exit 1
}
# Parse parameters.
while test ${#} -gt 0; do
case "${1}" in
# [-d|--debug] enable debug mode, showing every executed command
'-d'|'--debug') set -vx ;;
# [-h|--help] print usage (this text).
'-h'|'--help') print_usage; exit 0 ;;
*)
test -z "${old_release_tag+x}" && old_release_tag=${1} && shift && continue
test -z "${new_release_tag+x}" && new_release_tag=${1} && shift && continue
# Unrecognized argument
error "Unrecognized argument '${1}'" ;;
esac; shift
done
# Check for mandatory arguments.
# Expressions don't expand in single quotes, use double quotes for that. [SC2016]
# shellcheck disable=SC2016
test -z "${old_release_tag+x}" && error '$old_release_tag is mandatory'
# shellcheck disable=SC2016
test -z "${new_release_tag+x}" && error '$new_release_tag is mandatory'
is_stable_release() {
2020-12-11 20:50:25 +02:00
version_number=$(printf '%s' "${1}" | cut -d . -f2)
if test $((version_number % 2)) -eq 0; then
2020-11-21 13:21:37 +02:00
return 0
else
return 1
fi
}
find_latest_stable_release_tag() {
2020-12-11 20:50:25 +02:00
tag_pattern=${1}
2020-11-21 13:21:37 +02:00
for version in $(git tag | grep -F "${tag_pattern}" | tac); do
2020-12-07 22:25:28 +02:00
if is_stable_release "${version}"; then
2020-11-21 13:21:37 +02:00
printf '%s' "${version}"
return
fi
done
}
is_old_tag_stable_release=$(is_stable_release "${old_release_tag}" && printf true || printf false)
is_new_tag_stable_release=$(is_stable_release "${new_release_tag}" && printf true || printf false)
# if any file has changed in a specific library director
# there are 4 possible cases
# 1. old release is stable and new release is stable
# new_version = old_version + 1 (only for updated libs)
2020-11-21 13:21:37 +02:00
# 2. old release is stable and new release is development
# new_version = old_version + 1 (only for updated libs) and + 10 (for all libs)
2020-11-21 13:21:37 +02:00
# 3. old release is development and new release is development
# new_version = old_version + 1 (only for updated libs)
2020-11-21 13:21:37 +02:00
# 4. old release is development and new release is stable
# new_version = old_version + 1 (only for updated libs)
2020-11-21 13:21:37 +02:00
# Get root path.
root_path=$(cd "$(dirname "${0}")/.." && pwd)
cd "${root_path}"
# Check if there are any unstaged changes.
diff=$(git diff 2>&1)
if test -n "${diff}"; then
printf 'ERROR: stage changes for %s before running this script\n' "${root_path}" >&2
2020-11-21 13:21:37 +02:00
exit 1
fi
increment_extra=10
increment=1
major=$(echo "${new_release_tag}" | cut -d '-' -f 2 | cut -d '.' -f 1)
middle=$(echo "${new_release_tag}" | cut -d '-' -f 2 | cut -d '.' -f 2)
minor=$(echo "${new_release_tag}" | cut -d '-' -f 2 | cut -d '.' -f 3)
new_hooks_version="${major}$(printf '%02d' "${middle}")$(printf '%02d' "${minor}")"
2020-11-27 18:10:49 +02:00
2020-12-07 22:25:28 +02:00
sed -i "s/^\/\/ Version .* of the hooks framework, set for Kea .*/\/\/ Version ${new_hooks_version} of the hooks framework, set for $(echo "${new_release_tag}" | tr '-' ' ')/" "src/lib/hooks/hooks.h"
2020-11-27 18:10:49 +02:00
sed -i "s/KEA_HOOKS_VERSION.*/KEA_HOOKS_VERSION = ${new_hooks_version};/" "src/lib/hooks/hooks.h"
2021-03-26 13:51:56 +02:00
for lib in $(git diff --name-only "${old_release_tag}" src/lib | cut -d '/' -f 3 | sort -uV); do
# Skip over files and anything that is not a directory.
if test ! -d "src/lib/${lib}"; then
continue
fi
old_version=$(grep -- '-version-info' "src/lib/${lib}/Makefile.am" | tr -s ' ' | rev | cut -d ' ' -f 1 | rev | cut -d ':' -f 1)
2020-11-21 13:21:37 +02:00
new_version=$((old_version + increment))
sed -i "s/version-info .*/version-info ${new_version}:0:0/" "src/lib/${lib}/Makefile.am"
done
if ! ${is_new_tag_stable_release} && ${is_old_tag_stable_release}; then
for lib in $(find 'src/lib' -mindepth 1 -maxdepth 1 -type d | cut -d '/' -f 3 | sort -uV); do
# Skip over files and anything that is not a directory.
if test ! -d "src/lib/${lib}"; then
continue
fi
old_version=$(grep -- '-version-info' "src/lib/${lib}/Makefile.am" | tr -s ' ' | rev | cut -d ' ' -f 1 | rev | cut -d ':' -f 1)
new_version=$((old_version + increment_extra))
sed -i "s/version-info .*/version-info ${new_version}:0:0/" "src/lib/${lib}/Makefile.am"
done
fi
if ${is_new_tag_stable_release}; then
release='stable'
else
release='development'
fi
(echo "\
TODO. [build] TODO
The library version numbers have been bumped up for the Kea ${major}.${middle}.${minor}
${release} release.
(Gitlab #TODO)
" && cat ./ChangeLog) > ./ChangeLog.tmp
mv ./ChangeLog.tmp ./ChangeLog