diff --git a/scripts/populate_tox/README.md b/scripts/populate_tox/README.md index aa9884387e..6742ce2d4a 100644 --- a/scripts/populate_tox/README.md +++ b/scripts/populate_tox/README.md @@ -44,10 +44,16 @@ integration_name: { rule1: [package1, package2, ...], rule2: [package3, package4, ...], }, - "python": python_version_specifier, + "python": version_specifier, + "ignore": version_specifier, } ``` +When talking about version specifiers, we mean +[version specifiers as defined](https://packaging.python.org/en/latest/specifications/version-specifiers/#id5) +by the Python Packaging Authority. See also the actual implementation +in `[packaging.specifiers](https://packaging.pypa.io/en/stable/specifiers.html)`. + ### `package` The name of the third party package as it's listed on PyPI. The script will @@ -118,6 +124,22 @@ metadata or the SDK is explicitly not supporting some packages on specific Python versions (because of, for example, broken context vars), the `python` key can be used. +### `ignore` + +Sometimes there are versions of packages that we explicitly don't want to test. +One example is Starlite, which has two alpha prereleases of version 2.0.0, but +there will never will be a stable 2.0 release, since development on Starlite +has stopped and Starlite 2.0 eventually became Litestar. + +The value of the `ignore` key expects a version specifier defining which +versions should not be considered for testing. + +```python +"starlite": { + "ignore": ">=2.0", + ... +} +``` ## How-Tos diff --git a/scripts/populate_tox/config.py b/scripts/populate_tox/config.py index 2c2920e7ac..f82233eef9 100644 --- a/scripts/populate_tox/config.py +++ b/scripts/populate_tox/config.py @@ -129,6 +129,7 @@ ], }, "python": "<=3.11", + "ignore": "==2.0.0a1,==2.0.0a2", # the project ultimately renamed itself to litestar and these are not relevant as there will never be a stable 2.0 release }, "statsig": { "package": "statsig", diff --git a/scripts/populate_tox/populate_tox.py b/scripts/populate_tox/populate_tox.py index 3298b612c3..64e1b49e8b 100644 --- a/scripts/populate_tox/populate_tox.py +++ b/scripts/populate_tox/populate_tox.py @@ -130,6 +130,12 @@ def _prefilter_releases( f" {integration} doesn't have a minimum version defined in sentry_sdk/integrations/__init__.py. Consider defining one" ) + ignored_versions = set() + if TEST_SUITE_CONFIG[integration].get("ignore") is not None: + ignored_versions = SpecifierSet( + TEST_SUITE_CONFIG[integration]["ignore"], prereleases=True + ) + filtered_releases = [] last_prerelease = None @@ -147,10 +153,11 @@ def _prefilter_releases( if min_supported and version < min_supported: continue - if version.is_postrelease: + if version.is_postrelease or version.is_devrelease: continue - # If we made it here, we want to consider this release. + if version in ignored_versions: + continue if version.is_prerelease: if last_prerelease is None or version > last_prerelease: @@ -173,8 +180,9 @@ def _prefilter_releases( # Check if the latest prerelease is relevant (i.e., it's for a version higher # than the last released version); if not, don't consider it - if last_prerelease is not None and last_prerelease > filtered_releases[-1]: - return filtered_releases, last_prerelease + if last_prerelease is not None: + if not filtered_releases or last_prerelease > filtered_releases[-1]: + return filtered_releases, last_prerelease return filtered_releases, None diff --git a/tox.ini b/tox.ini index 4ed6285936..83ba318643 100644 --- a/tox.ini +++ b/tox.ini @@ -246,7 +246,6 @@ envlist = {py3.8,py3.9}-spark-v3.2.4 {py3.8,py3.10,py3.11}-spark-v3.4.4 {py3.8,py3.10,py3.11}-spark-v3.5.4 - {py3.9,py3.11,py3.12}-spark-v4.0.0.dev2 # ~~~ Web 1 ~~~ @@ -647,7 +646,6 @@ deps = spark-v3.2.4: pyspark==3.2.4 spark-v3.4.4: pyspark==3.4.4 spark-v3.5.4: pyspark==3.5.4 - spark-v4.0.0.dev2: pyspark==4.0.0.dev2 # ~~~ Web 1 ~~~