Sphinx's release process

Branch Model

Sphinx project uses following branches for developing that conforms to Semantic Versioning 2.0.0 (refs: https://semver.org/ ).

master

Development for MAJOR version. All changes including incompatible behaviors and public API updates are allowed.

A.x (ex. 2.x)

Where A.x is the MAJOR.MINOR release. Used to maintain current MINOR release. All changes are allowed if the change preserves backwards-compatibility of API and features.

Only the most recent MAJOR.MINOR branch is currently retained. When a new MAJOR version is released, the old MAJOR.MINOR branch will be deleted and replaced by an equivalent tag.

A.B.x (ex. 2.4.x)

Where A.B.x is the MAJOR.MINOR.PATCH release. Only backwards-compatible bug fixes are allowed. In Sphinx project, PATCH version is used for urgent bug fix.

MAJOR.MINOR.PATCH branch will be branched from the v prefixed release tag (ex. make 2.3.1 that branched from v2.3.0) when a urgent release is needed. When new PATCH version is released, the branch will be deleted and replaced by an equivalent tag (ex. v2.3.1).

非推奨の機能

次の2つの理由からSphinx内のコードは非推奨なものとなるかもしれません:

  • ある機能が後方互換のない方法で改良、修正された場合、古い機能,動作は非推奨となります。

  • Sphinxが現在サポートしているPythonのバージョンで収録されていないPythonライブラリを,Sphinxはバックポートとして収録することがあります。Pythonの旧バージョンで,当該ライブラリを収録していないものについてサポートをSphinxが打ち切るときに、そのライブラリはSphinxで非推奨となります。

As the 非推奨についての方針 describes, the first release of Sphinx that deprecates a feature (A.B) should raise a RemovedInSphinxXXWarning (where XX is the Sphinx version where the feature will be removed) when the deprecated feature is invoked. Assuming we have good test coverage, these warnings are converted to errors when running the test suite with warnings enabled:

pytest -Wall

Thus, when adding a RemovedInSphinxXXWarning you need to eliminate or silence any warnings generated when running the tests.

非推奨についての方針

MAJOR and MINOR releases may deprecate certain features from previous releases. If a feature is deprecated in a release A.x, it will continue to work in all A.x.x versions (for all versions of x). It will continue to work in all B.x.x versions but raise deprecation warnings. Deprecated features will be removed at the C.0.0. It means the deprecated feature will work during 2 MAJOR releases at least.

So, for example, if we decided to start the deprecation of a function in Sphinx 2.x:

  • Sphinx 2.x will contain a backwards-compatible replica of the function which will raise a RemovedInSphinx40Warning. This is a subclass of PendingDeprecationWarning, i.e. it will not get displayed by default.

  • Sphinx 3.x will still contain the backwards-compatible replica, but RemovedInSphinx40Warning will be a subclass of DeprecationWarning then, and gets displayed by default.

  • Sphinx 4.0 will remove the feature outright.

Deprecation warnings

Sphinx will enable its RemovedInNextVersionWarning warnings by default, if PYTHONWARNINGS is not set. Therefore you can disable them using:

  • PYTHONWARNINGS= make html (Linux/Mac)

  • export PYTHONWARNINGS= として、 make html を実行する(Linux/Mac)

  • set PYTHONWARNINGS= として ``make html``を実行する(Windows)

But you can also explicitly enable the pending ones using e.g. PYTHONWARNINGS=default (see the Python docs on configuring warnings) for more details.

Release procedures

The release procedures are listed in utils/release-checklist.