airvzxf / airvzxf/voxora

Add release.yml guard for untracked workspace crates (catches forgotten cargo publish)

Geschlossen
#142 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
enhancement infrastructure
Vorherrschende Sprache
Rust
Sterne
0
Forks
1
Ø Merge
11 Min.
Gemergte PRs (30 T.)
77

Beschreibung

## Context

The 0.5.1 coordinated release cycle (EPIC #124) forgot to publish `voxora-local` and `voxora-vad` (the two new crates added in EPIC #117 / 0.5.0). The mistake surfaced when downstream consumers tried to enable the new `local` Cargo feature on `voxora-bridge` and the lockfile resolver could not find `voxora-local@0.5.1` on crates.io.

## Why it matters

The release cycle depends on the operator remembering to publish every crate in the workspace. `.github/workflows/release.yml::publish-cratesio` already has an internal-deps guard (issue #94, hardened by #119) that fails fast if a participating crate depends on an un-released internal crate, but **that guard is in the wrong direction** — it catches the *consumer* missing a dependency, not the *producer* missing a publish.

## What

Add a guard to `.github/workflows/release.yml` that, before any `cargo publish`, verifies every workspace crate that participates in the current release has either:

1. Been published to crates.io at the version specified by the tag, OR
2. Has `publish = false` set in its manifest (which means it intentionally should not be on crates.io).

The guard reads the same `cargo metadata` output the internal-deps guard already uses, iterates every workspace member whose `publish == true`, queries `crates.io` for each (via the existing `check-cratesio-deps.py` helper or a new dedicated script), and short-circuits with an `::error` annotation listing the crates that need to be published before the workflow proceeds.

## Acceptance

- A release cycle that tries to release 8 of 9 `publish = true` workspace crates fails the guard with a clear message naming the 9th crate before any HTTP round-trip to crates.io.
- The guard is idempotent: re-running after the operator publishes the missing crate passes cleanly.
- `voxora-testkit` (the only current `publish = false` workspace crate) is **excluded** from the iteration.
- Guard failure produces an actionable error message: `workspace crate `voxora-local@0.5.10` is not on crates.io; run `cargo publish -p voxora-local --locked` first`.

## Out of scope

- Replacing the manual publish ordering with `release-plz` (issue #58).
- Catching semver mismatches between the tag and `Cargo.toml` (already covered by `validate-tag-input`).
- Auto-publish the missing crates (operator stays in control).

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Read .github/workflows/release.yml, especially publish-cratesio and its existing internal-deps guard, then inspect the cargo metadata flow and check-cratesio-deps.py helper. Run the release workflow’s guard path against workspace metadata; done means publishable members are checked, voxora-testkit is excluded, and missing crates produce the specified actionable error before cargo publish.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
github-actions, rust
Bereich
ci-cd, release
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.