Skip to content

Commit bf12bd4

Browse files
masenfclaude
andauthored
Prepare Python 3.11 floors and phased 0.10 prereleases (#7464)
* Prepare Python 3.11 floors and directional prerelease phases * Simplify directional lockstep planning A publish-last member now needs only the early members of its group, tagged at its own version: it plans from its own baseline, reuses a sibling tag that already exists, and otherwise plans the sibling at the same version. Early members release on their own. Two publish-last members no longer need each other, so pin-exact groups with several cannot deadlock on each other's tags. Planning computes targets first and checks the dependency pins of what it planned, holding back blocked packages and the packages that need them; an explicit selection that cannot release fails as before. The exact pin is checked against the declared requirement at plan time as well as at build time, so a floor raised past a reusable sibling tag stops the release before any changelog is bumped. prepare-publish requires every early member's tag before a publish-last member builds. Sibling floors use the .dev0 of each sibling's next version, and the docs, template comments and news fragments say the same thing in fewer words. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MZxGmMwCvKGcUJu6TK99jZ * Hold back blocked packages before planning their versions The planner skips a package with an unsatisfiable pin instead of computing its next version, so a release action that does not apply to a held dependent no longer stops its sibling's release. Blocked pins are gathered once for the selection and its lockstep partners; a dependent whose missing partner is blocked is held back with it, and a partner reused from an existing tag is not consulted at all. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MZxGmMwCvKGcUJu6TK99jZ * Delete packages/reflex-hosting-cli/news/+sdk-minor-compatibility.misc.md * Say which tags the publish-last leg waits for The workflow comment described the late leg as waiting on every package in the batch; it runs after the first leg, but the gate is the tags of the siblings each late member pins. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MZxGmMwCvKGcUJu6TK99jZ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 052ca91 commit bf12bd4

33 files changed

Lines changed: 699 additions & 193 deletions

File tree

‎.github/workflows/dispatch_release.yml‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ name: Dispatch release
1212
# Selecting no package auto-selects the ones to release: those with pending
1313
# news fragments — or, for release-from-prerelease, those whose changelog is
1414
# topped by an alpha (the train's fragments are already consumed). Lockstep
15-
# groups share one checkbox: their members only ever release together.
15+
# groups without publish-last share one checkbox: their members only ever
16+
# release together. With publish-last, each member has its own.
1617
#
1718
# Materializing also lifts each released package's unshippable dependency
1819
# floors — a *.dev pin, and a prerelease pin when the version is final — to the
@@ -75,13 +76,17 @@ on:
7576
- release-minor
7677
- release-major
7778
reflex:
78-
description: "reflex (with reflex-base)"
79+
description: "reflex"
7980
type: boolean
8081
default: false
8182
hatch_reflex_pyi:
8283
description: "hatch-reflex-pyi"
8384
type: boolean
8485
default: false
86+
reflex_base:
87+
description: "reflex-base"
88+
type: boolean
89+
default: false
8590
reflex_build_sdk:
8691
description: "reflex-build-sdk"
8792
type: boolean
@@ -186,8 +191,9 @@ jobs:
186191
# Each unselected package contributes an empty string, so selecting
187192
# nothing leaves PACKAGES blank and the planner auto-selects.
188193
PACKAGES: >-
189-
${{ inputs.reflex && 'reflex,reflex-base' || '' }}
194+
${{ inputs.reflex && 'reflex' || '' }}
190195
${{ inputs.hatch_reflex_pyi && 'hatch-reflex-pyi' || '' }}
196+
${{ inputs.reflex_base && 'reflex-base' || '' }}
191197
${{ inputs.reflex_build_sdk && 'reflex-build-sdk' || '' }}
192198
${{ inputs.reflex_components_code && 'reflex-components-code' || '' }}
193199
${{ inputs.reflex_components_core && 'reflex-components-core' || '' }}

‎.github/workflows/release_from_changelog.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ name: Release from changelog
1919
# r/pre-* or r/hotfix/** (the Dispatch release workflow
2020
# materializes alphas on r/pre-* branches).
2121
#
22-
# Lockstep packages that pin their siblings exactly publish strictly after
23-
# every other package in the batch; detect fails closed if a lockstep
24-
# invariant is broken.
22+
# Lockstep packages that pin their siblings exactly publish in a second leg,
23+
# after the rest of the batch, and only once the siblings they pin are tagged;
24+
# detect fails closed if a lockstep invariant is broken.
2525
#
2626
# workflow_dispatch exists so the Dispatch release workflow can trigger a
2727
# check on a branch it just pushed (pushes made with GITHUB_TOKEN do not fire

‎CONTRIBUTING.md‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,17 @@ a release branch — never by tagging manually. The pieces:
115115
`release-from-prerelease` collapses the accumulated alpha sections into
116116
one final-version section — alpha headings never ship in a final
117117
changelog.
118-
- `reflex` and `reflex-base` are a lockstep pair and share one checkbox:
119-
selecting it releases both at the same version. The checkboxes are
120-
generated from the package list, so adding or removing a package means
121-
re-running `uv run reflex-release sync`.
118+
- `reflex` and `reflex-base` are a lockstep pair with separate checkboxes:
119+
`reflex-base` releases on its own, while `reflex` needs `reflex-base`
120+
tagged at the same version — reusing an existing tag or releasing base
121+
alongside. The checkboxes are generated from the package list, so adding
122+
or removing a package means re-running `uv run reflex-release sync`.
122123
2. **Release from changelog** (`release_from_changelog.yml`) runs on every push
123124
to `main`, `r/pre-*`, and `r/hotfix/**`: any package whose newest changelog
124125
version has no git tag gets built and queued for publishing. Final
125126
(non-alpha) versions only publish from `main` or `r/hotfix/**`; alphas only
126-
from `r/pre-*`/`r/hotfix/**`. `reflex` and `reflex-base` are checked as a
127-
lockstep pair and `reflex` publishes only after the rest of the batch.
127+
from `r/pre-*`/`r/hotfix/**`. `reflex` publishes only after the rest of the
128+
batch, once its `reflex-base` tag exists.
128129
3. **Publish to PyPI** (`publish.yml`, also manually dispatchable with a
129130
package + version) validates and builds without privileges, then **waits
130131
for a human to approve the `pypi` environment deployment** — every upload,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Require sibling package versions from the Python 3.11 release train.

‎packages/reflex-components-code/pyproject.toml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ classifiers = [
1616
"Programming Language :: Python :: 3.15",
1717
]
1818
dependencies = [
19-
"reflex-base >= 0.9.0",
20-
"reflex-components-core >= 0.9.0",
21-
"reflex-components-lucide >= 0.9.0",
22-
"reflex-components-radix >= 0.9.0",
19+
"reflex-base >= 0.10.0a2.dev0",
20+
"reflex-components-core >= 0.10.0a2.dev0",
21+
"reflex-components-lucide >= 1.0.5.dev0",
22+
"reflex-components-radix >= 0.10.0a2.dev0",
2323
]
2424

2525
[tool.hatch.version]

‎packages/reflex-components-core/pyproject.toml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ classifiers = [
1616
"Programming Language :: Python :: 3.15",
1717
]
1818
dependencies = [
19-
"reflex-base >= 0.10.0a1",
20-
"reflex-components-lucide >= 0.9.0",
21-
"reflex-components-sonner >= 0.9.0",
19+
"reflex-base >= 0.10.0a2.dev0",
20+
"reflex-components-lucide >= 1.0.5.dev0",
21+
"reflex-components-sonner >= 0.9.5.dev0",
2222
"python_multipart >= 0.0.21",
2323
"starlette >= 0.47.0",
2424
"typing_extensions >= 4.0.0",

‎packages/reflex-components-dataeditor/pyproject.toml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ classifiers = [
1616
"Programming Language :: Python :: 3.15",
1717
]
1818
dependencies = [
19-
"reflex-base >= 0.9.12",
20-
"reflex-components-core >= 0.9.0",
19+
"reflex-base >= 0.10.0a2.dev0",
20+
"reflex-components-core >= 0.10.0a2.dev0",
2121
]
2222

2323
[tool.hatch.version]

‎packages/reflex-components-gridjs/pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ classifiers = [
1515
"Programming Language :: Python :: 3.14",
1616
"Programming Language :: Python :: 3.15",
1717
]
18-
dependencies = ["reflex-base >= 0.9.12"]
18+
dependencies = ["reflex-base >= 0.10.0a2.dev0"]
1919

2020
[tool.hatch.version]
2121
source = "uv-dynamic-versioning"

‎packages/reflex-components-lucide/pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ classifiers = [
1515
"Programming Language :: Python :: 3.14",
1616
"Programming Language :: Python :: 3.15",
1717
]
18-
dependencies = ["reflex-base >= 0.9.0"]
18+
dependencies = ["reflex-base >= 0.10.0a2.dev0"]
1919

2020
[tool.hatch.version]
2121
source = "uv-dynamic-versioning"

‎packages/reflex-components-markdown/pyproject.toml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ classifiers = [
1616
"Programming Language :: Python :: 3.15",
1717
]
1818
dependencies = [
19-
"reflex-base >= 0.9.12",
20-
"reflex-components-code >= 0.9.0",
21-
"reflex-components-core >= 0.9.0",
22-
"reflex-components-radix >= 0.9.0",
19+
"reflex-base >= 0.10.0a2.dev0",
20+
"reflex-components-code >= 0.10.0a2.dev0",
21+
"reflex-components-core >= 0.10.0a2.dev0",
22+
"reflex-components-radix >= 0.10.0a2.dev0",
2323
]
2424

2525
[tool.hatch.version]

0 commit comments

Comments
 (0)