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.

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 exposing py.typed in their source tree are including it in their distributions correctly.

3.2.0 2023-05-11

  • [Feature]: Minor enhancements to the checks module:

    • blacken now has a format alias (and will likely reverse the real name and the alias in 4.0)

    • Added lint task which currently just runs flake8, will likely learn how to be configurable later.

    • Added all_ default task for the collection, which runs both blacken (in regular, not diff-only mode - idea is to be useful for devs, not CI, which already does both independently) and lint in series.

3.1.0 2023-05-02

  • [Feature]: Updated packaging.release.test_install to 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 the skip_import kwarg (aka the --skip-import flag on the CLI).

  • [Support]: Unpin tabulate in 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 tabulate in 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 six in 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.travis module has been removed. If you relied upon it, we may accept PRs to make the newer invocations.ci module more generic.

    Warning

    This is a backwards-incompatible change.

  • [Support]: The dual_wheels, alt_python, and check_desc arguments/config options for the invocations.packaging.release module have been removed.

    Warning

    This is a backwards-incompatible change.

    Note

    If you were using check_desc, note that the release tasks have been using twine check for a few releases now, as a default part of execution, and will continue doing so; check_desc only impacted the use of the older setup.py check command.

  • [Support]: Various fixes and doc updates re: the autodoc module’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.publish with a new config option, rebuild_with_env, to support a downstream (Fabric) release use-case.

  • [Feature]: Enhance packaging.release.test-install so it’s more flexible about the primary directory argument (re: a dist dir, 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-sshable from the travis module to the new ci one.

2.4.0 2022-03-17

  • [Feature]: Add additional CLI flags to the use of gpg when signing releases, to support headless passphrase entry. It was found that modern GPG versions require --batch and --pinentry-mode=loopback for --passphrase-fd to function correctly.

  • [Feature]: Add a new invocations.ci task module for somewhat-more-generic CI support than the now legacy invocations.travis tasks.

  • [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.upload task wasn’t properly exposed externally, even though another task’s docstring referenced it. Fixed.

  • [Bug]: Ensure that the venv used for packaging.release.test_install has its pip upgraded 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.environment module with top-level functions such as in_ci.

  • [Feature]: packaging.release.push, in dry-run mode, now dry-runs its git push subcommand – meaning the subcommand itself is what is “dry-ran”, instead of truly executing git 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, eg prepare) 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 a prepare run. It now force-reloads said version module.

2.1.0 2021-08-27

  • [Feature]: Added twine check (which validates packaging metadata’s long_description) as a pre-upload step within packaging.release.publish.

    • This includes some tweaking of readme_renderer behavior (used internally by twine) so it correctly spots more malformed RST, as Sphinx does.

  • [Feature]: Add packaging.release.push for pushing Git objects as part of a release.

  • [Feature]: The packaging.release.all_ task has been expanded to actually do “ALL THE THINGS!!!”, given a dry_run flag, and renamed on the CLI to all (no trailing underscore).

  • [Feature]: packaging.release.prepare grew a dry_run flag to match the rest of its friends.

  • [Feature]: Add Codecov support to pytest.coverage.

  • [Feature]: Add packaging.release.test_install task and call it just prior to the final step in packaging.release.upload (so one doesn’t upload packages which build OK but don’t actually install OK).

  • [Bug]: pytest.coverage incorrectly concatenated its opts argument to internal options; this has been fixed.

  • [Bug]: Correctly test for html report type inside of pytest.coverage when deciding whether to run open at the end.

  • [Bug]: packaging.release.publish missed a spot when it grew “kwargs beat configuration” behavior - the index kwarg still got overwritten by the config value, if defined. This has been fixed.

  • [Bug]: packaging.release.prepare now 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.prepare now 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 warnings kwarg/flag to pytest.test, allowing one to call it with --no-warnings as an inline ‘alias’ for pytest’s own --disable-warnings flag.

  • [Bug]: Fix minor display bug causing the pytest task module to append a trailing space to the invocation of pytest itself.

  • [Bug]: release.build and release.publish had bad kwargs-vs-config logic preventing flags such as --wheel or --python from 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 --clean flag 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 release task tree to look at main branches in addition to master ones, 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.build and release.publish)’s wheel argument from False to True. Included in this change is a new required runtime dependency on the wheel package.

    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 enum34 under Python 2 to prevent it clashing with the stdlib enum under 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_opts argument to checks.blacken for improved control over what files get blackened.

1.3.1 2018-06-26

  • [Bug]: checks.blacken had a typo regarding its folder selection argument; the CLI/function arg was folder while the configuration value was folders (plural). It’s been made consistent: the CLI/function argument is now folders.

  • [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 release and friends. Fixed now.

1.2.2 2018-06-26

  • [Bug]: checks.blacken had a typo regarding its folder selection argument; the CLI/function arg was folder while the configuration value was folders (plural). It’s been made consistent: the CLI/function argument is now folders.

  • [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 release and friends. Fixed now.

1.1.1 2018-06-26

  • [Bug]: checks.blacken had a typo regarding its folder selection argument; the CLI/function arg was folder while the configuration value was folders (plural). It’s been made consistent: the CLI/function argument is now folders.

  • [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 release and friends. Fixed now.

  • [Support]: Remove some apparently non-functional setup.py logic around conditionally requiring enum34; it was never getting selected and thus breaking a couple modules that relied on it.

    enum34 is now a hard requirement like the other semi-optional-but-not-really requirements.

1.0.1 2018-06-26

  • [Bug]: checks.blacken had a typo regarding its folder selection argument; the CLI/function arg was folder while the configuration value was folders (plural). It’s been made consistent: the CLI/function argument is now folders.

  • [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 release and friends. Fixed now.

  • [Support]: Remove some apparently non-functional setup.py logic around conditionally requiring enum34; it was never getting selected and thus breaking a couple modules that relied on it.

    enum34 is 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 the packaging.release module.

  • [Support]: Remove some apparently non-functional setup.py logic around conditionally requiring enum34; it was never getting selected and thus breaking a couple modules that relied on it.

    enum34 is 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.py logic around conditionally requiring enum34; it was never getting selected and thus breaking a couple modules that relied on it.

    enum34 is now a hard requirement like the other semi-optional-but-not-really requirements.

1.2.0 2018-05-22

  • [Feature]: Add the checks module, containing checks.blacken which executes the black code formatter. Thanks to Chris Rose.

  • [Feature]: Add ‘missing’ arguments to pytest.integration so its signature now largely matches pytest.test, which it wraps.

  • [Feature]: Break out a generic form of the travis.sudo-coverage task into travis.sudo-run which can be used for arbitrary commands run under the ssh/sudo capable user generated by travis.make-sudouser/travis.make-sshable.

  • [Feature]: Add travis.blacken which wraps the new checks.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 black is 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.all task into the better-named packaging.release.prepare. (all continues to behave as it did, it just now calls prepare explicitly.)

1.0.0 2018-05-08

  • [Feature]: Pre-history / code primarily for internal consumption