Skip to content

Commit 7200194

Browse files
chore(release): pin pyproject to 0.7.0rc1 + fix RELEASING.md (#59)
* chore(release): pin pyproject to 0.7.0rc1 + fix RELEASING.md The v0.7.0-rc1 release workflow failed at the version-match validator because pyproject.toml carried "0.7.0" but the tag normalizes to "0.7.0rc1". Bump pyproject (and the mirrored __version__ and smoke-test assertion) to the rc form so the tag can be re-pushed and the workflow can proceed to publish. Fix RELEASING.md to match what the workflow actually checks: - The pre-release checklist now says the pyproject version must match the tag after PEP 440 normalization, calls out that the rc and real-release bumps are separate commits, and lists the mirrored files that also need updating. - The "Tagging the real release" section now includes the bump-to- final-version commit step before tagging. - The "Iterating on an rc" section spells out the per-bump commit pattern and documents the recoverable tag-delete path for rcs that fail before reaching a publish step. * docs(releasing): align bump examples with PR-first flow CoPilot caught two issues in the new RELEASING.md sections: - The "Tagging the real release" example used "chore(release): bump to v0.7.0" while the convention stated earlier in the doc is "chore(release): vX.Y.Z". Aligned the example. - The same section's shell block conflated the local commit, PR, and tag steps. Since the repo doesn't allow direct push to main, the bump always lands via PR. Restructured to match the "Tagging the rc" pattern: prose lists the files to update, then a separate code block shows only the tag-and-push commands assuming main is already updated. Applied the same shape to "Iterating on an rc" since it had the same issue.
1 parent 6423990 commit 7200194

5 files changed

Lines changed: 44 additions & 13 deletions

File tree

RELEASING.md

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,17 @@ changelog entry.
4646
version bump. Common spots: `README.md`, `docs/concepts/*`,
4747
`docs/getting-started/index.md`, `docs/reference/index.md`,
4848
in-code help text.
49-
- [ ] **`pyproject.toml` version pinned.** Set `project.version` to the
50-
target version, e.g. `0.7.0`. The PEP 440 form (`0.7.0rc1` or
51-
`0.7.0`) and the tag form (`v0.7.0-rc1` or `v0.7.0`) are
52-
normalized to the same value, so either is accepted in the
53-
`pyproject` field; the tag uses the dash form for readability.
49+
- [ ] **`pyproject.toml` version pinned to the tag we're about to push.**
50+
The release workflow validates that the pyproject version equals
51+
the tag after PEP 440 normalization. Concretely:
52+
- For an rc tag like `v0.7.0-rc1`, set `project.version =
53+
"0.7.0rc1"` (or `"0.7.0-rc1"`; both normalize to `0.7.0rc1`).
54+
- For the real-release tag `v0.7.0`, set `project.version =
55+
"0.7.0"`.
56+
The rc and real-release pyproject bumps are SEPARATE COMMITS —
57+
one before each tag — because the normalized forms differ.
58+
Also update `src/openarmature/__init__.py`'s `__version__` and
59+
`tests/test_smoke.py`'s version assertion in the same commit.
5460
- [ ] **Branch state.** On `main`, clean working tree, latest pulled.
5561
Release tags should point at commits already on `main`.
5662
- [ ] **CI is green on `main`.** The release workflow's `test` job
@@ -109,7 +115,16 @@ to the real-release tag with an unverified rc.
109115

110116
## Tagging the real release
111117

112-
After the rc is verified, the real release is one tag away:
118+
After the rc is verified, prepare the real-release bump as a
119+
separate PR. Update:
120+
121+
- `pyproject.toml`: `version = "0.7.0"`
122+
- `src/openarmature/__init__.py`: `__version__ = "0.7.0"`
123+
- `tests/test_smoke.py`: the version assertion
124+
- `CHANGELOG.md`: refresh the date if it drifted from today
125+
126+
Commit as `chore(release): v0.7.0`, open a PR, and merge once CI is
127+
green. Then from a freshly-pulled `main`:
113128

114129
```bash
115130
git tag v0.7.0
@@ -136,11 +151,20 @@ After the workflow finishes:
136151

137152
## Iterating on an rc
138153

139-
If the rc reveals an issue, **never move the existing rc tag**. PyPI
140-
and TestPyPI treat versions as immutable; bump the rc counter instead.
154+
If the rc reveals an issue **after it has published to TestPyPI**,
155+
never move the existing rc tag. PyPI and TestPyPI treat versions as
156+
immutable; bump the rc counter instead. Each rc bump is its own PR
157+
because the pyproject version has to track the new tag. Fix the
158+
bug, then update:
159+
160+
- `pyproject.toml`: `version = "0.7.0rc2"`
161+
- `src/openarmature/__init__.py`: `__version__ = "0.7.0rc2"`
162+
- `tests/test_smoke.py`: the version assertion
163+
164+
Commit as `chore(release): v0.7.0-rc2`, open a PR, and merge once
165+
CI is green. Then from a freshly-pulled `main`:
141166

142167
```bash
143-
# Fix the bug, commit it.
144168
git tag v0.7.0-rc2
145169
git push origin v0.7.0-rc2
146170
```
@@ -149,6 +173,13 @@ Repeat verification against the new rc. Two or three rc iterations is
149173
fine. If the same issue keeps recurring, that's a signal to step back
150174
and address the design rather than spin more rc tags.
151175

176+
If an rc tag fails the release workflow's pre-publish checks (e.g.,
177+
the version-match validator) so that nothing was uploaded to
178+
TestPyPI, the tag is recoverable: nothing is immutable on PyPI yet.
179+
Land the fix on `main`, delete the tag from origin (`git push origin
180+
:refs/tags/v0.7.0-rcN`), and re-tag the fix commit. Only do this when
181+
you're certain the workflow did not reach a publish step.
182+
152183
## Rollback
153184

154185
PyPI does not allow re-uploading the same version. If a real release

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "openarmature"
7-
version = "0.7.0"
7+
version = "0.7.0rc1"
88
description = "Workflow framework for LLM pipelines and tool-calling agents."
99
readme = "README.md"
1010
requires-python = ">=3.12"

src/openarmature/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
"""OpenArmature: workflow framework for LLM pipelines and tool-calling agents."""
22

3-
__version__ = "0.7.0"
3+
__version__ = "0.7.0rc1"
44
__spec_version__ = "0.16.1"

tests/test_smoke.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
def test_package_versions() -> None:
11-
assert openarmature.__version__ == "0.7.0"
11+
assert openarmature.__version__ == "0.7.0rc1"
1212
assert openarmature.__spec_version__ == "0.16.1"
1313

1414

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)