Skip to main content

Software releasing made easy and repeatable

Project description

Package releasing made easy: zest.releaser overview and installation

zest.releaser is collection of command-line programs to help you automate the task of releasing a Python project.

It does away with all the boring bits. This is what zest.releaser automates for you:

  • It updates the version number. The version number can either be in setup.py or version.txt or in a __versions__ attribute in a Python file or in setup.cfg. For example, it switches you from 0.3.dev0 (current development version) to 0.3 (release) to 0.4.dev0 (new development version).

  • It updates the history/changes file. It logs the release date on release and adds a new heading for the upcoming changes (new development version).

  • It tags the release. It creates a tag in your version control system named after the released version number.

  • It optionally uploads a source release to PyPI. It will only do this if the package is already registered there (else it will ask, defaulting to ‘no’); zest releaser is careful not to publish your private projects!

Most important URLs

First the three most important links:

Compatibility / Dependencies

https://img.shields.io/pypi/pyversions/zest.releaser?:alt:PyPI-PythonVersion https://img.shields.io/pypi/implementation/zest.releaser?:alt:PyPI-Implementation

zest.releaser works on Python 3.6+, including PyPy3. Tested until Python 3.10, but see tox.ini for the canonical place for that.

To be sure: the packages that you release with zest.releaser may very well work on other Python versions: that totally depends on your package.

We depend on:

  • setuptools for the entrypoint hooks that we offer.

  • colorama for colorized output (some errors printed in red).

  • twine for secure uploading via https to pypi. Plain setuptools doesn’t support this.

Since version 4.0 there is a recommended extra that you can get by installing zest.releaser[recommended] instead of zest.releaser. It contains a few trusted add-ons that we feel are useful for the great majority of zest.releaser users:

  • wheel for creating a Python wheel that we upload to PyPI next to the standard source distribution. Wheels are the new Python package format. Create or edit setup.cfg in your project (or globally in your ~/.pypirc) and create a section [zest.releaser] with create-wheel = yes to create a wheel to upload to PyPI. See http://pythonwheels.com for deciding whether this is a good idea for your package. Briefly, if it is a pure Python 2 or pure Python 3 package: just do it. If it is a pure Python 2 and a pure Python 3 project, it is known as a “universal” wheel, because one wheel can be installed on all implementations and versions of Python. If you indicate this in setup.cfg with the section [bdist_wheel] having universal = 1, then we will automatically upload a wheel, unless create-wheel is explicitly set to false.

  • check-manifest checks your MANIFEST.in file for completeness, or tells you that you need such a file. It basically checks if all version controlled files are ending up the the distribution that we will upload. This may avoid ‘brown bag’ releases that are missing files.

  • pyroma checks if the package follows best practices of Python packaging. Mostly it performs checks on the setup.py file, like checking for Python version classifiers.

  • readme_renderer to check your long description in the same way as pypi does. No more unformatted restructured text on your pypi page just because there was a small error somewhere. Handy.

Installation

Just a simple pip install zest.releaser or easy_install zest.releaser is enough. If you want the recommended extra utilities, do a pip install zest.releaser[recommended].

Alternatively, buildout users can install zest.releaser as part of a specific project’s buildout, by having a buildout configuration such as:

[buildout]
parts =
    scripts

[scripts]
recipe = zc.recipe.egg
eggs = zest.releaser[recommended]

Version control systems: git

Of course you must have a version control system installed. Since version 7, zest.releaser only supports git.

If you use Subversion (svn), Mercurial (hg), Git-svn, or Bazaar (bzr), please use version 6. If you really want, you can probably copy the relevant parts from the old code to a new package, and release this as an add-on package for zest.releaser. I suspect that currently it would only work with a monkey patch. If you are planning something, please open an issue, and we can see about making this part pluggable.

Available commands

Zest.releaser gives you four commands to help in releasing python packages. They must be run in a version controlled checkout. The commands are:

  • prerelease: asks you for a version number (defaults to the current version minus a ‘dev’ or so), updates the setup.py or version.txt and the CHANGES/HISTORY/CHANGELOG file (with either .rst/.txt/.md/.markdown or no extension) with this new version number and offers to commit those changes to subversion (or bzr or hg or git).

  • release: copies the the trunk or branch of the current checkout and creates a version control tag of it. Makes a checkout of the tag in a temporary directory. Offers to register and upload a source dist of this package to PyPI (Python Package Index). Note: if the package has not been registered yet, it will not do that for you. You must register the package manually (python setup.py register) so this remains a conscious decision. The main reason is that you want to avoid having to say: “Oops, I uploaded our client code to the internet; and this is the initial version with the plaintext root passwords.”

  • postrelease: asks you for a version number (gives a sane default), adds a development marker to it, updates the setup.py or version.txt and the CHANGES/HISTORY/CHANGELOG file with this and offers to commit those changes to version control. Note that with git and hg, you’d also be asked to push your changes (since 3.27). Otherwise the release and tag only live in your local hg/git repository and not on the server.

  • fullrelease: all of the above in order.

Note: markdown files should use the “underline” style of headings, not the “atx” style where you prefix the headers with # signs.

There are some additional tools:

  • longtest: small tool that renders a setup.py’s long description and opens it in a web browser. This assumes an installed docutils (as it needs rst2html.py).

  • lasttagdiff: small tool that shows the diff of the current branch with the last released tag. Handy for checking whether all the changes are adequately described in the changes file.

  • lasttaglog: small tool that shows the log of the current branch since the last released tag. Handy for checking whether all the changes are adequately described in the changes file.

  • addchangelogentry: pass this a text on the command line and it will add this as an entry in the changelog. This is probably mostly useful when you are making the same change in a batch of packages. The same text is used as commit message. In the changelog, the text is indented and the first line is started with a dash. The command detects it if you use for example a star as first character of an entry.

  • bumpversion: do not release, only bump the version. A development marker is kept when it is there. With --feature we update the minor version. With option --breaking we update the major version.

Credits

  • Reinout van Rees (Nelen & Schuurmans) is the original author. He’s still maintaining it, together with Maurits.

  • Maurits van Rees (Zest Software) added a heapload of improvements and is the maintainer, together with Reinout.

  • Kevin Teague (Canada’s Michael Smith Genome Sciences Center) added support for multiple version control systems, most notable Mercurial.

  • Wouter vanden Hove (University of Gent) added support for uploading to multiple servers, using collective.dist.

  • Godefroid Chapelle (BubbleNet) added /tag besides /tags for subversion.

  • Richard Mitchell (Isotoma) added Python 3 support.

  • Mateusz Legięcki added a dockerfile for much easier testing.

Changelog for zest.releaser

7.3.0 (2023-02-07)

  • Add option run-pre-commit = yes / no. Default: no. When set to true, pre commit hooks are run. This may interfere with releasing when they fail. [maurits]

7.2.0 (2022-12-09)

  • Auto-detect history_format based on history filename. [ericof]

  • Add history_format option, to explicitly set changelogs entries in Markdown. [ericof]

7.1.0 (2022-11-23)

  • Add the bumpversion options to the postrelease command. This means feature, breaking, and final. [rnc, maurits]

  • Add --final option to bumpversion command. This removes alpha / beta / rc markers from the version. [maurits]

  • Add support for Python 3.11, remove z3c.testsetup from test dependencies. [maurits]

7.0.0 (2022-09-09)

  • Optionally add prefix text to commit messages. This can be used ensure your messages follow some regular expression. To activate this, add prefix-message = [TAG] to a [zest.releaser] section in the setup.cfg of your package, or your global ~/.pypirc. Or add your favorite geeky quotes there. [LvffY]

7.0.0a3 (2022-04-04)

  • Bug 381: In prerelease, check with pep440 if the version is canonical. Added pep440 to the recommended extra, not to the core dependencies: zest.releaser can also be used for non-Python projects. [maurits]

7.0.0a2 (2022-02-10)

  • Add --headless option to longtest.

7.0.0a1 (2021-12-01)

Big cleanup to ease future development:

  • Removed support for Subversion (svn), Bazaar (bzr), Mercurial (hg).

  • Removed support for Python 2 and 3.5.

  • Added support for Python 3.9 and 3.10.

  • Tested with Python 3.6-3.10 plus PyPy3.

  • Switched from Travis to GitHub Actions.

  • Simplified running commands by using subprocess.run.

Project details


Release history Release notifications | RSS feed

This version

7.3.0

Download files

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

Source Distribution

zest.releaser-7.3.0.tar.gz (112.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zest.releaser-7.3.0-py3-none-any.whl (94.9 kB view details)

Uploaded Python 3

File details

Details for the file zest.releaser-7.3.0.tar.gz.

File metadata

  • Download URL: zest.releaser-7.3.0.tar.gz
  • Upload date:
  • Size: 112.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for zest.releaser-7.3.0.tar.gz
Algorithm Hash digest
SHA256 76ea1e569c21657f025bbc7a8157db78e165b4efc349f0cd0db9fac143292d11
MD5 ed90120344b96713e3e467c49f30c37a
BLAKE2b-256 86473420b2ef13b33a72c9a6f42316d41ff9ac43bb0132a5a02adba4b7c6e33c

See more details on using hashes here.

File details

Details for the file zest.releaser-7.3.0-py3-none-any.whl.

File metadata

  • Download URL: zest.releaser-7.3.0-py3-none-any.whl
  • Upload date:
  • Size: 94.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for zest.releaser-7.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bf9c57aefdb16b8f96cc5c7ef10e07749457d7ade658169ecd672a42529e212e
MD5 93c9636122b9ea56753570a04c205fe1
BLAKE2b-256 b9709bb01646d25b8c7a888057f3afffc8b46f7014db53b80f3f2a10a5935e0d

See more details on using hashes here.

Supported by

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