1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
==================
Releasing Flake8
==================
There is not much that is hard to find about how |Flake8| is released.
- We use **major** releases (e.g., 2.0.0, 3.0.0, etc.) for big, potentially
backwards incompatible, releases.
- We use **minor** releases (e.g., 2.1.0, 2.2.0, 3.1.0, 3.2.0, etc.) for
releases that contain features and dependency version changes.
- We use **patch** releases (e.g., 2.1.1, 2.1.2, 3.0.1, 3.0.10, etc.) for
releases that contain *only* bug fixes.
In this sense we follow semantic versioning. But we follow it as more of a set
of guidelines. We're also not perfect, so we may make mistakes, and that's
fine.
Major Releases
==============
Major releases are often associated with backwards incompatibility. |Flake8|
hopes to avoid those, but will occasionally need them.
Historically, |Flake8| has generated major releases for:
- Unvendoring dependencies (2.0)
- Large scale refactoring (2.0, 3.0, 5.0, 6.0)
- Subtly breaking CLI changes (3.0, 4.0, 5.0, 6.0, 7.0)
- Breaking changes to its plugin interface (3.0)
Major releases can also contain:
- Bug fixes (which may have backwards incompatible solutions)
- New features
- Dependency changes
Minor Releases
==============
Minor releases often have new features in them, which we define roughly as:
- New command-line flags
- New behaviour that does not break backwards compatibility
- New errors detected by dependencies, e.g., by raising the upper limit on
PyFlakes we introduce F405
- Bug fixes
Patch Releases
==============
Patch releases should only ever have bug fixes in them.
We do not update dependency constraints in patch releases. If you do not
install |Flake8| from PyPI, there is a chance that your packager is using
different requirements. Some downstream redistributors have been known to
force a new version of PyFlakes, pep8/PyCodestyle, or McCabe into place.
Occasionally this will cause breakage when using |Flake8|. There is little
we can do to help you in those cases.
Process
=======
To prepare a release, we create a file in :file:`docs/source/release-notes/`
named: ``{{ release_number }}.rst`` (e.g., ``3.0.0.rst``). We note bug fixes,
improvements, and dependency version changes as well as other items of note
for users.
Before releasing, the following tox test environments must pass:
- Python 3.9 (a.k.a., ``tox -e py39``)
- Python 3.13 (a.k.a., ``tox -e py313``)
- PyPy 3 (a.k.a., ``tox -e pypy3``)
- Linters (a.k.a., ``tox -e linters``)
We tag the most recent commit that passes those items and contains our release
notes.
Finally, we run ``tox -e release`` to build source distributions (e.g.,
``flake8-3.0.0.tar.gz``), universal wheels, and upload them to PyPI with
Twine.
|