Skip to content

Commit e09e0a0

Browse files
kurodo3[bot]claude
andcommitted
fix: correct release architecture in spec — crates.io for Rust, no maturin
The spec described the wrong release flow: maturin building Python wheels from the Rust repo and publishing them to PyPI. The correct architecture: - starfix (Rust) → crates.io via cargo-release (publish = true) - starfix-python (Python) → PyPI via publish.yml (unchanged) Update the spec to reflect: - release.toml: publish = true (not false) - CI job is in ci.yml (not maturin-release.yml) - Release workflow passes CARGO_REGISTRY_TOKEN - End-to-end description: cargo-release publishes crate to crates.io; tag push fires ci.yml (tests + version/tag sync), not wheel builds Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 633db5f commit e09e0a0

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

docs/metamorphic/specs/2026-06-18-golden-vector-parity-design.md

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -239,21 +239,22 @@ pushes both — making it structurally impossible to tag without also updating `
239239
pre-release-commit-message = "chore: release v{{version}}"
240240
tag-name = "v{{version}}"
241241
push = true
242-
publish = false # wheels go via maturin, not crates.io
242+
publish = true # cargo-release publishes the crate to crates.io
243243
```
244244

245-
### `cargo-release` CI enforcement (new job in `maturin-release.yml`)
245+
### `cargo-release` CI enforcement (`verify-version-tag-sync` job in `ci.yml`)
246246

247247
A lightweight check that runs on every tag push and fails if the tag name does not match
248248
the version in `Cargo.toml`:
249249

250250
```yaml
251251
verify-version-tag-sync:
252252
runs-on: ubuntu-latest
253-
if: startsWith(github.ref, 'refs/tags/')
254253
steps:
255-
- uses: actions/checkout@v4
254+
- if: startsWith(github.ref, 'refs/tags/')
255+
uses: actions/checkout@v4
256256
- name: Verify Cargo.toml version matches tag
257+
if: startsWith(github.ref, 'refs/tags/')
257258
run: |
258259
TAG="${GITHUB_REF#refs/tags/v}"
259260
CARGO_VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*= *"\(.*\)"/\1/')
@@ -267,6 +268,9 @@ verify-version-tag-sync:
267268

268269
#### `nauticalab/starfix` — new `.github/workflows/release.yml`
269270

271+
`cargo-release` publishes the **Rust crate** to crates.io. The Python package `starfix`
272+
is a separate project and is released exclusively through `nauticalab/starfix-python`.
273+
270274
```yaml
271275
name: release
272276
on:
@@ -305,18 +309,20 @@ jobs:
305309
306310
- name: Release
307311
run: cargo release ${{ inputs.version }} --execute --no-confirm
312+
env:
313+
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
308314
```
309315

310316
A GitHub App token (rather than `GITHUB_TOKEN`) is required for checkout so that the tag
311-
push from `cargo-release` triggers the downstream `maturin-release.yml` workflow.
317+
push from `cargo-release` triggers the downstream `ci.yml` workflow.
312318
`GITHUB_TOKEN`-pushed events do not trigger other workflows (GitHub's recursion guard).
313319

314320
Required secrets: `RELEASE_APP_ID`, `RELEASE_APP_PRIVATE_KEY` — a GitHub App with
315-
`contents:write` on `nauticalab/starfix`.
321+
`contents:write` on `nauticalab/starfix`; `CARGO_REGISTRY_TOKEN` — a crates.io API token.
316322

317323
**What this workflow does end-to-end:**
318-
1. `cargo-release` bumps `Cargo.toml` → commits → creates `v{version}` tag → pushes both
319-
2. Tag push fires `maturin-release.yml` → builds wheels → publishes to PyPI
324+
1. `cargo-release` bumps `Cargo.toml` → commits → publishes crate to crates.io → creates `v{version}` tag → pushes both
325+
2. Tag push fires `ci.yml` → runs tests and verifies version/tag sync
320326

321327
#### `nauticalab/starfix-python` — new `.github/workflows/release.yml`
322328

0 commit comments

Comments
 (0)