feat(extract): TOML strategies for pyproject.toml + Cargo.toml (deferred from #213) #252
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#252
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Capability follow-up deferred from #213. #213 closes the immediate validate-passes-but-extract-fails mismatch with a config-time basename-supportedness gate (option b); this tracker is the capability-add (option a) — extend the extractable set to TOML-pinned versions.
Scope
Add version-file strategies for:
pyproject.toml(python): version at[project] version(PEP 621) or[tool.poetry] version(Poetry). Read precedence:.project.version // .tool.poetry.version.Cargo.toml(rust): version at[package] version.Two sites must both gain the strategy (they are decoupled from
release_type— both key on the version_file basename):scripts/manifest-check.sh(lockstep-verify the file's version against the tag/manifest).scripts/release-prep.sh§8 (bump the version in the file during a cut).When this lands, add the new basenames to #213's
config_validateallowlist (the set just grows — additive, no rework).Recon context (from #213, Engineer)
tomlq3.4.3 is available (kislyuk yq's TOML sibling) —tomlq -r '.project.version // .tool.poetry.version' pyproject.toml,tomlq -r '.package.version' Cargo.toml. Confirmtomlqis baked into the CI runner image (yq/tomlq ship in the same pip package; yq is baked per the forgejo-ci-go note) before relying on it in the reusable workflow.jqround-trip (JSON has no comments). A TOML round-trip (tomlq→json→toml) would destroy human-curated comments + formatting — unacceptable for maintainer-editedpyproject.toml/Cargo.toml. Needs either a table-awaresedon theversion = "..."line (must scope to the correct table —[project]/[package]— not aversionkey in another table) or a dedicated comment-preserving TOML editor dep (tomlkit / dasel). Build + validate against a real consumer's formatting expectations, not speculatively (the reason this was deferred).pyproject.toml-only (read + write), deferCargo.toml, if scope-constrained — python is the likelier near-term consumer.*)branch already says "extend in v0.2", and manifest-check's*)says "v0.1 supports VERSION + package.json" — both are the extension points.Composition
version_files: [](tag-is-version) and never hit the gap.priority/low · size/M
Closing SUPERSEDED-BY-EVOLUTION per operator ratify 2026-07-02.
Tracker body: Engaged by: a real python or rust consumer adopting the toolkit. Until then, those projects use
version_files: []and never hit the gap. No such consumer exists empirically. Building speculative capability without demand is the wrong shape.Defer-if-consumer-emerges: when a python/rust project actually adopts release-toolkit and hits the TOML pinning gap, file fresh with concrete requirements from that real consumer. Retroactively closing rather than carrying speculative capability.