X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=python-eventlet%2Fbin%2Frelease;h=49d1082bce6f113ee03e04d55083d15ae411ed00;hb=refs%2Ftags%2Fmos-9.0;hp=6480e7a5407cea7995fe6610fd2b289b3702a881;hpb=358bd9258c2b6d2ee74de4dfd07a5123107abad4;p=packages%2Ftrusty%2Fpython-eventlet.git diff --git a/python-eventlet/bin/release b/python-eventlet/bin/release index 6480e7a..49d1082 100755 --- a/python-eventlet/bin/release +++ b/python-eventlet/bin/release @@ -3,46 +3,158 @@ cd "$( dirname "${BASH_SOURCE[0]}" )/.." if [[ ! -d venv-release ]]; then virtualenv venv-release echo '*' >venv-release/.gitignore - venv-release/bin/pip install wheel sphinx + venv-release/bin/pip install -U pip setuptools sphinx wheel fi . $PWD/venv-release/bin/activate pip install -e $PWD +version= +version_next= + main() { branch="${1-$(git symbolic-ref --short HEAD)}" version="$(python -c 'import eventlet; print(eventlet.__version__)')" - printf "branch: %s version: '%s'\n" $branch $version >&2 + printf "\nbranch: %s eventlet.__version__: '%s'\n" $branch $version >&2 if [[ "$branch" != "master" ]]; then echo "Must be on master" >&2 exit 1 fi if [[ -n "$(git status --short -uall)" ]]; then - echo "Tree must be clean" >&2 + echo "Tree must be clean. git status:" >&2 + echo "" >&2 + git status --short -uall + echo "" >&2 exit 1 fi + last_commit_message=$(git show --format="%s" --no-patch HEAD) + expect_commit_message="v$version release" + if [[ "$last_commit_message" != "$expect_commit_message" ]]; then + printf "Last commit message: '%s' expected: '%s'\n" "$last_commit_message" "$expect_commit_message" >&2 + if confirm "Create release commit? [yN] "; then + create_commit + elif ! confirm "Continue without proper release commit? [yN] "; then + exit 1 + fi + fi confirm "Continue? [yN] " || exit 1 + echo "Creating tag v$version" >&2 if ! git tag "v$version"; then - echo "tag failed" >&2 + echo "git tag failed " >&2 confirm "Continue still? [yN] " || exit 1 fi + if confirm "Build documentation (website)? [Yn] " >&2; then + bin/build-website.bash || exit 1 + fi + if confirm "Upload to PyPi? [Yn] "; then rm -rf build dist - python setup.py sdist bdist_wheel register upload + python setup.py sdist bdist_wheel register upload || exit 1 fi - bin/build-website.bash - - git push origin master + git push --verbose origin master gh-pages || exit 1 git push --tags - git push origin gh-pages +} + +create_commit() { + echo "" >&2 + echo "Plan:" >&2 + echo "1. bump version" >&2 + echo "2. update NEWS, AUTHORS" >&2 + echo "3. commit" >&2 + echo "4. run bin/release again" >&2 + echo "" >&2 + + bump_version + edit_news + + git diff + confirm "Ready to commit? [Yn] " || exit 1 + git commit -a -m "v$version_next release" + + echo "Re-exec $0 to continue" >&2 + exec $0 +} + +bump_version() { + local current=$version + echo "Current version: '$current'" >&2 + echo -n "Enter next version (empty to abort): " >&2 + read version_next + if [[ -z "$version_next" ]]; then + exit 1 + fi + echo "Next version: '$version_next'" >&2 + + local current_tuple="${current//./, }" + local next_tuple="${version_next//./, }" + local version_path="eventlet/__init__.py" + echo "Updating file '$version_path'" >&2 + if ! sed -i '' -e "s/($current_tuple)/($next_tuple)/" "$version_path"; then + echo "sed error $?" >&2 + exit 1 + fi + if git diff --exit-code "$version_path"; then + echo "File '$version_path' is not modified" >&2 + exit 1 + fi + echo "" >&2 + + local doc_path="doc/real_index.html" + echo "Updating file '$doc_path'" >&2 + if ! sed -i '' -e "s/$current/$version_next/g" "$doc_path"; then + echo "sed error $?" >&2 + exit 1 + fi + if git diff --exit-code "$doc_path"; then + echo "File '$doc_path' is not modified" >&2 + exit 1 + fi + echo "" >&2 + + confirm "Confirm changes? [yN] " || exit 1 +} + +edit_news() { + echo "Changes since last release:" >&2 + git log --format='%h %an %s' "v$version"^.. -- || exit 1 + echo "" >&2 + + local editor=$(which edit 2>/dev/null) + [[ -z "$editor" ]] && editor="$EDITOR" + if [[ -n "$editor" ]]; then + if confirm "Open default editor for NEWS and AUTHORS? [Yn] "; then + $editor NEWS + $editor AUTHORS + else + confirm "Change files NEWS and AUTHORS manually and press any key" + fi + else + echo "Unable to determine default text editor." >&2 + confirm "Change files NEWS and AUTHORS manually and press any key" + fi + echo "" >&2 + + if git diff --exit-code NEWS AUTHORS; then + echo "Files NEWS and AUTHORS are not modified" >&2 + exit 1 + fi + echo "" >&2 + + confirm "Confirm changes? [yN] " || exit 1 } confirm() { - read -n1 -p "$1" reply - echo "" + local reply + local prompt="$1" + read -n1 -p "$prompt" reply >&2 + echo "" >&2 rc=0 + local default_y=" \[Yn\] $" + if [[ -z "$reply" ]] && [[ "$prompt" =~ $default_y ]]; then + reply="y" + fi [[ "$reply" != "y" ]] && rc=1 return $rc }