Skip to content

Per-component tag-triggered releases - #266

Merged
nsheff merged 2 commits into
masterfrom
per-component-releases
Jun 16, 2026
Merged

nsheff merged 2 commits into
masterfrom
per-component-releases

Conversation

@nsheff

@nsheff nsheff commented Jun 16, 2026

Copy link
Copy Markdown
Member

Switches releases from a single monolithic GitHub Release (which fanned out and re-published every component) to per-component releases: each component publishes only when its own <package>-v<version> release tag is cut.

How it works

  • Each job in rust-publish.yml is gated on startsWith(github.event.release.tag_name, 'gtars-<pkg>-v').
  • The tag prefix is the exact workspace package name (no shorthand): gtars-python-v* → PyPI, gtars-r-v* → R binary, gtars-cli-v* → crates.io + CLI binaries, gtars-wasm-v*/gtars-node-v* → npm, gtars-<crate>-v* / gtars-v* → crates.io.
  • The -v delimiter keeps gtars-v* (meta crate) from colliding with gtars-core-v* etc.

Changes

  • Bindings decoupled from crates.io — dropped needs: publish-all-crates from python/cli; they build from source (path deps), so there's no dependency cascade.
  • New publish-crate job — on a release, strips -v<version> from the tag and publishes that single crate (skips pure bindings; dependencies must already be on crates.io, so cut crate releases in dependency order).
  • Retired the fanout — publish-all-crates is now manual-workflow_dispatch only (emergency "republish everything"); the create-tags job (force-pushed py-/r- shorthand tags) is removed.
  • Docs — added RELEASING.md and a brief note in the README; also fixed a stale gtars-py → gtars-python reference.

Normal flow: bump the component version, merge, then releasegh a release named <package>-v<version>.

Verification

  • rust-publish.yml YAML validated; tag→crate parsing and the gtars-v disambiguation unit-tested locally.
  • Reusable workflows only trigger via workflow_call/workflow_dispatch, so rust-publish.yml stays the sole release entry point.
  • Not yet exercised against a live release (would need an actual release cut).

nsheff added 2 commits June 16, 2026 15:15
Each component publishes only when its own <package>-v<version> release tag is
cut, gated via startsWith(release.tag_name, '<package>-v'). Bindings build from
source and no longer depend on publish-all-crates; a new publish-crate job
publishes a single crate keyed off the tag. Retire the monolithic release
fanout (publish-all-crates is now manual-dispatch only) and the create-tags
job. Adds RELEASING.md.
@codecov

codecov Bot commented Jun 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.47%. Comparing base (90042fd) to head (5dae5c3).

Additional details and impacted files
@@            Coverage Diff             @@
##           master     #266      +/-   ##
==========================================
- Coverage   82.50%   82.47%   -0.03%     
==========================================
  Files          95       95              
  Lines       26786    26786              
==========================================
- Hits        22100    22092       -8     
- Misses       4686     4694       +8     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@nsheff
nsheff merged commit be70f69 into master Jun 16, 2026
4 of 5 checks passed
@nsheff
nsheff deleted the per-component-releases branch June 16, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant