Skip to content

Commit 634ee03

Browse files
authored
Merge pull request #27702 from tacaswell/pol/adopt_effver
GOV: adopt EffVer
2 parents 5fc82d1 + cce8690 commit 634ee03

File tree

13 files changed

+88
-53
lines changed

13 files changed

+88
-53
lines changed

doc/api/prev_api_changes/api_changes_1.3.x.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ API Changes in 1.3.x
77
Changes in 1.3.1
88
----------------
99

10-
It is rare that we make an API change in a bugfix release, however,
10+
It is rare that we make an API change in a micro release, however,
1111
for 1.3.1 since 1.3.0 the following change was made:
1212

1313
- ``text.Text.cached`` (used to cache font objects) has been made into a

doc/conf.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ def js_tag_with_cache_busting(js):
482482
"switcher": {
483483
# Add a unique query to the switcher.json url. This will be ignored by
484484
# the server, but will be used as part of the key for caching by browsers
485-
# so when we do a new minor release the switcher will update "promptly" on
485+
# so when we do a new meso release the switcher will update "promptly" on
486486
# the stable and devdocs.
487487
"json_url": f"https://matplotlib.org/devdocs/_static/switcher.json?{SHA}",
488488
"version_match": (

doc/devel/MEP/MEP13.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ The following steps can be done simultaneously: 1, 2, and 3; 4 and 5;
6363

6464
Only the following steps must be done in the same release: 4, 5,
6565
and 6. All other changes can be done in separate releases. 8 should
66-
be done several major releases after everything else.
66+
be done several macro releases after everything else.
6767

6868
Backward compatibility
6969
======================

doc/devel/api_changes.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ prevents unexpected breaking of code.
5454

5555
Rules
5656
^^^^^
57-
- Deprecations are targeted at the next :ref:`minor release <pr-milestones>` (e.g. 3.x)
57+
- Deprecations are targeted at the next :ref:`meso release <pr-milestones>` (e.g. 3.x)
5858
- Deprecated API is generally removed (expired) two point-releases after introduction
5959
of the deprecation. Longer deprecations can be imposed by core developers on
6060
a case-by-case basis to give more time for the transition
@@ -200,7 +200,7 @@ For example::
200200

201201
For classes and functions, the directive should be placed before the
202202
*Parameters* section. For parameters, the directive should be placed at the
203-
end of the parameter description. The patch release version is omitted and
203+
end of the parameter description. The micro release version is omitted and
204204
the directive should not be added to entire modules.
205205

206206
Release notes

doc/devel/min_dep_policy.rst

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
Dependency version policy
55
=========================
66

7-
For the purpose of this document, 'minor version' is in the sense of
8-
SemVer (major, minor, patch) and includes both major and minor
9-
releases. For projects that use date-based versioning, every release
10-
is a 'minor version'.
7+
For the purpose of this document, 'minor version' is in the sense of SemVer
8+
(major, minor, patch) or 'meso version' in the sense of `EffVer
9+
<https://jacobtomlinson.dev/effver/>`_ (macro, meso, micro). It includes both
10+
major/macro and minor/meso releases. For projects that use date-based
11+
versioning, every release is a 'minor version'.
1112

1213
Matplotlib follows `NEP 29
1314
<https://numpy.org/neps/nep-0029-deprecation_policy.html>`__.

doc/devel/pr_guide.rst

+9-9
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,11 @@ Milestones
151151

152152
Set the milestone according to these guidelines:
153153

154-
* *New features and API changes* are milestoned for the next minor release
154+
* *New features and API changes* are milestoned for the next meso release
155155
``v3.N.0``.
156156

157157
* *Bugfixes, tests for released code, and docstring changes* may be milestoned
158-
for the next patch release ``v3.N.M``.
158+
for the next micro release ``v3.N.M``.
159159

160160
* *Documentation changes* (only .rst files and examples) may be milestoned
161161
``v3.N-doc``.
@@ -250,15 +250,15 @@ Current branches
250250
The current active branches are
251251

252252
*main*
253-
The current development version. Future minor releases (*v3.N.0*) will be
253+
The current development version. Future meso (*v3.N.0*) or macro (*v4.0.0*) will be
254254
branched from this.
255255

256256
*v3.N.x*
257-
Maintenance branch for Matplotlib 3.N. Future patch releases will be
258-
branched from this.
257+
Maintenance branch for Matplotlib 3.N. Future micro releases will be
258+
tagged from this.
259259

260260
*v3.N.M-doc*
261-
Documentation for the current release. On a patch release, this will be
261+
Documentation for the current micro release. On a micro release, this will be
262262
replaced by a properly named branch for the new release.
263263

264264

@@ -279,14 +279,14 @@ work.
279279
Backport strategy
280280
-----------------
281281

282-
Backports to the patch release branch (*v3.N.x*) are the changes that will be
282+
Backports to the micro release branch (*v3.N.x*) are the changes that will be
283283
included in the next patch (aka bug-fix) release. The goal of the patch
284284
releases is to fix bugs without adding any new regressions or behavior changes.
285285
We will always attempt to backport:
286286

287287
- critical bug fixes (segfault, failure to import, things that the
288288
user cannot work around)
289-
- fixes for regressions introduced in the last two minor releases
289+
- fixes for regressions introduced in the last two meso releases
290290

291291
and may attempt to backport fixes for regressions introduced in older releases.
292292

@@ -296,7 +296,7 @@ effort and risk of re-implementing the bug fix vs the severity of the bug.
296296
When in doubt, err on the side of not backporting.
297297

298298
When backporting a Pull Request fails or is declined, re-milestone the original
299-
PR to the next minor release and leave a comment explaining why.
299+
PR to the next meso release and leave a comment explaining why.
300300

301301
The only changes backported to the documentation branch (*v3.N.M-doc*)
302302
are changes to :file:`doc` or :file:`galleries`. Any changes to :file:`lib`

doc/devel/release_guide.rst

+55-24
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,51 @@ Release guide
1212
A guide for developers who are doing a Matplotlib release.
1313

1414

15-
.. note::
1615

17-
This assumes that a read-only remote for the canonical repository is
18-
``remote`` and a read/write remote is ``DANGER``
16+
Versioning Scheme
17+
=================
18+
19+
Maplotlib follows the `Intended Effort Versioning (EffVer) <https://jacobtomlinson.dev/effver/>`_
20+
versioning scheme: *macro.meso.micro*.
21+
22+
23+
*macro*
24+
A release that we expect a large effort from our users to upgrade to. The v1 to v2 transition
25+
included a complete overhaul of the default styles and the v2 to v3 transition involved
26+
dropping support for Python 2.
27+
28+
Future macro versions would include changes of a comparable scale that can not be done
29+
incrementally in meso releases.
30+
31+
*meso*
32+
A release that we expect some effort from our users to upgrade to. We target a
33+
*Meso* release every 6 months. These release are primarily intended to release
34+
new features to our users, however they also contain intentional feature deprecations and
35+
removals per :ref:`our policy <deprecation-guidelines>`.
36+
37+
*micro*
38+
A release that we expect users to require little to no effort to upgrade to. Per
39+
our :ref:`backport-strategy` we only backport bug fixes to the maintenance branch.
40+
We expect minimal impact on users other than possibly breaking work arounds to a
41+
fixed bug or `bugs being used as features <https://xkcd.com/1172/>`_.
42+
43+
These are released as-needed, but typically every 1-2 months between meso releases.
1944

2045

2146
.. _release_feature_freeze:
2247

2348
Making the release branch
2449
=========================
2550

26-
When a new minor release (vX.Y.0) is approaching, a new release branch must be made.
51+
.. note::
52+
53+
This assumes that a read-only remote for the canonical repository is
54+
``remote`` and a read/write remote is ``DANGER``
55+
56+
57+
When a new meso release (vX.Y.0) is approaching, a new release branch must be made.
2758
When precisely this should happen is up to the release manager, but this point is where
28-
most new features intended for the minor release are merged and you are entering a
59+
most new features intended for the meso release are merged and you are entering a
2960
feature freeze (i.e. newly implemented features will be going into vX.Y+1).
3061
This does not necessarily mean that no further changes will be made prior to release,
3162
just that those changes will be made using the backport system.
@@ -50,12 +81,12 @@ Micro versions should instead read::
5081
on-merge: backport to v3.7.x
5182

5283
Check all active milestones for consistency. Older milestones should also backport
53-
to higher minor versions (e.g. ``v3.6.3`` and ``v3.6-doc`` should backport to both
84+
to higher meso versions (e.g. ``v3.6.3`` and ``v3.6-doc`` should backport to both
5485
``v3.6.x`` and ``v3.7.x`` once the ``v3.7.x`` branch exists and while PR backports are
5586
still targeting ``v3.6.x``)
5687

57-
Create the milestone for the next-next minor release (i.e. ``v3.9.0``, as ``v3.8.0``
58-
should already exist). While most active items should go in the next minor release,
88+
Create the milestone for the next-next meso release (i.e. ``v3.9.0``, as ``v3.8.0``
89+
should already exist). While most active items should go in the next meso release,
5990
this milestone can help with longer term planning, especially around deprecation
6091
cycles.
6192

@@ -142,15 +173,15 @@ are going to tag on and delete the doc branch on GitHub.
142173
Update supported versions in Security Policy
143174
--------------------------------------------
144175

145-
When making major or minor releases, update the supported versions in the Security
176+
When making macro or meso releases, update the supported versions in the Security
146177
Policy in :file:`SECURITY.md`.
147178

148-
For minor version release update the table in :file:`SECURITY.md` to specify that the
149-
two most recent minor releases in the current major version series are supported.
179+
For meso version release update the table in :file:`SECURITY.md` to specify that the
180+
two most recent meso releases in the current macro version series are supported.
150181

151-
For a major version release update the table in :file:`SECURITY.md` to specify that the
152-
last minor version in the previous major version series is still supported. Dropping
153-
support for the last version of a major version series will be handled on an ad-hoc
182+
For a macro version release update the table in :file:`SECURITY.md` to specify that the
183+
last meso version in the previous macro version series is still supported. Dropping
184+
support for the last version of a macro version series will be handled on an ad-hoc
154185
basis.
155186

156187
Update release notes
@@ -159,7 +190,7 @@ Update release notes
159190
What's new
160191
^^^^^^^^^^
161192

162-
*Only needed for major and minor releases. Bugfix releases should not have new
193+
*Only needed for macro and meso releases. Bugfix releases should not have new
163194
features.*
164195

165196
Merge the contents of all the files in :file:`doc/users/next_whats_new/` into a single
@@ -169,8 +200,8 @@ files.
169200
API changes
170201
^^^^^^^^^^^
171202

172-
*Primarily needed for major and minor releases. We may sometimes have API
173-
changes in bugfix releases.*
203+
*Primarily needed for macro and meso releases. We may sometimes have API
204+
changes in micro releases.*
174205

175206
Merge the contents of all the files in :file:`doc/api/next_api_changes/` into a single
176207
file :file:`doc/api/prev_api_changes/api_changes_{X}.{Y}.{Z}.rst` and delete the
@@ -181,7 +212,7 @@ Release notes TOC
181212

182213
Update :file:`doc/users/release_notes.rst`:
183214

184-
- For major and minor releases add a new section
215+
- For macro and meso releases add a new section
185216

186217
.. code:: rst
187218
@@ -193,7 +224,7 @@ Update :file:`doc/users/release_notes.rst`:
193224
prev_whats_new/whats_new_X.Y.0.rst
194225
../api/prev_api_changes/api_changes_X.Y.0.rst
195226
prev_whats_new/github_stats_X.Y.0.rst
196-
- For bugfix releases add the GitHub stats and (if present) the API changes to
227+
- For micro releases add the GitHub stats and (if present) the API changes to
197228
the existing X.Y section
198229

199230
.. code:: rst
@@ -206,8 +237,8 @@ Update version switcher
206237

207238
Update ``doc/_static/switcher.json``:
208239

209-
- If a bugfix release, :samp:`{X}.{Y}.{Z}`, no changes are needed.
210-
- If a major release, :samp:`{X}.{Y}.0`, change the name of :samp:`name: {X}.{Y+1}
240+
- If a micro release, :samp:`{X}.{Y}.{Z}`, no changes are needed.
241+
- If a macro release, :samp:`{X}.{Y}.0`, change the name of :samp:`name: {X}.{Y+1}
211242
(dev)` and :samp:`name: {X}.{Y} (stable)` as well as adding a new version for the
212243
previous stable (:samp:`name: {X}.{Y-1}`).
213244

@@ -259,8 +290,8 @@ Finally, push the tag to GitHub::
259290

260291
Congratulations, the scariest part is done!
261292
This assumes the release branch has already been made.
262-
Usually this is done at the time of feature freeze for a minor release (which often
263-
coincides with the last patch release of the previous minor version)
293+
Usually this is done at the time of feature freeze for a meso release (which often
294+
coincides with the last micro release of the previous meso version)
264295

265296
.. [#] The tarball that is provided by GitHub is produced using `git archive`_.
266297
We use setuptools_scm_ which uses a format string in
@@ -298,7 +329,7 @@ with the ``v3.7-doc`` milestone to both the ``v3.7.x`` branch and the ``v3.7.0-d
298329
on-merge: backport to v3.7.0-doc
299330

300331
Check all active milestones for consistency. Older doc milestones should also backport to
301-
higher minor versions (e.g. ``v3.6-doc`` should backport to both ``v3.6.x`` and ``v3.7.x``
332+
higher meso versions (e.g. ``v3.6-doc`` should backport to both ``v3.6.x`` and ``v3.7.x``
302333
if the ``v3.7.x`` branch exists)
303334

304335

doc/devel/triage.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ The following workflow is a good way to approach issue triaging:
160160

161161
While we strive for a bug-free library, regressions are the highest
162162
priority. If we have broken user-code that *used to* work, we should
163-
fix that in the next patch release!
163+
fix that in the next micro release!
164164

165165
Try to determine when the regression happened by running the
166166
reproduction code against older versions of Matplotlib. This can

doc/users/prev_whats_new/whats_new_1.3.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ What's new in Matplotlib 1.3 (Aug 01, 2013)
1313
New in 1.3.1
1414
------------
1515

16-
1.3.1 is a bugfix release, primarily dealing with improved setup and
16+
1.3.1 is a micro release, primarily dealing with improved setup and
1717
handling of dependencies, and correcting and enhancing the
1818
documentation.
1919

lib/matplotlib/_api/deprecation.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,17 @@ def _generate_deprecation_warning(
2929
raise ValueError(
3030
"A pending deprecation cannot have a scheduled removal")
3131
else:
32-
removal = f"in {removal}" if removal else "two minor releases later"
32+
if not removal:
33+
macro, meso, *_ = since.split('.')
34+
removal = f'{macro}.{int(meso) + 2}'
35+
removal = f"in {removal}"
3336
if not message:
3437
message = (
3538
("The %(name)s %(obj_type)s" if obj_type else "%(name)s")
3639
+ (" will be deprecated in a future version"
3740
if pending else
38-
(" was deprecated in Matplotlib %(since)s"
39-
+ (" and will be removed %(removal)s" if removal else "")))
41+
" was deprecated in Matplotlib %(since)s and will be removed %(removal)s"
42+
)
4043
+ "."
4144
+ (" Use %(alternative)s instead." if alternative else "")
4245
+ (" %(addendum)s" if addendum else ""))

lib/matplotlib/tests/test_pyplot.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ def test_pyplot_up_to_date(tmp_path):
4343

4444

4545
def test_copy_docstring_and_deprecators(recwarn):
46-
@mpl._api.rename_parameter("(version)", "old", "new")
47-
@mpl._api.make_keyword_only("(version)", "kwo")
46+
@mpl._api.rename_parameter(mpl.__version__, "old", "new")
47+
@mpl._api.make_keyword_only(mpl.__version__, "kwo")
4848
def func(new, kwo=None):
4949
pass
5050

src/ft2font_wrapper.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ static PyObject *PyFT2Image_draw_rect(PyFT2Image *self, PyObject *args)
7575
{
7676
char const* msg =
7777
"FT2Image.draw_rect is deprecated since Matplotlib 3.8 and will be removed "
78-
"two minor releases later as it is not used in the library. If you rely on "
79-
"it, please let us know.";
78+
"in Matplotlib 3.10 releases later as it is not used in the library. "
79+
"If you rely on it, please let us know.";
8080
if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1)) {
8181
return NULL;
8282
}
@@ -841,7 +841,7 @@ static PyObject *PyFT2Font_get_xys(PyFT2Font *self, PyObject *args, PyObject *kw
841841
{
842842
char const* msg =
843843
"FT2Font.get_xys is deprecated since Matplotlib 3.8 and will be removed two "
844-
"minor releases later as it is not used in the library. If you rely on it, "
844+
"meso releases later as it is not used in the library. If you rely on it, "
845845
"please let us know.";
846846
if (PyErr_WarnEx(PyExc_DeprecationWarning, msg, 1)) {
847847
return NULL;

tools/github_stats.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def report(issues, show_urls=False):
169169
parser.add_argument(
170170
'--since-tag', type=str,
171171
help='The git tag to use for the starting point '
172-
'(typically the last major release).')
172+
'(typically the last macro release).')
173173
parser.add_argument(
174174
'--milestone', type=str,
175175
help='The GitHub milestone to use for filtering issues [optional].')

0 commit comments

Comments
 (0)