Skip to content

TST: how to drop CPython 3.8 ? #4302

@neutrinoceros

Description

@neutrinoceros

⚠️ Disclaimer
I am not proposing to drop support for CPython 3.8 now. I just want to point out why this will be difficult because it'll need to happen eventually, and the sooner we prepare for it, the easier it'll be.

Timeline: when can we expect to drop it ?

To ensure the total number of versions we support at any given time stays bounded, and as long as new versions of CPython keep dropping yearly, we need to drop 1 version per year to keep up.
Following this motivation, the drop typically happens around the same time of year that a new version is released (see #2917 and #4101 for history), so the typical expectation would be that we do this around October 2023.

Were we to closely follow NEP 29 (which so far we have not, so it shouldn't be expected from us), it could be done as soon as April 2023.

Problem

CPython 3.8 is our oldest supported version at the moment, and is currently used for testing on Jenkins. This means we need to upgrade the Python runtime on CI before we are allowed to bump requires-python in pyproject.toml. I expect this may be difficult and/or time consuming because all our answer-tests and image tests that rely on actual simulation data are run there, and many (not sure exactly which) of them use pickle for reference storage. Now, Python objects saved to disk with pickle are not guaranteed to be interoperable with different versions of the python runtime, so it is possible that some references cannot be salvaged and must be regenerated from scratch (then validated manually ?).

To make things worse, the most we can upgrade these jobs is to Python 3.9, because newer versions (3.10+) are just not compatible with the test framework used for these tests (nose).

It follows that dropping 3.9 (around October 2024 ?) will not be possible without leaving some of our test suite behind unless we can finish the migration to pytest before then, but that's an other story (sort of).

So I'd like to open the discussion as soon as possible, mostly with @Xarthisius who's still in the delicate position of being our only Jenkins maintainer, and @matthewturk, who's most aware of the issues we're having with transition to pytest.

I think (maybe naively ?) that we can afford doing only minimal manual validation for answers on Python 3.9 (the code base has been extensively tested on Python 3.9 for years now), which would make the process easier.
The better solution of course would be to push for the migration to pytest but that seems like an unreasonable amount of work for this timeline, given the history of this project.

Thoughts ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions