Skip to main content

Version-bump, tag, push, deploy to PyPI

Project description

Bumpy McBumpface


To run:

/home/blah/myproject $ bumpymcbumpface --push-git --push-pypi

To get help:

/home/blah/myproject $ bumpymcbumpface -h
usage: [-h] [--debug] [--show] [--dry-run] [--push-git]

bumpymcbumpface - version-bump, tag, push, deploy

positional arguments:

optional arguments:
  -h, --help           show this help message and exit
  --debug              Print debugging messages (default: False)
  --show               Show the current version and exit (default: False)
  --dry-run            Describe what would be done, and exit (default: False)
  --push-git           Push the new commit and tag to github (default: False)
  --push-pypi          Push the new built packages to PyPI (default: False)
/home/blah/myproject $


When doing a new release, I got real tired of doing these things by hand:

  1. Update the version number of my package
  2. Commit that change to git
  3. Create a git tag with the new version
  4. Push the tag (and the new commit) to github
  5. Build new distributable packages: wheel (.whl) and source dist (.tar.gz)
  6. Upload the new packages to pypi

Bumpy McBumpface will do these things, and will not ask questions.


You need to have these:

  • A file called VERSION in your project root, with MAJOR.MINOR.PATCH numbers
  • git
  • twine (set up keyring so that twine won’t ask you for login/password)
  • pip
  • wheel

You probably SHOULD BE in master branch branch when you run, but you only need to be in a branch that has a valid remote.


There are a several options, but only two important ones. By default, it will NOT do these things automatically:

  • Push to github
  • Deploy to PyPI

This is just so that it defaults to “safe” by not affecting anything beyond your computer during testing. To make it do these things too, run it like this:

$ bumpymcbumpface --push-git --push-pypi

Bumpy McBumpface assumes that your version number is in the following format:


where each of the three fields is an integer. This also works for calendar-based versioning. By default, the PATCH value will be increased by 1 if you run without arguments. These two are the same:

$ bumpymcbumpface --push-git --push-pypi
$ bumpymcbumpface --push-git --push-pypi patch

For a MINOR bump, change the word patch to minor. Likewise for major.

Now that you’re using a file called VERSION in your project root to store your version number, how do you get it into your Just read it in, like this:

from os import path
from io import open  # For universal packages + py27

here = path.abspath(path.dirname(__file__))

    version=open(path.join(here, 'VERSION')).readline().strip(),

Good luck!

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
bumpymcbumpface-0.2.3-py2.py3-none-any.whl (16.8 kB) Copy SHA256 hash SHA256 Wheel py2.py3
bumpymcbumpface-0.2.3.tar.gz (6.4 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page