#!/bin/sh set -efu # the list of files that need to have the version updated in them # # limitations: # * no newlines in names # * no ' char in names files=" README.md kotlinx-coroutines-core/README.md kotlinx-coroutines-debug/README.md kotlinx-coroutines-test/README.md ui/coroutines-guide-ui.md gradle.properties integration-testing/gradle.properties " # read gradle.properties to get the old version set +e old_version="$(git grep -hoP '(?<=^version=).*(?=-SNAPSHOT$)' gradle.properties)" set -e if [ "$?" -ne 0 ] then echo "Could not read the old version from gradle.properties." >&2 if [ "$#" -ne 2 ] then echo "Please use this form instead: ./bump-version.sh old_version new_version" exit 1 fi fi # check the command-line arguments for mentions of the version if [ "$#" -eq 2 ] then echo "If you want to infer the version automatically, use the form: ./bump-version.sh new_version" >&2 if [ -n "$old_version" -a "$1" != "$old_version" ] then echo "The provided old version ($1) is different from the one in gradle.properties ($old_version)." >&2 echo "Proceeding anyway with the provided old version." >&2 fi old_version=$1 new_version=$2 elif [ "$#" -eq 1 ] then new_version=$1 else echo "Use: ./bump-version.sh new_version" >&2 exit 1 fi # Escape dots, e.g. 1.0.0 -> 1\.0\.0 escaped_old_version="$(printf "%s\n" "$old_version" | sed 's/[.]/\\./g')" update_version() { file=$1 to_undo=$2 echo "Updating version from '$old_version' to '$new_version' in $1" >&2 if [ -n "$(git diff --name-status -- "$file")" ] then printf "There are unstaged changes in '$file'. Refusing to proceed.\n" >&2 [ -z "$to_undo" ] || eval "git checkout$to_undo" exit 1 fi sed -i.bak "s/$escaped_old_version/$new_version/g" "$file" rm -f "$1.bak" } to_undo=$(printf "%s" "$files" | while read -r file; do if [ -n "$file" ] then update_version "$file" "${to_undo:-}" to_undo="${to_undo:-} '$file'" echo -n " '$file'" fi done) set +e version_mentions=$( find . -type f \( -iname '*.properties' -o -iname '*.md' \) \ -not -iname CHANGES.md -not -iname CHANGES_UP_TO_1.7.md \ -not -path ./integration/kotlinx-coroutines-jdk8/README.md \ -exec git grep --fixed-strings --word "$old_version" {} + ) set -e if [ -z "$version_mentions" ] then echo "Done. To undo, run this command:" >&2 printf "git checkout%s\n" "$to_undo" >&2 else echo "ERROR: Previous version is present in the project: $version_mentions" [ -z "$to_undo" ] || eval "git checkout$to_undo" exit 1 fi