diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 81e357f149..cc62b0c6b4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -127,7 +127,8 @@ the command `make release` do all this automatically, the version is at `version/version.go` and the description at `version/description`. So the step would be: - - Change version/version.go and versions/description + - Prepare a release calling `make prepare-(patch|minor|major)` + - Edit version/description to set a description and order commits - Create a PR to review it - Merge it to master - Call `make release` from master diff --git a/Makefile b/Makefile index 7c0494c636..debf8fdc30 100644 --- a/Makefile +++ b/Makefile @@ -173,6 +173,13 @@ $(description): version/description sed "s#HANDLER_IMAGE#$(HANDLER_IMAGE)#" \ version/description > $@ +prepare-patch: + ./hack/prepare-release.sh patch +prepare-minor: + ./hack/prepare-release.sh minor +prepare-major: + ./hack/prepare-release.sh major + # This uses target specific variables [1] so we can use push-handler as a # dependency and change the SUFFIX with the correct version so no need for # calling make on make is needed. diff --git a/hack/bump-version.sh b/hack/bump-version.sh new file mode 100755 index 0000000000..9dbce663da --- /dev/null +++ b/hack/bump-version.sh @@ -0,0 +1,32 @@ +#!/bin/bash -e + +expected_types="(major|minor|patch)" +current_type=$1 + +bump() { + version=$(hack/version.sh) + version_part=$(echo $version |sed $1) + version_part=$((++version_part)) + version=$(echo $version | sed $2 | sed "s/version_part/$version_part/g") + ./hack/version.sh $version +} + +bump_major() { + bump "s/^v\(.*\)[.].*[.].*$/\1/g" "s/^v\(.*\)[.]\(.*\)[.]\(.*\)$/version_part.\2.\3/g" +} + +bump_minor() { + bump "s/^v.*[.]\(.*\)[.].*$/\1/g" "s/^v\(.*\)[.]\(.*\)[.]\(.*\)$/\1.version_part.\3/g" +} + +bump_patch() { + bump "s/^v.*[.].*[.]\(.*\)$/\1/g" "s/^v\(.*\)[.]\(.*\)[.]\(.*\)$/\1.\2.version_part/g" +} + +if [[ ! $current_type =~ $expected_types ]]; then + echo "Usage: $0 $expected_types" + exit 1 +fi + +bump_$current_type +hack/version.sh diff --git a/hack/prepare-release.sh b/hack/prepare-release.sh new file mode 100755 index 0000000000..1c2678c82c --- /dev/null +++ b/hack/prepare-release.sh @@ -0,0 +1,34 @@ +#!/bin/bash -e +version_type=$1 +old_version=$(hack/version.sh) +new_version=$(hack/bump-version.sh $version_type) +commits=$(git log --pretty=format:"* %s" $old_version..HEAD) + + +cat << EOF > version/description +$new_version + +TODO: Add description here + + +TODO: keep at every category the + commits that make sense + +Features: +$commits + +Bugs: +$commits + +Docs: +$commits + +\`\`\` +docker pull HANDLER_IMAGE +\`\`\` +EOF + +${EDITOR:-vi} version/description + +git checkout -b release-$new_version +git commit -a -s -m "Release $new_version" diff --git a/hack/version.sh b/hack/version.sh index a967c4a391..6b45042e71 100755 --- a/hack/version.sh +++ b/hack/version.sh @@ -1,2 +1,9 @@ #!/bin/bash -e -grep = version/version.go | sed -r 's/.*= \"(.*)"$$/v\1/g' +version_file=version/version.go +# If we don't pass a version just show current one +if [ -z "$1" ]; then + grep = $version_file | sed -r 's/.*= \"(.*)"$$/v\1/g' +# else change it +else + sed -i "s/= \".*\"$/= \"$1\"/g" $version_file +fi