From 9f26e1d22b3dd9371ecf7c90363849cb2dda5b85 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 09:08:07 +0200 Subject: [PATCH 01/14] dynamicaly determin version based on git history --- hydromt/__init__.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/hydromt/__init__.py b/hydromt/__init__.py index 6be7ef6b9..9e93cff26 100644 --- a/hydromt/__init__.py +++ b/hydromt/__init__.py @@ -1,7 +1,5 @@ """HydroMT: Automated and reproducible model building and analysis.""" -# version number without 'v' at start -__version__ = "0.8.1.dev0" # Set environment variables (this will be temporary) # to use shapely 2.0 in favor of pygeos (if installed) @@ -17,6 +15,8 @@ # required for accessor style documentation +from subprocess import run + from xarray import DataArray, Dataset # submodules @@ -26,3 +26,24 @@ # high-level methods from .models import * + + +def _run_clean(s: str) -> str: + return ( + run(s.split(" "), capture_output=True) + .stdout.decode("utf-8") + .strip() + .split("\n") + ) + + +last_release = _run_clean("git tag --list")[-1] + +last_release_sha = _run_clean(f"git rev-list -n 1 {last_release}") + +num_commits_since_release = ( + len(_run_clean(f"git rev-list {last_release_sha}..main")) + 1 +) + +# version number without 'v' at start +__version__ = f"0.8.1.dev{num_commits_since_release}" From 9c67ed5d1fc36736f049ef7db129a0e24e7e8d0e Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 09:41:47 +0200 Subject: [PATCH 02/14] create fallback mechanism for if git is not available --- hydromt/__init__.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hydromt/__init__.py b/hydromt/__init__.py index 9e93cff26..e8b2117dc 100644 --- a/hydromt/__init__.py +++ b/hydromt/__init__.py @@ -37,13 +37,18 @@ def _run_clean(s: str) -> str: ) -last_release = _run_clean("git tag --list")[-1] +base_version = "0.8.1" -last_release_sha = _run_clean(f"git rev-list -n 1 {last_release}") +try: + last_release = _run_clean("git tag --list")[-1] -num_commits_since_release = ( - len(_run_clean(f"git rev-list {last_release_sha}..main")) + 1 -) + last_release_sha = _run_clean(f"git rev-list -n 1 {last_release}") -# version number without 'v' at start -__version__ = f"0.8.1.dev{num_commits_since_release}" + num_commits_since_release = ( + len(_run_clean(f"git rev-list {last_release_sha}..main")) + 1 + ) + + # version number without 'v' at start + __version__ = f"{base_version}.dev{num_commits_since_release}" +except Exception: + __version__ = base_version From 3b253ae987aa9dbdc4fa685af66e652d09ddbb66 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 09:49:51 +0200 Subject: [PATCH 03/14] update changelog --- docs/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index d8a07cbfb..d16876400 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -11,7 +11,7 @@ Unreleased Added ----- -- +- Versions of HydroMT between releases are now set dynamically based on the number of commits since the last release. (#455) Changed ------- From 7001086430d9616ede53e6b8ccc9681676ea518b Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 10:34:11 +0200 Subject: [PATCH 04/14] reorder __init__ to fix circular import --- hydromt/__init__.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/hydromt/__init__.py b/hydromt/__init__.py index e8b2117dc..dffa19a07 100644 --- a/hydromt/__init__.py +++ b/hydromt/__init__.py @@ -4,28 +4,9 @@ # Set environment variables (this will be temporary) # to use shapely 2.0 in favor of pygeos (if installed) import os - -os.environ["USE_PYGEOS"] = "0" - -# pkg_resource deprication warnings originate from dependencies -# so silence them for now -import warnings - -warnings.filterwarnings("ignore", category=DeprecationWarning) - - -# required for accessor style documentation from subprocess import run -from xarray import DataArray, Dataset - -# submodules -from . import cli, flw, raster, stats, vector, workflows -from .data_catalog import * -from .io import * - -# high-level methods -from .models import * +os.environ["USE_PYGEOS"] = "0" def _run_clean(s: str) -> str: @@ -52,3 +33,21 @@ def _run_clean(s: str) -> str: __version__ = f"{base_version}.dev{num_commits_since_release}" except Exception: __version__ = base_version + +# pkg_resource deprication warnings originate from dependencies +# so silence them for now +import warnings + +warnings.filterwarnings("ignore", category=DeprecationWarning) + + +# required for accessor style documentation +from xarray import DataArray, Dataset + +# submodules +from . import cli, flw, raster, stats, vector, workflows +from .data_catalog import * +from .io import * + +# high-level methods +from .models import * From 03a5276487501c5f3309766d53b2cad53a444fc6 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 16:01:39 +0200 Subject: [PATCH 05/14] move solution to GHA on review approve --- .github/workflows/docs.yml | 2 +- .github/workflows/update_dev_version.yml | 28 ++++++++++++++++++++++++ hydromt/__init__.py | 26 +--------------------- 3 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/update_dev_version.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c1416e23f..2d6b179bc 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -24,7 +24,7 @@ on: jobs: # Build docs on Linux - Docs: + docs: timeout-minutes: 10 name: linux docs runs-on: ubuntu-latest diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml new file mode 100644 index 000000000..6d87e97d0 --- /dev/null +++ b/.github/workflows/update_dev_version.yml @@ -0,0 +1,28 @@ + +on: + pull_request_review: + types: + - submitted + workflow_dispatch: + + +jobs: + update_version: + if: github.event.review.state == 'approved' + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v3 + - name: configure git + run: | + git config user.name "GitHub Actions Bot" + git config user.email "<>" + - name: update version + run: | + last_release=$(git tag --list | tail -n 1) + num_commits_since_release=$(($(git rev-list $last_release..main | wc -l) + 1 )) + sed -i "s/__version__\s*=\s*\"(\d+\.\d+\.\d+).dev(\d+)\"/__version__ = \"$1.dev$num_commits_since_release\"/" hydromt/__init__.py + git add hydromt/__init__.py + git commit -m "update version" + git push origin ${{ github.ref_name}} -f + gh pr comment ${{ github.ref_name }} -b "I've updated the version for you. Feel free to merge now!" diff --git a/hydromt/__init__.py b/hydromt/__init__.py index dffa19a07..c5b74ddc8 100644 --- a/hydromt/__init__.py +++ b/hydromt/__init__.py @@ -4,35 +4,11 @@ # Set environment variables (this will be temporary) # to use shapely 2.0 in favor of pygeos (if installed) import os -from subprocess import run os.environ["USE_PYGEOS"] = "0" +__version__ = "0.8.1.dev0" -def _run_clean(s: str) -> str: - return ( - run(s.split(" "), capture_output=True) - .stdout.decode("utf-8") - .strip() - .split("\n") - ) - - -base_version = "0.8.1" - -try: - last_release = _run_clean("git tag --list")[-1] - - last_release_sha = _run_clean(f"git rev-list -n 1 {last_release}") - - num_commits_since_release = ( - len(_run_clean(f"git rev-list {last_release_sha}..main")) + 1 - ) - - # version number without 'v' at start - __version__ = f"{base_version}.dev{num_commits_since_release}" -except Exception: - __version__ = base_version # pkg_resource deprication warnings originate from dependencies # so silence them for now From 62c215e0aa9b7d29adb70356502a542a697db83e Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 16:10:45 +0200 Subject: [PATCH 06/14] update docs with reminder to squash merge --- docs/dev/contributing.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/dev/contributing.rst b/docs/dev/contributing.rst index b192f0ba9..ae43e6081 100644 --- a/docs/dev/contributing.rst +++ b/docs/dev/contributing.rst @@ -37,7 +37,9 @@ If you found a bug or an issue you would like to tackle or contribute to a new d 4. Update docs/changelog.rst file with a summary of your changes and a link to your pull request. See for example the `hydromt changelog `_. 5. Push your commits to the github repository and open a draft pull request. The body of the pull request will be pre-filled with a template. Please fill out this template with the relevant information, and complete the checklist included. 6. Once you're satisfied with the changes mark the pull request as "as ready for review" and ask another contributor to review the code. The review should cover the implementation as well as steps 2-4. -7. Merge the pull request once the review has been approved. +7. Once your request has been approved, a bot will add a commit to your branch to automatically update the version number. Please wait for this to complete before you merge. Once it is done, a comment saying "You're free to merge now" will be added to your PR. +8. Note that if you want to make changes after this commit has been added, you should pull the branch first to avoid merge conflicts. +9. You are now free to merge your pull request. Do merge with a `squash` commit!! This is important to make sure the version counting stays accurate. .. _git-conventions: @@ -181,7 +183,7 @@ It's telling us we first need to tell it what we want to do with the current con Success! This is a simple introduction into a potentially very complicated subject. You can read more about the different possibilities here: -* `Merge Conflicts `_ +* `Merge Conflicts `_ * `Merge Strategies `_ From 40f183a4dc7907c24eda128d6681c2394fdffe36 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 16:19:33 +0200 Subject: [PATCH 07/14] update docs --- docs/changelog.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index d16876400..16f10325a 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -11,7 +11,7 @@ Unreleased Added ----- -- Versions of HydroMT between releases are now set dynamically based on the number of commits since the last release. (#455) +- Versions of HydroMT between releases are now updated automatically when the PR is approved. (#455) Changed ------- From 24df278b178366b4f7aea214e71d32e1556e5d42 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 18:16:48 +0200 Subject: [PATCH 08/14] update workflow based on off-screen testing --- .github/workflows/update_dev_version.yml | 47 ++++++++++++++---------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml index 6d87e97d0..f1280dff7 100644 --- a/.github/workflows/update_dev_version.yml +++ b/.github/workflows/update_dev_version.yml @@ -1,28 +1,35 @@ +name: Update Version on: pull_request_review: - types: - - submitted + types: [submitted] workflow_dispatch: jobs: update_version: - if: github.event.review.state == 'approved' - runs-on: ubuntu-latest - steps: - - name: Checkout source - uses: actions/checkout@v3 - - name: configure git - run: | - git config user.name "GitHub Actions Bot" - git config user.email "<>" - - name: update version - run: | - last_release=$(git tag --list | tail -n 1) - num_commits_since_release=$(($(git rev-list $last_release..main | wc -l) + 1 )) - sed -i "s/__version__\s*=\s*\"(\d+\.\d+\.\d+).dev(\d+)\"/__version__ = \"$1.dev$num_commits_since_release\"/" hydromt/__init__.py - git add hydromt/__init__.py - git commit -m "update version" - git push origin ${{ github.ref_name}} -f - gh pr comment ${{ github.ref_name }} -b "I've updated the version for you. Feel free to merge now!" + if: github.event_name == 'workflow_dispatch' || github.event.review.state == 'approved' + defaults: + run: + shell: bash -l {0} + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v3 + - name: configure git + run: | + git config user.name "GitHub Actions Bot" + git config user.email "<>" + - name: Fetch last release + run: echo "LAST_RELEASE=$(git tag --list | tail -n 1)" >> $GITHUB_ENV + - name: calculate number of commist since last release + run: echo "NUM_COMMITS=$(($(git rev-list ${{ env.LAST_RELEASE }}..main | wc -l) + 1 ))" >> $GITHUB_ENV + - name: update version + env: + GH_TOKEN: ${{ github.token }} + run: | + sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1.dev1\"/" hydromt/__init__.py + git add hydromt/__init__.py + git commit -m "update version" + git push origin ${{ github.ref_name}} + gh pr comment ${{ github.ref_name }} -b "I've updated the version for you. Feel free to merge now!" From adc861a68dcfee9a4efadcb2fcd5f74f9cc2a702 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 18:17:57 +0200 Subject: [PATCH 09/14] update workflow based on offscreen testing --- .github/workflows/update_dev_version.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml index f1280dff7..47274616f 100644 --- a/.github/workflows/update_dev_version.yml +++ b/.github/workflows/update_dev_version.yml @@ -7,7 +7,7 @@ on: jobs: - update_version: + update-version: if: github.event_name == 'workflow_dispatch' || github.event.review.state == 'approved' defaults: run: From 000d022f65031cde57acc228b09c70eaedfa8b8b Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Tue, 25 Jul 2023 18:19:53 +0200 Subject: [PATCH 10/14] revert hydromt/__init__.py --- hydromt/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hydromt/__init__.py b/hydromt/__init__.py index c5b74ddc8..6be7ef6b9 100644 --- a/hydromt/__init__.py +++ b/hydromt/__init__.py @@ -1,5 +1,7 @@ """HydroMT: Automated and reproducible model building and analysis.""" +# version number without 'v' at start +__version__ = "0.8.1.dev0" # Set environment variables (this will be temporary) # to use shapely 2.0 in favor of pygeos (if installed) @@ -7,9 +9,6 @@ os.environ["USE_PYGEOS"] = "0" -__version__ = "0.8.1.dev0" - - # pkg_resource deprication warnings originate from dependencies # so silence them for now import warnings From 06ece716ee72f2cb046d42dd17026a2734242840 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Thu, 27 Jul 2023 12:14:10 +0200 Subject: [PATCH 11/14] version update just bump 1 instead of counting commits --- .github/workflows/update_dev_version.yml | 9 ++++----- docs/dev/contributing.rst | 3 +-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml index 47274616f..306686d2c 100644 --- a/.github/workflows/update_dev_version.yml +++ b/.github/workflows/update_dev_version.yml @@ -20,15 +20,14 @@ jobs: run: | git config user.name "GitHub Actions Bot" git config user.email "<>" - - name: Fetch last release - run: echo "LAST_RELEASE=$(git tag --list | tail -n 1)" >> $GITHUB_ENV - - name: calculate number of commist since last release - run: echo "NUM_COMMITS=$(($(git rev-list ${{ env.LAST_RELEASE }}..main | wc -l) + 1 ))" >> $GITHUB_ENV + - name: Calculate new dev version + run: | + echo "NEW_VERSION=$(($(git show main:hydromt/__init__.py | awk '/__version__/{print $0}' | awk -F'dev' '{print $2}' | tr -d '\"') + 1 ))">> $GITHUB_ENV - name: update version env: GH_TOKEN: ${{ github.token }} run: | - sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1.dev1\"/" hydromt/__init__.py + sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1.dev$LAST_VERSION\"/" hydromt/__init__.py git add hydromt/__init__.py git commit -m "update version" git push origin ${{ github.ref_name}} diff --git a/docs/dev/contributing.rst b/docs/dev/contributing.rst index 594fed552..c5282ead9 100644 --- a/docs/dev/contributing.rst +++ b/docs/dev/contributing.rst @@ -37,9 +37,8 @@ If you found a bug or an issue you would like to tackle or contribute to a new d 4. Update docs/changelog.rst file with a summary of your changes and a link to your pull request. See for example the `hydromt changelog `_. 5. Push your commits to the github repository and open a draft pull request. The body of the pull request will be pre-filled with a template. Please fill out this template with the relevant information, and complete the checklist included. 6. Once you're satisfied with the changes mark the pull request as "as ready for review" and ask another contributor to review the code. The review should cover the implementation as well as steps 2-4. -7. Once your request has been approved, a bot will add a commit to your branch to automatically update the version number. Please wait for this to complete before you merge. Once it is done, a comment saying "You're free to merge now" will be added to your PR. +7. Once your request has been approved, a bot will add a commit to your branch to automatically update the version number. Please wait for this to complete before you merge. Once it is done, a comment saying "You're free to merge now" will be added to your PR. You are now free to merge your request. 8. Note that if you want to make changes after this commit has been added, you should pull the branch first to avoid merge conflicts. -9. You are now free to merge your pull request. Do merge with a `squash` commit!! This is important to make sure the version counting stays accurate. .. _git-conventions: From 85b66a897d0153dba55810e6d3116baa4a0639eb Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Fri, 28 Jul 2023 08:49:10 +0200 Subject: [PATCH 12/14] update workflow to use pr number --- .github/workflows/update_dev_version.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml index 306686d2c..69fd5a02e 100644 --- a/.github/workflows/update_dev_version.yml +++ b/.github/workflows/update_dev_version.yml @@ -3,12 +3,12 @@ name: Update Version on: pull_request_review: types: [submitted] - workflow_dispatch: + jobs: update-version: - if: github.event_name == 'workflow_dispatch' || github.event.review.state == 'approved' + if: github.event.review.state == 'approved' defaults: run: shell: bash -l {0} @@ -30,5 +30,5 @@ jobs: sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1.dev$LAST_VERSION\"/" hydromt/__init__.py git add hydromt/__init__.py git commit -m "update version" - git push origin ${{ github.ref_name}} - gh pr comment ${{ github.ref_name }} -b "I've updated the version for you. Feel free to merge now!" + git push origin ${{ github.pull_request.base.ref}} + gh pr comment ${{ github.pull_request.number }} -b "I've updated the version for you. Feel free to merge now!" From ad5ad70f905307bd627233fad95f45d757eb332c Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Fri, 28 Jul 2023 09:21:49 +0200 Subject: [PATCH 13/14] handle version without dev part --- .github/workflows/update_dev_version.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml index 69fd5a02e..067ea3c49 100644 --- a/.github/workflows/update_dev_version.yml +++ b/.github/workflows/update_dev_version.yml @@ -22,12 +22,17 @@ jobs: git config user.email "<>" - name: Calculate new dev version run: | - echo "NEW_VERSION=$(($(git show main:hydromt/__init__.py | awk '/__version__/{print $0}' | awk -F'dev' '{print $2}' | tr -d '\"') + 1 ))">> $GITHUB_ENV + DEV_VERSION=$(cat hydromt/__init__.py | awk '/__version__/{print $0}' | awk -F'dev' '{print $2}' | tr -d '\"') + if [[ -z $DEV_VERSION ]]; then + echo "NEW_VERSION=.dev1" + else + echo "NEW_VERSION=.dev$(( $DEV_VERSION + 1))" + fi - name: update version env: GH_TOKEN: ${{ github.token }} run: | - sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1.dev$LAST_VERSION\"/" hydromt/__init__.py + sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1$NEW_VERSION\"/" hydromt/__init__.py git add hydromt/__init__.py git commit -m "update version" git push origin ${{ github.pull_request.base.ref}} From f086b38d8cdd769623ffebf0802e40fa27dc1660 Mon Sep 17 00:00:00 2001 From: Sam Vente Date: Mon, 31 Jul 2023 14:02:44 +0200 Subject: [PATCH 14/14] fix update version workflow --- .github/workflows/update_dev_version.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/update_dev_version.yml b/.github/workflows/update_dev_version.yml index 067ea3c49..5682a82d5 100644 --- a/.github/workflows/update_dev_version.yml +++ b/.github/workflows/update_dev_version.yml @@ -1,11 +1,8 @@ - name: Update Version on: pull_request_review: types: [submitted] - - jobs: update-version: if: github.event.review.state == 'approved' @@ -16,6 +13,9 @@ jobs: steps: - name: Checkout source uses: actions/checkout@v3 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} - name: configure git run: | git config user.name "GitHub Actions Bot" @@ -24,16 +24,20 @@ jobs: run: | DEV_VERSION=$(cat hydromt/__init__.py | awk '/__version__/{print $0}' | awk -F'dev' '{print $2}' | tr -d '\"') if [[ -z $DEV_VERSION ]]; then - echo "NEW_VERSION=.dev1" + echo "NEW_VERSION=.dev1" >> $GITHUB_ENV else - echo "NEW_VERSION=.dev$(( $DEV_VERSION + 1))" + echo "NEW_VERSION=.dev$(( $DEV_VERSION + 1))" >> $GITHUB_ENV fi - name: update version env: GH_TOKEN: ${{ github.token }} + BRANCH_NAME: ${{ github.event.pull_request.head.ref }} + PR_NUMBER: ${{ github.event.pull_request.number}} run: | + git checkout -b $BRANCH_NAME + git pull sed -i "s/__version__\s*=\s*\"\([0-9]\+\.[0-9]\+\.[0-9]\+\).dev[0-9]\+\"/__version__ = \"\1$NEW_VERSION\"/" hydromt/__init__.py git add hydromt/__init__.py git commit -m "update version" - git push origin ${{ github.pull_request.base.ref}} - gh pr comment ${{ github.pull_request.number }} -b "I've updated the version for you. Feel free to merge now!" + git push origin $BRANCH_NAME + gh pr comment $PR_NUMBER -b "I've updated the version for you. Feel free to merge now!"