Changelog¶
Next 2.x feature release
[Support]: Remove upper bounds pinning on many deps; this makes it easier for related projects to test upgrades, run CI, etc. In general, we’re moving away from this tactic.
4.0.2 2025-08-04
[Bug]: :support`- backported` Add
pipexplicitly to our core dependencies so that envs which don’t naturally include it (a thing these days!) still install it. We do literally import from pip as well as call out to it in subprocesses, at least for now.
4.0.1 2025-08-03
[Bug]: Use
$EDITOR pyproject.tomlfor version number updates now; overlooked in earlier commits.[Bug]: Fix some Python 3.10-specific type hint syntax that snuck in. Apologies from our dayjob, which is on Python 3.11.
4.0.0 2025-08-03
[Support]: Mute SyntaxWarnings from older
semantic_versionversions (temporary measure until we can upgrade to modern versions).[Support]: Update
packaging.release.buildto usepypa/buildinstead ofsetup.py.Warning
Backwards compatibility note: the
--directoryargument to tasks in this module is now ~=python -m build --outdir, meaning it controls what is usually nameddist/.Previously, this option controlled a parent directory, inside of which was created
dist/andbuild/. There’s no longer any explicitbuild/(that would be up to your project’s build backend) and so this is now simply the dist/output dir.[Support]: Drop support for Python<3.9 and switch to using pyproject.toml.
[Support]: Add a
__version__member to the package root module.
3.3.0 2023-05-12
[Feature]: Add mypy type-checking variant of the recently added import test, in
packaging.release.test_install. This helps prove packages exposingpy.typedin their source tree are including it in their distributions correctly.
3.2.0 2023-05-11
[Feature]: Minor enhancements to the
checksmodule:blackennow has aformatalias (and will likely reverse the real name and the alias in 4.0)Added
linttask which currently just runsflake8, will likely learn how to be configurable later.Added
all_default task for the collection, which runs bothblacken(in regular, not diff-only mode - idea is to be useful for devs, not CI, which already does both independently) andlintin series.
3.1.0 2023-05-02
[Feature]: Updated
packaging.release.test_installto attempt imports of freshly test-installed packages, to catch import-time errors on top of install-time ones. This can be opted out of by giving theskip_importkwarg (aka the--skip-importflag on the CLI).[Support]: Unpin
tabulatein our install requirements, it’s had many more releases since we instituted a defensive pin vs some bugs in its later 0.7 line!
3.0.2 2023-04-28
[Support]: Unpin
tabulatein our install requirements, it’s had many more releases since we instituted a defensive pin vs some bugs in its later 0.7 line!
3.0.1 2023-01-06
[Bug]: We neglected to remove references to
sixin a few spots - including some that utilized Invoke’s old vendor of same; this causes issues when trying to use development and upcoming versions of Invoke. Six is now truly gone!
3.0.0 2022-12-31
[Support]: Drop Python 2 (and 3.5) support. We now support Python 3.6+ only. This naturally includes a number of dependency updates (direct and indirect) as well.
Warning
This is a backwards-incompatible change.
[Support]: The
invocations.travismodule has been removed. If you relied upon it, we may accept PRs to make the newerinvocations.cimodule more generic.Warning
This is a backwards-incompatible change.
[Support]: The
dual_wheels,alt_python, andcheck_descarguments/config options for theinvocations.packaging.releasemodule have been removed.Warning
This is a backwards-incompatible change.
Note
If you were using
check_desc, note that the release tasks have been usingtwine checkfor a few releases now, as a default part of execution, and will continue doing so;check_desconly impacted the use of the oldersetup.py checkcommand.[Support]: Various fixes and doc updates re: the
autodocmodule’s compatibility with modern Sphinx versions.
2.6.1 2022-06-26
[Support]: Remove upper bounds pinning on many deps; this makes it easier for related projects to test upgrades, run CI, etc. In general, we’re moving away from this tactic.
2.6.0 2022-03-25
[Feature]: Update
packaging.release.publishwith a new config option,rebuild_with_env, to support a downstream (Fabric) release use-case.[Feature]: Enhance
packaging.release.test-installso it’s more flexible about the primary directory argument (re: adistdir, or a parent of one) and errors usefully when you (probably) gave it an incorrect path.
2.5.0 2022-03-25
[Feature]: Port
make-sshablefrom thetravismodule to the newcione.
2.4.0 2022-03-17
[Feature]: Add additional CLI flags to the use of
gpgwhen signing releases, to support headless passphrase entry. It was found that modern GPG versions require--batchand--pinentry-mode=loopbackfor--passphrase-fdto function correctly.[Feature]: Add a new
invocations.citask module for somewhat-more-generic CI support than the now legacyinvocations.travistasks.[Feature]: Allow supplying additional test runners to
pytest.coverage; primarily useful for setting up multiple additive test runs before publishing reports.
2.3.0 2021-09-24
[Bug]: The
packaging.release.uploadtask wasn’t properly exposed externally, even though another task’s docstring referenced it. Fixed.[Bug]: Ensure that the venv used for
packaging.release.test_installhas itspipupgraded to match the invoking interpreter’s version of same; this avoids common pitfalls where the “inner” pip is a bundled-with-venv, much-older version incapable of modern package installations.[Support]: Overhaul testing and release procedures to use CircleCI & modern Invocations.
2.2.0 2021-09-03
[Feature]: Added the
invocations.environmentmodule with top-level functions such asin_ci.[Feature]:
packaging.release.push, in dry-run mode, now dry-runs itsgit pushsubcommand – meaning the subcommand itself is what is “dry-ran”, instead of truly executinggit push --dry-run– when a CI environment is detected.This prevents spurious errors when the git remote (eg Github) bails out on read-only authentication credentials, which is common within CI systems.
It’s also just not very useful to dry-run a real git push within CI, since almost certainly the commands to generate git objects to get pushed will themselves not have truly run!
[Bug]:
packaging.release.status(and its use elsewhere, egprepare) didn’t adequately reload the local project’s version module during its second/final recheck; this causes that check to fail when said version was edited as part of apreparerun. It now force-reloads said version module.
2.1.0 2021-08-27
[Feature]: Added
twine check(which validates packaging metadata’slong_description) as a pre-upload step withinpackaging.release.publish.This includes some tweaking of
readme_rendererbehavior (used internally by twine) so it correctly spots more malformed RST, as Sphinx does.
[Feature]: Add
packaging.release.pushfor pushing Git objects as part of a release.[Feature]: The
packaging.release.all_task has been expanded to actually do “ALL THE THINGS!!!”, given adry_runflag, and renamed on the CLI toall(no trailing underscore).[Feature]:
packaging.release.preparegrew adry_runflag to match the rest of its friends.[Feature]: Add Codecov support to
pytest.coverage.[Feature]: Add
packaging.release.test_installtask and call it just prior to the final step inpackaging.release.upload(so one doesn’t upload packages which build OK but don’t actually install OK).[Bug]:
pytest.coverageincorrectly concatenated itsoptsargument to internal options; this has been fixed.[Bug]: Correctly test for
htmlreport type inside ofpytest.coveragewhen deciding whether to runopenat the end.[Bug]:
packaging.release.publishmissed a spot when it grew “kwargs beat configuration” behavior - theindexkwarg still got overwritten by the config value, if defined. This has been fixed.[Bug]:
packaging.release.preparenow generates annotated Git tags instead of lightweight ones. This was a perplexing oversight (Git has always intended annotated tags to be used for release purposes) so we’re considering it a bugfix instead of a backwards incompatible feature change.[Support]:
packaging.release.preparenow runs its internal status check twice, once at the start (as before) and again at the end (to prove that the actions taken did in fact satisfy needs).[Support]: Rely on Invoke 1.6+ for some of its new features.
2.0.0 2021-01-24
[Feature]: Add a
warningskwarg/flag topytest.test, allowing one to call it with--no-warningsas an inline ‘alias’ for pytest’s own--disable-warningsflag.[Bug]: Fix minor display bug causing the
pytesttask module to append a trailing space to the invocation of pytest itself.[Bug]:
release.buildandrelease.publishhad bad kwargs-vs-config logic preventing flags such as--wheelor--pythonfrom actually working (config defaults always won out, leading to silent ignoring of user input). This has been fixed; config will now only be honored unless the CLI appears to be overriding it.[Bug]:
release.build’s--cleanflag has been updated:It now honors configuration like the other flags in this task, specifically
packaging.clean.It now defaults to
False(rationale: most build operations in the wild tend to assume no cleaning by default, so defaulting to the opposite was sometimes surprising).Warning
This is a backwards incompatible change.
When
True, it applies to both build and dist directories, instead of just build.Warning
This is a backwards incompatible change.
[Support]: Modify
releasetask tree to look atmainbranches in addition tomasterones, for “are we on a feature release line or a bugfix one?” calculations, etc.[Support]: Replace some old Python 2.6-compatible syntax bits.
[Support]: Reverse the default value of
release.buildandrelease.publish)’swheelargument fromFalsetoTrue. Included in this change is a new required runtime dependency on thewheelpackage.Rationale: at this point in time, most users will be expecting wheels to be available, and not building wheels is likely to be the uncommon case.
Warning
This is a backwards incompatible change.
[Support] #21: Only require
enum34under Python 2 to prevent it clashing with the stdlibenumunder Python 3. Credit: Alex Gaynor.[Support] #12: Upgrade our packaging manifest so tests (also docs, requirements files, etc) are included in the distribution archives. Thanks to Tomáš Chvátal for the report.
[Support]: Drop Python 3.4 support. We didn’t actually do anything to make the code not work on 3.4, but we’ve removed some 3.4 related runtime (and development) dependency limitations. Our CI will also no longer test on 3.4.
Warning
This is technically a backwards incompatible change.
1.4.0 2018-06-26
[Feature]: Add a
find_optsargument tochecks.blackenfor improved control over what files get blackened.
1.3.1 2018-06-26
[Bug]:
checks.blackenhad a typo regarding its folder selection argument; the CLI/function arg wasfolderwhile the configuration value wasfolders(plural). It’s been made consistent: the CLI/function argument is nowfolders.[Bug]: Was missing a ‘hide output’ flag on a subprocess shell call, the result of which was mystery git branch names appearing in the output of
inv releaseand friends. Fixed now.
1.2.2 2018-06-26
[Bug]:
checks.blackenhad a typo regarding its folder selection argument; the CLI/function arg wasfolderwhile the configuration value wasfolders(plural). It’s been made consistent: the CLI/function argument is nowfolders.[Bug]: Was missing a ‘hide output’ flag on a subprocess shell call, the result of which was mystery git branch names appearing in the output of
inv releaseand friends. Fixed now.
1.1.1 2018-06-26
[Bug]:
checks.blackenhad a typo regarding its folder selection argument; the CLI/function arg wasfolderwhile the configuration value wasfolders(plural). It’s been made consistent: the CLI/function argument is nowfolders.[Bug]: Was missing a ‘hide output’ flag on a subprocess shell call, the result of which was mystery git branch names appearing in the output of
inv releaseand friends. Fixed now.[Support]: Remove some apparently non-functional
setup.pylogic around conditionally requiringenum34; it was never getting selected and thus breaking a couple modules that relied on it.enum34is now a hard requirement like the other semi-optional-but-not-really requirements.
1.0.1 2018-06-26
[Bug]:
checks.blackenhad a typo regarding its folder selection argument; the CLI/function arg wasfolderwhile the configuration value wasfolders(plural). It’s been made consistent: the CLI/function argument is nowfolders.[Bug]: Was missing a ‘hide output’ flag on a subprocess shell call, the result of which was mystery git branch names appearing in the output of
inv releaseand friends. Fixed now.[Support]: Remove some apparently non-functional
setup.pylogic around conditionally requiringenum34; it was never getting selected and thus breaking a couple modules that relied on it.enum34is now a hard requirement like the other semi-optional-but-not-really requirements.
1.3.0 2018-06-20
[Feature]: Bump Releases requirement up to 1.6 and leverage its new ability to load Sphinx extensions, in
packaging.release.prepare(which parses Releases changelogs programmatically). Prior to this, projects which needed extensions to build their doctree would throw errors when using thepackaging.releasemodule.[Support]: Remove some apparently non-functional
setup.pylogic around conditionally requiringenum34; it was never getting selected and thus breaking a couple modules that relied on it.enum34is now a hard requirement like the other semi-optional-but-not-really requirements.
1.2.1 2018-06-18
[Support]: Remove some apparently non-functional
setup.pylogic around conditionally requiringenum34; it was never getting selected and thus breaking a couple modules that relied on it.enum34is now a hard requirement like the other semi-optional-but-not-really requirements.
1.2.0 2018-05-22
[Feature]: Add the
checksmodule, containingchecks.blackenwhich executes the black code formatter. Thanks to Chris Rose.[Feature]: Add ‘missing’ arguments to
pytest.integrationso its signature now largely matchespytest.test, which it wraps.[Feature]: Break out a generic form of the
travis.sudo-coveragetask intotravis.sudo-runwhich can be used for arbitrary commands run under the ssh/sudo capable user generated bytravis.make-sudouser/travis.make-sshable.[Feature]: Add
travis.blackenwhich wraps the newchecks.blacken(in diff+check mode, for test output useful for users who cannot themselves simply run black) in addition to performing Travis-oriented Python version checks and pip installation.This is necessary to remove boilerplate around the fact that
blackis not even visible to Python versions less than 3.6.
1.1.0 2018-05-14
[Feature]: Split out the body of the (sadly incomplete)
packaging.release.alltask into the better-namedpackaging.release.prepare. (allcontinues to behave as it did, it just now callsprepareexplicitly.)
1.0.0 2018-05-08
[Feature]: Pre-history / code primarily for internal consumption