From 267ac5dd028a04c9867225c3008816ce0efa1b44 Mon Sep 17 00:00:00 2001 From: Alex Boten Date: Sun, 26 Apr 2020 22:21:18 -0700 Subject: [PATCH 1/2] adding script and workflow to prepare releases --- .github/workflows/prepare-release.yml | 27 +++++++++ scripts/prepare_release.sh | 80 +++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 .github/workflows/prepare-release.yml create mode 100755 scripts/prepare_release.sh diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml new file mode 100644 index 00000000000..7d15b02bed3 --- /dev/null +++ b/.github/workflows/prepare-release.yml @@ -0,0 +1,27 @@ +name: prepare-release +on: + push: + branch: [ 'release/*' ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Get the version + id: get_version + run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} + + - name: Prepare the release + id: update + run: | + ./scripts/prepare_release.sh ${{ steps.get_version.outputs.VERSION }} + + - name: Create Pull Request + id: create-pr + uses: peter-evans/create-pull-request@v2.7.0 + with: + branch: ${{ steps.get_version.outputs.VERSION }}-auto + title: '[pre-release] Update changelogs, version [${{ steps.get_version.outputs.VERSION }}]' + if: ${{ steps.update.outputs.version_updated == 1 }} diff --git a/scripts/prepare_release.sh b/scripts/prepare_release.sh new file mode 100755 index 00000000000..0b564a00234 --- /dev/null +++ b/scripts/prepare_release.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# +# This script: +# 1. parses the version number from the branch name +# 2. updates version.py files to match that version +# 3. iterates through CHANGELOG.md files and updates any files containing +# unreleased changes +# 4. sets the output variable 'version_updated' to determine whether +# the github action to create a pull request should run. this allows +# maintainers to merge changes back into the release branch without +# trigerring unnecessary pull requests +# + +VERSION=`echo $1 | awk -F "/" '{print $NF}'` +echo "Using version ${VERSION}" + +# check the version matches expected versioning e.g +# 0.6, 0.6b, 0.6b0, 0.6.0 +if [[ ! "${VERSION}" =~ ^([0-9])(\.*[0-9]{1,5}[a-b]*){1,3}$ ]]; then + echo "Version number invalid: $VERSION" + exit 1 +fi + +function update_version_file() { + errors=0 + for f in `find . -name version.py`; do + # check if version is already in version.py + grep -q ${VERSION} $f; + rc=$? + if [ $rc == 0 ]; then + errors=1 + echo "${f} already contains ${VERSION}" + continue + fi + # update version.py + perl -i -pe "s/__version__.*/__version__ = \"${VERSION}\"/g" ${f}; + git add ${f}; + echo "Updating ${f}" + done + if [ ${errors} != 0 ]; then + echo "::set-output name=version_updated::0" + exit 0 + fi +} + +function update_changelog() { + errors=0 + for f in `find . -name CHANGELOG.md`; do + # check if version is already in CHANGELOG + grep -q ${VERSION} $f; + rc=$? + if [ $rc == 0 ]; then + errors=1 + echo "${f} already contains ${VERSION}" + continue + fi + # check if changelog contains any new details + changes=`sed -n '/## Unreleased/,/^##/p' ${f} | grep -v '^##' | wc -w | awk '{$1=$1;print}'` + if [ ${changes} != "0" ]; then + # update CHANGELOG.md + perl -i -pe 's/## Unreleased.*/## Unreleased\n\n## '${VERSION}'/' ${f}; + git add ${f}; + echo "Updating ${f}" + else + echo "Skipping ${f}, no changes detected" + fi + done + if [ ${errors} != 0 ]; then + echo "::set-output name=version_updated::0" + exit 0 + fi +} + +update_version_file +update_changelog + +git config --local user.email "action@github.com" +git config --local user.name "GitHub Action" +git commit -m "updating changelogs and version to ${VERSION}" +echo "::set-output name=version_updated::1" \ No newline at end of file From 3b26bb6912faa1c42b41c5e873a329621c28751b Mon Sep 17 00:00:00 2001 From: alrex Date: Mon, 11 May 2020 13:10:21 -0700 Subject: [PATCH 2/2] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mauricio Vásquez --- scripts/prepare_release.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/prepare_release.sh b/scripts/prepare_release.sh index 0b564a00234..23dd038b40a 100755 --- a/scripts/prepare_release.sh +++ b/scripts/prepare_release.sh @@ -8,7 +8,7 @@ # 4. sets the output variable 'version_updated' to determine whether # the github action to create a pull request should run. this allows # maintainers to merge changes back into the release branch without -# trigerring unnecessary pull requests +# triggering unnecessary pull requests # VERSION=`echo $1 | awk -F "/" '{print $NF}'` @@ -77,4 +77,4 @@ update_changelog git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git commit -m "updating changelogs and version to ${VERSION}" -echo "::set-output name=version_updated::1" \ No newline at end of file +echo "::set-output name=version_updated::1"