Skip to content

Commit f1712d2

Browse files
sentrivanaclaude
andcommitted
fix(tox): Make -latest alias point to highest stable release, not prerelease
If the highest tested version is a prerelease (rc, alpha, beta), the -latest alias now points to the highest stable version instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent cbe60a3 commit f1712d2

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

scripts/populate_tox/populate_tox.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -760,18 +760,30 @@ def write_tox_file(packages: dict) -> None:
760760
for group, integrations in packages.items():
761761
context["groups"][group] = []
762762
for integration in integrations:
763+
# Find the highest stable (non-prerelease) release for the
764+
# -latest alias. Prereleases are always appended last by
765+
# pick_releases_to_test, so we walk backwards.
766+
latest_stable = None
767+
for rel in reversed(integration["releases"]):
768+
if not rel.is_prerelease:
769+
latest_stable = rel
770+
break
771+
763772
context["groups"][group].append(
764773
{
765774
"name": integration["name"],
766775
"package": integration["package"],
767776
"extra": integration["extra"],
768777
"releases": integration["releases"],
778+
"latest_stable": latest_stable,
769779
"dependencies": _render_dependencies(
770780
integration["name"], integration["releases"]
771781
),
772782
"latest_dependencies": _render_latest_dependencies(
773-
integration["name"], integration["releases"][-1]
774-
),
783+
integration["name"], latest_stable
784+
)
785+
if latest_stable
786+
else [],
775787
}
776788
)
777789
context["testpaths"].append(

scripts/populate_tox/tox.jinja

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ envlist =
6161
{% for release in integration.releases %}
6262
{{ release.rendered_python_versions }}-{{ integration.name }}-v{{ release }}
6363
{% endfor %}
64-
{{ integration.releases[-1].rendered_python_versions }}-{{ integration.name }}-latest
64+
{% if integration.latest_stable %}
65+
{{ integration.latest_stable.rendered_python_versions }}-{{ integration.name }}-latest
66+
{% endif %}
6567

6668
{% endfor %}
6769

@@ -144,10 +146,12 @@ deps =
144146
{{ integration.name }}-v{{ release }}: {{ integration.package }}=={{ release }}
145147
{% endif %}
146148
{% endfor %}
149+
{% if integration.latest_stable %}
147150
{% if integration.extra %}
148-
{{ integration.name }}-latest: {{ integration.package }}[{{ integration.extra }}]=={{ integration.releases[-1] }}
151+
{{ integration.name }}-latest: {{ integration.package }}[{{ integration.extra }}]=={{ integration.latest_stable }}
149152
{% else %}
150-
{{ integration.name }}-latest: {{ integration.package }}=={{ integration.releases[-1] }}
153+
{{ integration.name }}-latest: {{ integration.package }}=={{ integration.latest_stable }}
154+
{% endif %}
151155
{% endif %}
152156
{% for dep in integration.dependencies %}
153157
{{ dep }}

tox.ini

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ envlist =
184184
{py3.6,py3.11,py3.12}-sqlalchemy-v1.4.54
185185
{py3.7,py3.12,py3.13}-sqlalchemy-v2.0.48
186186
{py3.10,py3.13,py3.14,py3.14t}-sqlalchemy-v2.1.0b1
187-
{py3.10,py3.13,py3.14,py3.14t}-sqlalchemy-latest
187+
{py3.7,py3.12,py3.13}-sqlalchemy-latest
188188

189189

190190
# ~~~ Flags ~~~
@@ -213,7 +213,7 @@ envlist =
213213
{py3.6,py3.9,py3.10}-gql-v3.4.1
214214
{py3.9,py3.12,py3.13}-gql-v4.0.0
215215
{py3.9,py3.13,py3.14,py3.14t}-gql-v4.3.0b0
216-
{py3.9,py3.13,py3.14,py3.14t}-gql-latest
216+
{py3.9,py3.12,py3.13}-gql-latest
217217

218218
{py3.6,py3.9,py3.10}-graphene-v3.3
219219
{py3.8,py3.12,py3.13}-graphene-v3.4.3
@@ -615,7 +615,7 @@ deps =
615615
sqlalchemy-v1.4.54: sqlalchemy==1.4.54
616616
sqlalchemy-v2.0.48: sqlalchemy==2.0.48
617617
sqlalchemy-v2.1.0b1: sqlalchemy==2.1.0b1
618-
sqlalchemy-latest: sqlalchemy==2.1.0b1
618+
sqlalchemy-latest: sqlalchemy==2.0.48
619619

620620

621621
# ~~~ Flags ~~~
@@ -648,7 +648,7 @@ deps =
648648
gql-v3.4.1: gql[all]==3.4.1
649649
gql-v4.0.0: gql[all]==4.0.0
650650
gql-v4.3.0b0: gql[all]==4.3.0b0
651-
gql-latest: gql[all]==4.3.0b0
651+
gql-latest: gql[all]==4.0.0
652652

653653
graphene-v3.3: graphene==3.3
654654
graphene-v3.4.3: graphene==3.4.3
@@ -672,7 +672,7 @@ deps =
672672
grpc-v1.62.3: grpcio==1.62.3
673673
grpc-v1.78.0: grpcio==1.78.0
674674
grpc-v1.80.0rc1: grpcio==1.80.0rc1
675-
grpc-latest: grpcio==1.80.0rc1
675+
grpc-latest: grpcio==1.78.0
676676
grpc: protobuf
677677
grpc: mypy-protobuf
678678
grpc: types-protobuf
@@ -707,7 +707,7 @@ deps =
707707
beam-v2.14.0: apache-beam==2.14.0
708708
beam-v2.71.0: apache-beam==2.71.0
709709
beam-v2.72.0rc2: apache-beam==2.72.0rc2
710-
beam-latest: apache-beam==2.72.0rc2
710+
beam-latest: apache-beam==2.71.0
711711
beam: dill
712712

713713
celery-v4.4.7: celery==4.4.7
@@ -794,7 +794,7 @@ deps =
794794
starlette-v0.40.0: starlette==0.40.0
795795
starlette-v0.52.1: starlette==0.52.1
796796
starlette-v1.0.0rc1: starlette==1.0.0rc1
797-
starlette-latest: starlette==1.0.0rc1
797+
starlette-latest: starlette==0.52.1
798798
starlette: pytest-asyncio
799799
starlette: python-multipart
800800
starlette: requests

0 commit comments

Comments
 (0)