-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Description
This is a tracker issue for a general problem I've been trying to solve; to put it simply, I'm trying to make oldestdeps ci runs reproducible, i.e., have the tested environment stay exactly the same from one run to the next, eliminating a failure mode where newer versions of transitive dependencies break direct ones.
#16963 was a huge milestone towards this goal, but it's not sufficient in itself: transitive dependencies are still resolved to latest versions, which is not only orthogonal to the purpose of oldestdeps, but also actively harmful in the long run, as it leaves many opportunities for incompatibilities with our direct dependencies to creep in and bring oldestdeps down.
Exact reproducibility can be achieved with lock files (as described in #17596). However, there's another viable and, perhaps, more elegant strategy in the case of oldestdeps: we could leverage uv's --resolution=lowest, instead of the current --resolution=lowest-direct, which doesn't constrain transitive deps.
Getting there requires a coordination effort with upstream packages that currently do not declare lower bounds for their own direct dependencies (or have incorrect ones), which we've already started conducting.
It might take a while for upstream dependencies to absorb all contributions, and for us to be able to sufficiently bump our direct dependencies to benefit from it, but in the mean time, we have the ability to add the missing pieces of metadata to [tool.uv.constraints] to benefit immediately from the work done.
upstream
- Specify minimum requirements for dependencies pytest-dev/pytest#13317
- DEP: bump minimal requirements for iniconfig (1.0.0 -> 1.0.1) and packaging (20.0.0 -> 22.0.0) pytest-dev/pytest#13791
- DEP: update and add missing lower bounds on direct dependencies ipython/ipython#15041
- TST: add systematic backward compatibility checks against oldest supported versions of direct dependencies ipython/ipython#15054
- MNT/DEP: migrate static package metadata to pyproject.toml and add missing lower bounds on direct dependencies matplotlib/pytest-mpl#252
- DEP: bump minimal requirement on ptyprocess to avoid source builds (0.5.0 -> 0.5.1) pexpect/pexpect#822
- DEP: set missing minimal requirement on pure_eval (require >=0.1.0 as the first version with a wheel) alexmojaki/stack_data#61
- DEP: set missing minimal requirement on wcwidth (require >=0.1.4 as the first version with a wheel) prompt-toolkit/python-prompt-toolkit#2036
- https://code.launchpad.net/~neutrinoceros/beautifulsoup/+git/beautifulsoup/+merge/495860
- DEP: bump minimal requirement on toolz (0.10.0 -> 0.12.0) dask/dask#12163
local
- TST: have
oldestdepstrully pin every direct dependency usinguv's--resolution=lowest-direct#16963 - Update
sortedcontainersversion requirement #18175 - TST/DEP: add missing env resolution constraints to make oldestdeps platform-portable #18693
- TST/DEP: set direct requirements on test dependencies with accurate lower bounds #18780
- TST/DEP: add version constraints on IPython's direct dependencies #18834
- TST/DEP: bump minimal requirement on
pytest-xdist(2.5.0 -> 3.6.0) #18838 - TST/DEP: drop pre-commit as a Python (test) dependency #18860
- TST/DEP: bump minimal requirement on
pytest-astropyto 0.11.0 #18896 - TST/DEP: add
contourpyandpillowto the list of package we never want to build #18897 - TST: switch dependency resolution for
oldestdepsfromlowest-directtolowest#18913 - TST: avoid building indirect dependencies from the
allextra viatool.uv.no-build-package#18949 - TST/DEP: bump minimal requirement on
pytest-mplto 0.18.0 #18950 - TST: simplify a warning-capturing test #18954
- TST/DEP: add missing resolution constraints for the
allextra #18955 - TST/DEP: bump minimal requirement on
pytest(8.0.0 -> 8.0.1) #18956 - EXP: make
oldestdepsCI reproducible #19000 - DEP: bump minimal (optional) requirement on
asdf-astropy(0.3.0->0.7.0) #19002