From 83c9d797978b3b2f9a08570aea1c3761bf2fad85 Mon Sep 17 00:00:00 2001 From: Ignat Date: Thu, 4 Jun 2026 16:13:36 -0300 Subject: [PATCH 1/4] ci(release): push tags and create GitHub Release after publish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After `pnpm changeset publish` creates local git tags, push them to origin and create a GitHub Release with auto-generated notes. - `git push origin --follow-tags` propagates the version tags - `softprops/action-gh-release@v3.0.0` (SHA-pinned) creates the Release with `generate_release_notes: true` for an auto-generated changelog Permissions already include `contents: write` and `id-token: write` (OIDC provenance) — no permission changes needed. --- .github/workflows/release.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 28a8b41..698035c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,3 +23,9 @@ jobs: - run: pnpm changeset publish env: NPM_CONFIG_PROVENANCE: true + - name: Push git tags + run: git push origin --follow-tags + - name: Create GitHub Release + uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 + with: + generate_release_notes: true From 8c93e5a096972e25068bced07510732f1a2d7dc9 Mon Sep 17 00:00:00 2001 From: Ignat Date: Thu, 4 Jun 2026 16:13:42 -0300 Subject: [PATCH 2/4] docs(readme): reflect npm publish done, remove "not yet published" notice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Status: note npm publish complete (0.1.0 live); remaining Phase 3 scope = voidpay.xyz cutover only (C1 / vl-app #120) - Packages table: "0.1.0 ready" → "0.1.0 — live on npm" for all three - Quick Install: remove "> Not yet published — Phase 3" blockquote --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8a40a1d..bdbd05f 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,15 @@ Canonical Invoice codec — TLV + Brotli wire format. v1 schema LOCKED forever. ## Status -Phase 2 complete — Rust + WASM codec shipped (0.1.0). Phase 3: npm publish + voidpay.xyz cutover. +Phase 2 complete — Rust + WASM codec shipped. Phase 3: npm publish done (0.1.0 live). Remaining: voidpay.xyz cutover (C1 / vl-app #120). ## Packages | Package | Status | Description | |---------|--------|-------------| -| `@void-layer/codec` | 0.1.0 ready | Rust + WASM canonical TLV codec | -| `@void-layer/types` | 0.1.0 ready | Manual TypeScript types (zero runtime deps) | -| `@void-layer/networks` | 0.1.0 ready | EVM chain configs + token list (no RPC keys) | +| `@void-layer/codec` | 0.1.0 — live on npm | Rust + WASM canonical TLV codec | +| `@void-layer/types` | 0.1.0 — live on npm | Manual TypeScript types (zero runtime deps) | +| `@void-layer/networks` | 0.1.0 — live on npm | EVM chain configs + token list (no RPC keys) | ## Quick Install @@ -22,8 +22,6 @@ Phase 2 complete — Rust + WASM codec shipped (0.1.0). Phase 3: npm publish + v pnpm add @void-layer/codec ``` -> Not yet published — Phase 3 - ## Why - Third-party developers building on top of VoidPay need a stable, versioned codec they can depend on From 239f1460689e70623f599e5401153952471db115 Mon Sep 17 00:00:00 2001 From: Ignat Date: Thu, 4 Jun 2026 16:27:27 -0300 Subject: [PATCH 3/4] ci(release): publish void-layer-codec to crates.io via OIDC trusted publishing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After npm publish + GitHub Release, obtain a short-lived crates.io token via `rust-lang/crates-io-auth-action@v1.0.4` (SHA-pinned, OIDC — no stored API token needed) and run `cargo publish`. Dry-run validation: packaged 106 files (157.5 KiB compressed), verified host build clean in 27s — `--no-verify` not needed; cdylib + wasm-bindgen deps compile fine on the native target. `id-token: write` and `contents: write` permissions unchanged. --- .github/workflows/release.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 698035c..63aaa25 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,3 +29,10 @@ jobs: uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: generate_release_notes: true + - name: Obtain crates.io OIDC token + uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # v1.0.4 + id: crates-io-auth + - name: Publish to crates.io + run: cargo publish -p void-layer-codec --manifest-path packages/codec/Cargo.toml + env: + CARGO_REGISTRY_TOKEN: ${{ steps.crates-io-auth.outputs.token }} From f151b8a00fa5aa83ca751c1dae4f1df9ceb04025 Mon Sep 17 00:00:00 2001 From: Ignat Date: Thu, 4 Jun 2026 16:33:27 -0300 Subject: [PATCH 4/4] fix(release): correct tag push and GitHub Release on workflow_dispatch Bug 1: `--follow-tags` only pushes annotated tags; changeset publish creates lightweight tags. Switch to `--tags` to push all tags. Bug 2: `softprops/action-gh-release` defaults to `github.ref` on a manual dispatch (a branch ref, not a tag), creating a bogus release. Add a "Derive version" step that reads packages/codec/package.json and exposes `steps.ver.outputs.v`; pass it as `tag_name` to the action. The action is idempotent: it updates an existing release if v0.1.0 already exists (no failure on re-run). --- .github/workflows/release.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 63aaa25..f7b4fd0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,10 +24,14 @@ jobs: env: NPM_CONFIG_PROVENANCE: true - name: Push git tags - run: git push origin --follow-tags + run: git push origin --tags + - name: Derive version + id: ver + run: echo "v=v$(node -p "require('./packages/codec/package.json').version")" >> "$GITHUB_OUTPUT" - name: Create GitHub Release uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: + tag_name: ${{ steps.ver.outputs.v }} generate_release_notes: true - name: Obtain crates.io OIDC token uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # v1.0.4