Changelogs » Zest.releaser

PyUp Safety actively tracks 263,166 Python packages for vulnerabilities and notifies you when to upgrade.



  - Nothing changed yet.


  - When replacing new version in ``__version__ = "1.0"``, keep the existing quote style.
  We always replaced double with single quotes, but now we keep them.


  - Fixed deadlock when communicating with git-lfs, or anything else that gives back lots of output.
  - Fixed TypeError setting unicode in environment on Python 2.7 on Windows.


  - Fixed uploading to multiple servers if we do not want to upload to the first server.
  Fixes `issue 357 <>`_.


  - Added support for Twine environment variables.
  Especially, setting ``TWINE_REPOSITORY`` and ``TWINE_REPOSITORY_URL`` had no effect previously.
  Fixes `issue 353 <>`_.


  - Added ``Dockerfile`` for much easier testing. See `the developer
  <>`_. Previously,
  getting the tests to run reliably locally was hard, now it is easy.


  - Zest.releaser now sets an environment variable ``ZESTRELEASER`` so that
  tools that we call on the command line can detect us. Don't depend on the
  variable's textual content, just on the variable's name.


  - Percent signs (%) don't crash addchangelogentry anymore.


  - Do not go to the root of the repo by default.
  When you were not in the root of a repo, ``zest.releaser`` already asked if you wanted to go there.
  The default answer has now changed from yes to no.
  This might help when releasing from monorepos.
  Issue `326 <>`_.  [maurits]


  - Remove nothing_changed_yet line from history lines in unreleased section. [kleschenko]


  - Document that we only support underline-style headings for markdown.
  Fixes `issue 317 <>`_.
  - Using simply ``git ls-files`` to list files in a git repo instead of an
  older much longer command. (Suggestion by mgedmin).


  - Calling twine in a more generic way to let it automatically do the right
  thing. This saves us a lot of code and lets twine do what it's good at.


  - When ``bdist_wheel`` is in ``setup.cfg``, release a wheel.
  No longer check if this should be a universal wheel or not.
  That is handled automatically when calling ``python bdist_wheel``.
  You can still set ``[zest.releaser] create-wheel = no`` to prevent creating a wheel.
  Fixes `issue 315 <>`_.


  - Also accept 201 as valid statuscode when uploading using twine
  Fixes `issue 318 <>`_


  - Refuse to edit history header when it looks to be from an already released version.
  We look for a date in it (like 2019-02-20).  Give a warning when this happens.
  Fixes `issue 311 <>`_.
  - Better support for ``zestreleaser.towncrier`` (and similar extensions):
  the update_history setting is now also respected by the ``bumpversion`` command.
  Fixes `issue 310 <>`_.


  - Fix for `issue 259 <>`_:
  using zest.releaser on windows no longer can result in accidental extra
  ``\r`` (carriage return) characters in the changelog and your ````.


  - We retain the existing quoting style for the ``version='1.0'`` in
  ```` files. The "black" code formatting prefers double quotes and
  zest.releaser by default wrote single quotes.
  - Fix for `issue 299 <>`_:
  bumpversion now also compares versions numerically instead of as a string,
  so ``2.9 < 2.10`` is now true.


  - Fix for `issue 297 <>`_:
  bytes+int problem on python 3 when detecting encodings.


  - If a tag already exists, zest.releaser asks a safety question. The location
  where the question gets asked was moved slightly to help a program that uses
  zest.releaser as a library.
  - Switched our readthedocs urls to https.


  - Fix for 286: removed the confusing word "register" from the info message
  you got when a package wasn't available yet on pypi.
  Registering isn't used anymore on pypi, but it was still in our textual


  - Use, especially when checking if a package is on PyPI.
  Fixes `issue 281 <>`_.
  - Added key ``update_history`` in prerelease and postrelease data.
  Plugins can use this to tell ``zest.releaser`` (and other plugins)
  to not touch the history, presumably because the plugin handles it.
  - Declared ``requests`` dependency.
  Declared ``zope.testing`` test dependency.


  - Advertise ``setup.cfg`` option ``[zest.releaser] history-file``.
  Usually zest.releaser can find the correct history or changelog file on its own.
  But sometimes it may not find anything, or it finds multiple files and
  selects the wrong one.
  Then you can set a path here.
  A ``history_file`` option with an underscore was already read, but not documented.
  Now we try both a dash and an underscore for good measure.
  - Use new ``setup.cfg`` option ``[zest.releaser] encoding``.
  Set this to, for example, ``utf-8`` when the encoding of your ``CHANGES.rst``
  file is not determined correctly.
  Fixes `issue 264 <>`_.
  - When inserting changelog entry, check that it conforms to the existing encoding.
  Try to recover if there is a difference, especially when the changelog file
  was ascii and we insert utf-8.  [maurits]
  - When determining encoding, first look for coding hints in the file itself.
  Only when that fails, we try ``tokenize`` or ``chardet``.
  Fixes `issue 264 <>`_.
  - Get PyPI password raw, without interpolation.
  If you had a password with a percentage sign, you could get an error.
  Fixes `issue 271 <>`_.
  - Prevent unclosed files.  Python 3.6 warned about them,
  and PyPy may have more problems with it.
  Fixed several other DeprecationWarnings.  [maurits]
  - Print commands in a nicer way.
  You could get ugly output like this, especially on Python 2.7:
  ``INFO: The '[u'git', u'diff']':`` or worse:
  ``Command failed: u"t w i n e ' ' u p l o a d"``.
  - Test compatibility with Python 2.7, 3.4, 3.5, 3.6, PyPy2.  [maurits]


  - Quit in ``postrelease`` when we cannot find a version.
  Fixes `issue 262 <>`.


  - Fixed IOError when ``setup.cfg`` is missing and no version is found.


  - Fixed writing of files in original encoding on python3, too. [andreparames]


  - Fixed tests with mercurial 4.4+.  [maurits]
  - Fixed writing of files in original encoding. [mgedmin]


  - Add tag message formatting (option ``tag-message``). [htgoebel]


  - Add support for signing tags (option ``tag-signing``). [htgoebel]


  - Sorting uploadable filenames so that wheels are uploaded first. (For most
  filesystems this happened automatically, but the order on OSX' new
  filesystem is non-deterministic, so we added sorting.)
  - Release process will now fail when specified hooks cannot be imported.
  (`PR 236 <>`_)


  - Also support version in setup.cfg. [ewjoachim]


  - Allows ``{version}`` format for ``tag-format``.


  - Subversion fix: create tag of entire trunk or branch when not in repo root.
  If you have ``trunk/pkg1`` and ``trunk/pkg2`` and you make tag 1.0 in directory ``pkg1``,
  then until now we would create ``tags/1.0`` with the contents of directory ``pkg1``.
  Checking out the tag and changing to the ``pkg1`` directory then failed.
  We now make a tag of the entire trunk or branch, just like in the other version control systems.
  Fixes `issue 213 <>`_.
  - Do not needlessly run ``svn info``.  [maurits]


  - Quote the path when making a git clone, to fix problems with spaces.  [halkeye]
  - Fixed percentage signs in ``date-format`` in ``setup.cfg``.
  You need double percentages.  [mgedmin]


  - Add date format in the config.  Default is ISO-8601 (%Y-%m-%d).
  Put ``date-format = format string`` in your ``~/.pypirc`` or ``setup.cfg``.


  - If the package wants to build universal wheels by setting
  ``[bdist_wheel] universal = 1``, then the default for
  ``create-wheel`` is now yes.


  - Corner case fix: a top-level ``version = 1.0`` in your ```` is now
  also allowed to be in uppercase, like ``VERSION = 1.0``.
  This fixes `issue 216


  - Add tag formatter in the config.  This is a formatter that changes the name of the tag.
  Default is the same as the version.
  Put ``tag-format = a string`` in your ``~/.pypirc`` or ``setup.cfg``.
  It needs to contain ``%(version)s``.


  - Catch error when uploading first package file in new PyPI project.
  This fixes `issue 206


  - Before retrying a ``twine`` command, reload the pypi config.  Then
  when the user fixes his account settings in ``~/.pypirc`` and
  retries, these changes take effect.  This used to work a while ago,
  but got broken.  [maurits]
  - Added ``development-marker`` config option.  With this can override
  the default ``.dev0``.  [drucci]
  - Added ``version-levels`` and ``less-zeroes`` options.
  This influences the suggested version.  [maurits]
  - Allow ``.pypirc`` with just a ``pypi`` section.  Previously, we
  required either a ``[server-login]`` section with a ``username``
  option, or a ``[distutils]`` section with an ``index-servers`` option.
  Failing this, we gave a warning about a not properly configured
  file, and happily continued without uploading anything.  Now if
  there is something missing from the ``pypirc`` file, we give an
  error and explicitly ask if you want to continue without uploading.
  Fixes `issue 199 <>`_.
  Note for developers of extensions for ``zest.releaser``: this
  removes the ``is_old_pypi_config`` and ``is_new_pypi_config``
  methods, because they made no sense anymore.  If you were using
  these, see if you can use the ``distutils_server`` method instead.
  - Added ``push-changes`` config file option.  Default: yes.  When this
  is false, zest.releaser sets ``no`` as default answer for the
  question if you want to push the changes to the remote.
  - By default no longer register a new package, but only upload it.
  Registering a package is no longer needed on PyPI: uploading a new
  distribution takes care of this.  If you *do* want to register,
  maybe because a different package server requires it, then in your
  ``setup.cfg`` or ``~/.pypirc``, use the following::
  register = yes
  Fixes `issue 191 <>`_.


  - Create the list of distributions after the ``before_upload`` hook has fired.
  This allows the ``before_upload`` hook to create additional distributions,
  which will then be uploaded.  [t-8ch]


  - Use the intended API of twine.  This should work with twine 1.6.0
  and higher, including future versions.  [maurits]


  - Support and require twine 1.8.0 as minimum version.
  - Updated the documentation on uploading.  [mgedmin, maurits]
  - Replaced with  This is the new canonical
  domain since 28 April 2016.  [maurits]


  - Really create a shallow git clone when creating a distribution.
  See issue 169.


  - Using a "shallow" git clone when creating a distribution. This speeds up
  releases, especially on big repositories.
  See issue 169.


  - Added ``no-input`` option also to global (.pypirc) options.
  Issue 164.


  - Fixed version in changelog after bumpversion call.


  - Added ``bumpversion`` command.  Options ``--feature`` and
  ``--breaking``.  Issue 160.  The exact behavior might change in
  future versions after more practical experience.  Try it out and
  report any issues you find.  [maurits]
  - Fixed possible encoding problems when writing files.  This is
  especially for an ascii file to which we add non ascii characters,
  like in the ``addchangelogentry`` command.  [maurits]
  - Added ``addchangelogentry`` command.  Issue 159.  [maurits]
  - Moved ``_diff_and_commit``, ``_push`` and ``_grab_version`` to
  ````, as the first was duplicated and the second and
  third may be handy for other code too.  ``_grab_version`` is the
  basic implementation, and is overridden in the prereleaser.  [maurits]
  - Show changelog of current release before asking for the new version
  number.  Issue 155.  [maurits]
  - Moved ``_diff_and_commit``, ``_push`` and ``_grab_version`` to
  ````, as the first was duplicated and the second and
  third may be handy for other code too.  ``_grab_version`` is the
  basic implementation, and is overridden in the prereleaser.  [maurits]


  - Adjusted ``bin/longtest`` for the (necessary) rename of the ``readme``
  library to ``readme_renderer``.
  Fixes 153
  Note: the current ``readme`` package on pypi is broken to force an
  upgrade. If you use an older zest.releaser, you have to pin ``readme`` to
  ``0.6.0``, it works just fine.


  - Fixed error when retrying twine command.
  Fixes 148


  - Fixed exception when logging an exception when a twine command


  - Use ``twine`` as library instead of as command.  You no longer need
  to have ``twine`` on your ``PATH``.
  Fixes issue 142.


  - Fixed registering on servers other than PyPI.  We forgot to specify
  the server in that case.


  - Made ``twine`` a core dependency.  We now always use it for
  registering and uploading.  We require at least version 1.6.0, as
  this introduces the ``register`` command.
  - When uploading with ``twine`` first use the ``twine register``
  command.  On PyPI, when the project is already registered, we do not
  call it again, but we can only check this for PyPI, not for other
  Issue 128.
  - Always exit with error code 1 when we exit explicitly.  In some
  cases we would exit with success code 0 when we exited based on the
  answer to a question.  This happened when the user did not want us
  to create the missing ``tags`` directory in subversion, and also
  after asking if the user wanted to continue even though 'nothing
  changed yet' was in the history.
  - Extensions can now tell zest.releaser to look for specific required
  words in the history.  Just add ``required_changelog_text`` to the
  prerelease data.  It can be a string or a list, for example
  ``["New:", "Fixes:"]``.  For a list, only one of them needs to be
  - Look for the 'Nothing changed yet' text in the complete text of the
  history entries of the current release, instead of looking at it
  line by line.  This means that zest releaser extensions can overwrite
  ``nothing_changed_yet`` in the prerelease data to span multiple lines.
  - zest.releaser extensions can now look at
  ``history_insert_line_here`` in the prerelease data.  On this line
  number in the history file they can add an extra changelog entry if
  - Added ``history_last_release`` to the prerelease data.  This is the
  text with all history entries of the current release.
  - When using the ``--no-input`` option, show the question and the
  chosen answer.  Otherwise in case of a problem it is not clear why
  the command stopped.
  Fixes issue 136.


  - The history/changelog file is now written back with the originally detected
  encoding. The functionality was added in 5.2, but only used for writing the
  ````, not the changelog. This is fixed now.


  - Add support for PyPy.


  - The ``bin/longtest`` command adds the correct utf-8 character encoding hint
  to the resulting html so that non-ascii long descriptions are properly
  rendered in all browsers.


  - Requiring at least version 0.6 of the (optional, btw) readme package. The
  API of readme changed slightly. Only needed when you want to check your
  package's long description with ``bin/longtest``.


  - Fixed typo in svn command to show the changelog since the last tag.


  - When we find no version control in the current directory, look a few
  directories up.  When looking for version and history files, we look
  in the current directory and its sub directories, and not in the
  repository root.  After making a tag checkout, we change directory
  to the same relative path that we were in before.  You can use this
  when you want to release a Python package that is in a sub directory
  of the repository.  When we detect this, we first offer to change to
  the root directory of the repository.
  - Write file with the same encoding that we used for reading them.
  Issue 109.


  - Fix writing history/changelog file with non-ascii.  Issue 109.
  - Release zest.releaser as universal wheel, so one wheel for Python 2
  and 3.  As usual, we release it also as a source distribution.
  - Regard "Skipping installation of (namespace package)" as
  warning, printing it in magenta.  This can happen when creating a
  wheel.  Issue 108.


  - Python 3 support.
  - Use the same `readme` library that PyPI uses to parse long
  descriptions when we test and render them.


  - Try not to treat warnings as errors.
  - Allow retrying some commands when there is an error.  Currently only
  for commands that talk to PyPI or another package index.  We ask the
  user if she wants to retry: Yes, no, quit.
  - Added support for twine_.  If the ``twine`` command is available, it
  is used for uploading to PyPI.  It is installed automatically if you
  use the ``zest.releaser[recommended]`` extra.  Note that if the
  ``twine`` command is not available, you may need to change your
  system ``PATH`` or need to install ``twine`` explicitly.  This seems
  more needed when using ``zc.buildout`` than when using ``pip``.
  Added ``releaser.before_upload`` entry point.  Issue 59.
  - Added ``check-manifest`` and ``pyroma`` to the ``recommended``
  extra.  Issue 49.
  - Python 2.6 not officially supported anymore.  It may still work, but
  we are no longer testing against it.
  - Do not accept ``y`` or ``n`` as answer for a new version.
  - Use ``colorama`` to output errors in red.
  Issue 86
  - Show errors when uploading to PyPI.  They were unintentionally
  swallowed before, so you did not notice when an upload failed.
  Issue 84.
  - Warn when between the last postrelease and a new prerelease no
  changelog entry has been added.  '- Nothing changed yet' would still
  be in there.
  Issue 26.
  - Remove code for support of collective.sdist.  That package was a backport
  from distutils for Python 2.5 and earlier, which we do not support.
  - Add optional support for uploading Python wheels.  Use the new
  ``zest.releaser[recommended]`` extra, or run ``pip install wheel``
  yourself next to ``zest.releaser``.  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 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.
  Issue 55
  - Optionally add extra text to commit messages.  This can be used to
  avoid running Travis Continuous Integration builds.  See  To activate
  this, add ``extra-message = [ci skip]`` to a ``[zest.releaser]``
  section in the ``setup.cfg`` of your package, or your global
  ``~/.pypirc``.  Or add your favorite geeky quotes there.
  - Fix a random test failure on Travis CI, by resetting ``AUTO_RESPONSE``.
  - Added clarification to logging: making an sdist/wheel now says that it is
  being created in a temp folder. Fixes 61.
  ..  Note: for older changes see ``doc/sources/changelog.rst``.
  .. _twine: