Skip to main content

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.

  1. 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().

  2. 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.

  3. Steps before release (before_release): you might want to set the version number, make a clean build, give the tests a final run…

  4. The release itself (do_release): upload and tag the release. This is the one step you must define.

  5. 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


Download files

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

Source Distribution

modeltee-0.1.1.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

modeltee-0.1.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file modeltee-0.1.1.tar.gz.

File metadata

  • Download URL: modeltee-0.1.1.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for modeltee-0.1.1.tar.gz
Algorithm Hash digest
SHA256 76c2a99adbee9754d695453c9309934228f7095e2cd0dd7111e74cdccd08dd44
MD5 7c75eeae452c8dccd8b68f420b6571a6
BLAKE2b-256 4122883a8afdb8bd4e94b1b7d2678c94456de5d24b7ca18004846ba25bc530e2

See more details on using hashes here.

File details

Details for the file modeltee-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for modeltee-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 45327a522009a1594946fee2d652fb38e6d75e09c76cd0571f743bc89c688529
MD5 1b2d24f4e83df30b1894aada6be6312a
BLAKE2b-256 35a9c3467ae34225c7b52061f488029bb9663935668aee6fb32302027a4b28bb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page