A framework for automating software releases
Project description
Modeltee is a tool to automate software releases.
I find that release time often involves several manual steps: remember to update the version number in several places, commit, make a clean build, upload, make and push a git tag…
Why a new tool? I could automate all that with a shell script. Modeltee lets you:
- Define a reusable release procedure and subclass that for different projects.
- Automatically check for required tools before starting a release.
- Share components which can add checks and information.
Install it with:
pip install modeltee
You define a release process as a subclass of modeltee.ReleaserBase. There are five steps you can control.
- Automated checks (check_prereqs): check that e.g. git is installed. The base method runs checks from components you’re using. If you override it, it’s recommended to call it using super().
- Manual confirmation (user_confirm): present information to the user, and give them an opportunity to cancel. The base method presents information provided by components you’re using.
- Steps before release (before_release): you might want to set the version number, make a clean build, give the tests a final run…
- The release itself (do_release): upload and tag the release. This is the one step you must define.
- Steps after release (after_release): e.g. set the version number to x+1.dev.
A simple releaser for a Python package might look like this:
from modeltee import ReleaserBase, Command, Bumpversion, Git import sys class Releaser(ReleaserBase): # These are components: they define checks to run before starting and # info to present, as well as providing shortcuts to use below. git = Git() twine = Command('twine') python = Command(sys.executable) bumpversion = Bumpversion() def before_release(self): self.bumpversion('--new-version', self.version, 'minor') self.python('setup.py', 'sdist') self.git('commit', '-am', 'version number -> {}'.format(self.version)) self.git('push') def do_release(self): self.twine('upload', 'dist/foo-{}.tar.gz'.format(self.version)) self.git('tag', str(self.version)) self.git('push', '--tags') if __name__ == '__main__': Releaser.main()
And you’d run it like this:
./release.py 1.3
Modeltee is named after the Ford Model T, one of the first cars to be mass produced on an assembly line.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size modeltee-0.1.1-py3-none-any.whl (8.9 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size modeltee-0.1.1.tar.gz (4.7 kB) | File type Source | Python version None | Upload date | Hashes View |