Skip to content

Comments

feat: add npm beta release workflow#7473

Merged
paulbalaji merged 7 commits intomainfrom
pbio/preview-release-workflows
Dec 2, 2025
Merged

feat: add npm beta release workflow#7473
paulbalaji merged 7 commits intomainfrom
pbio/preview-release-workflows

Conversation

@paulbalaji
Copy link
Collaborator

@paulbalaji paulbalaji commented Nov 26, 2025

Summary

Add a beta release workflow for NPM packages, allowing quick publishing of pre-release versions for testing.

NPM Beta Release Workflow

New workflow (.github/workflows/npm-beta-release.yml) that allows publishing beta releases to NPM:

  • Trigger: Manual dispatch (workflow_dispatch) from GitHub Actions UI
  • Dist-tags: beta (default), alpha, rc, preview
  • Version format: {nextVersion}-{tag}.{gitSha} (e.g., 19.10.0-beta.abc1234)
  • Branch policy: Can be triggered from any branch

Usage

  1. Go to Actions → "NPM Beta Release"
  2. Click "Run workflow"
  3. Select the branch and dist-tag
  4. The workflow will:
    • Create snapshot versions using changesets
    • Build all packages
    • Publish to NPM with the selected dist-tag

Installation

After running, users can install beta packages:

npm install @hyperlane-xyz/sdk@beta
npm install @hyperlane-xyz/cli@beta

Changeset Snapshot Configuration

Added snapshot config to .changeset/config.json:

  • useCalculatedVersion: true - Uses the calculated next version as base (not 0.0.0)
  • prereleaseTemplate: "{tag}.{commit}" - Format for prerelease suffix

Rust Preview Version Fix

Updated the Rust release workflow so prereleases use the calculated next version as base:

  • Before: If current is 1.7.0, prerelease would be 1.7.0-preview.1
  • After: If current is 1.7.0 and commits warrant a minor bump, prerelease will be 1.8.0-preview.1

This aligns Rust prerelease versioning with NPM's behavior.

Test plan

  • Verify NPM beta release workflow appears in Actions tab
  • Test beta release workflow on a non-main branch

Test run: https://github.com/hyperlane-xyz/hyperlane-monorepo/actions/runs/19711214912/job/56472066118?pr=7473

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • Enhanced release process with automated prerelease version calculation for preview builds and a snapshot versioning configuration for changesets.
    • Added a dedicated beta release workflow for npm packages, supporting beta/alpha/rc/preview tags and snapshot publishing.
    • Standardized release PR naming to a consistent title for release automation.
    • Added a temporary changeset entry to support beta workflow testing.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot
Copy link

changeset-bot bot commented Nov 26, 2025

⚠️ No Changeset found

Latest commit: 31d942b

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@paulbalaji paulbalaji force-pushed the pbio/preview-release-workflows branch from debf477 to 4211ce6 Compare November 26, 2025 15:24
@paulbalaji paulbalaji changed the base branch from pbio/hyper-gonk-ci-permissions to main November 26, 2025 15:25
@paulbalaji paulbalaji changed the title feat: add preview release workflows for NPM and Rust feat: add npm beta release workflow Nov 26, 2025
@paulbalaji paulbalaji force-pushed the pbio/preview-release-workflows branch from 4211ce6 to b206570 Compare November 26, 2025 15:27
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 26, 2025

📝 Walkthrough

Walkthrough

Adds Changesets snapshot configuration, introduces a new NPM beta-release GitHub Actions workflow, and updates Rust/release workflows to compute and use a NEXT_VERSION for prerelease tagging via a helper script.

Changes

Cohort / File(s) Summary
Snapshot Configuration
\.changeset/config.json
Added snapshot block with useCalculatedVersion: true and prereleaseTemplate: "{tag}.{commit}"; preserved ignore: [].
Rust & Release Workflows
\.github/workflows/rust-release.yml, \.github/workflows/release.yml
rust-release.yml now invokes determine-next-version.sh to compute NEXT_VERSION and uses it to locate preview tags and build prerelease VERSION; release.yml adds title: "chore: release npm packages" to the changesets action.
New Beta Release Workflow & Changeset
\.github/workflows/npm-beta-release.yml, \.changeset/test-beta-release.md
Added npm-beta-release.yml (manual dispatch with tag input; computes base+short-SHA beta versions; checks changesets; creates snapshots; builds and publishes beta packages); added a temporary changeset file for beta-release testing.

Sequence Diagram(s)

sequenceDiagram
    participant User as Trigger (manual)
    participant Workflow as NPM Beta Workflow
    participant Repo as Git Checkout
    participant Version as Version Script
    participant Changesets as Changesets Check
    participant Builder as Build & Snapshot
    participant Registry as npm Registry

    User->>Workflow: workflow_dispatch (snapshot_tag)
    Workflow->>Repo: checkout (full history, submodules)
    Repo->>Version: read package.json -> compute base version + short SHA
    Version->>Workflow: produce beta VERSION (base.tag.sha)
    Workflow->>Changesets: check for pending changesets
    alt changesets exist
        Changesets->>Builder: create snapshots & install deps
        Builder->>Builder: build packages
        Builder->>Registry: publish packages (NPM_TOKEN)
        Builder->>Workflow: write step summary (version, tag, install cmd)
    else no changesets
        Changesets->>Workflow: emit "No changesets" summary and guidance
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Focus review on:
    • .github/workflows/rust-release.yml — NEXT_VERSION derivation and tag-matching details.
    • .github/workflows/npm-beta-release.yml — version computation, changesets branch, token usage, and publish steps.
    • .changeset/config.json — snapshot template correctness.

Possibly related PRs

Suggested reviewers

  • Mo-Hussain
  • kamiyaa
  • xeno097

Poem

A lil' snapshot hums in the night,
Beta tags glint under moonlight,
Scripts whisper numbers, neat and sly,
Pipelines march—no fuss, just why not try? 🎋

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add npm beta release workflow' clearly and concisely summarizes the main change—adding a new NPM beta release workflow. It directly corresponds to the primary objective and the new workflow file added.
Description check ✅ Passed The PR description comprehensively covers all required template sections: it explains what's included (summary and workflow details), mentions drive-by changes (changeset config and Rust workflow updates), lacks explicit related issues but provides detailed context, confirms backward compatibility through design, and references a test run validating the changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch pbio/preview-release-workflows

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 49b07ef and 3ad1244.

📒 Files selected for processing (1)
  • .changeset/test-beta-release.md (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .changeset/test-beta-release.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (56)
  • GitHub Check: cli-evm-e2e-matrix (warp-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-init)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-send)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-5)
  • GitHub Check: cli-evm-e2e-matrix (warp-rebalancer)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-3)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-4)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-recovery)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-basic)
  • GitHub Check: cli-evm-e2e-matrix (relay)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-config)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-ism-updates)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-1)
  • GitHub Check: cli-evm-e2e-matrix (core-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-ownership-updates)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-submitters)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-hook-updates)
  • GitHub Check: cli-evm-e2e-matrix (core-init)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-simple-updates)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-rebalancing-config)
  • GitHub Check: cli-evm-e2e-matrix (core-apply)
  • GitHub Check: cli-evm-e2e-matrix (core-deploy)
  • GitHub Check: cli-evm-e2e-matrix (core-check)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-deploy)
  • GitHub Check: env-test-matrix (mainnet3, optimism, core)
  • GitHub Check: cli-radix-e2e-matrix (core-deploy)
  • GitHub Check: env-test-matrix (mainnet3, optimism, igp)
  • GitHub Check: cli-radix-e2e-matrix (warp-deploy)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, igp)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-ownership-updates)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, core)
  • GitHub Check: env-test-matrix (testnet4, sepolia, core)
  • GitHub Check: cli-cosmos-e2e-matrix (core-read)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-route-extension)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, igp)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, core)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-read)
  • GitHub Check: cli-cosmos-e2e-matrix (core-deploy)
  • GitHub Check: cosmos-sdk-e2e-run
  • GitHub Check: cli-cosmos-e2e-matrix (core-check)
  • GitHub Check: cli-cosmos-e2e-matrix (core-apply)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-apply)
  • GitHub Check: cli-install-test-run
  • GitHub Check: yarn-test-run
  • GitHub Check: infra-test
  • GitHub Check: e2e-matrix (evm)
  • GitHub Check: yarn-install
  • GitHub Check: lander-coverage
  • GitHub Check: test-rs
  • GitHub Check: lint-rs

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.github/workflows/npm-preview-release.yml (1)

47-58: Version calculation relies on a hardcoded package.json path—consider parameterizing it.

Line 54 reads the base version from a fixed path (./typescript/sdk/package.json), which could become brittle if the repo structure changes. Consider extracting this as a workflow parameter, an environment variable, or a helper script that auto-discovers the right package, similar to how the changesets config drives the "fixed" package group. Additionally, since line 63 uses yarn changeset version --snapshot, verify that the manually computed version on lines 54–57 aligns with what changesets actually generates and publishes.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c4f3d33 and b206570.

📒 Files selected for processing (3)
  • .changeset/config.json (1 hunks)
  • .github/workflows/npm-preview-release.yml (1 hunks)
  • .github/workflows/rust-release.yml (1 hunks)
🧰 Additional context used
🪛 actionlint (1.7.8)
.github/workflows/npm-preview-release.yml

30-30: label "depot-ubuntu-latest" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-11-arm", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-26-xlarge", "macos-26", "macos-15-intel", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (55)
  • GitHub Check: env-test-matrix (testnet4, sepolia, core)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-recovery)
  • GitHub Check: cli-evm-e2e-matrix (warp-send)
  • GitHub Check: env-test-matrix (mainnet3, optimism, core)
  • GitHub Check: env-test-matrix (mainnet3, inevm, igp)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, core)
  • GitHub Check: env-test-matrix (mainnet3, optimism, igp)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-basic)
  • GitHub Check: env-test-matrix (mainnet3, inevm, core)
  • GitHub Check: cli-evm-e2e-matrix (warp-init)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, igp)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, igp)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, core)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-config)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-rebalancer)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-4)
  • GitHub Check: cli-evm-e2e-matrix (warp-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-ism-updates)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-1)
  • GitHub Check: cli-evm-e2e-matrix (core-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-3)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-5)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-2)
  • GitHub Check: cli-evm-e2e-matrix (relay)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-1)
  • GitHub Check: cli-evm-e2e-matrix (core-check)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-submitters)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-route-extension)
  • GitHub Check: cli-evm-e2e-matrix (core-deploy)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-deploy)
  • GitHub Check: cli-evm-e2e-matrix (core-apply)
  • GitHub Check: cli-evm-e2e-matrix (core-init)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-ownership-updates)
  • GitHub Check: cli-radix-e2e-matrix (core-deploy)
  • GitHub Check: cosmos-sdk-e2e-run
  • GitHub Check: cli-radix-e2e-matrix (warp-deploy)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-apply)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (core-apply)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-read)
  • GitHub Check: cli-install-test-run
  • GitHub Check: cli-cosmos-e2e-matrix (core-check)
  • GitHub Check: cli-cosmos-e2e-matrix (core-read)
  • GitHub Check: cli-cosmos-e2e-matrix (core-deploy)
  • GitHub Check: infra-test
  • GitHub Check: test-rs
  • GitHub Check: lint-rs
  • GitHub Check: lander-coverage
  • GitHub Check: e2e-matrix (evm)
  • GitHub Check: yarn-install
🔇 Additional comments (5)
.changeset/config.json (1)

33-37: Snapshot configuration aligns with changeset versioning strategy. Setting useCalculatedVersion: true will use the calculated version based on changeset files, and prereleaseTemplate configures the suffix for snapshot releases with placeholders like {tag} and {commit}. This pairs well with the npm preview workflow's snapshot release flow.

.github/workflows/rust-release.yml (1)

282-302: Prerelease versioning now uses calculated next version—aligns with changesets approach.

Switching from BASE_VERSION to NEXT_VERSION for prerelease naming makes the Rust workflow consistent with the NPM preview release model. The comments nicely explain the rationale. Worth verifying this change won't break any tooling or scripts downstream that may expect the old prerelease format (e.g., deployment, artifact naming).

.github/workflows/npm-preview-release.yml (3)

30-30: depot-ubuntu-latest runner label is valid for Depot—actionlint warning is a false positive.

Depot supports the depot-ubuntu-latest alias for the current Ubuntu LTS release, so the static analysis flag here is a false positive. The workflow is correctly configured for your CI/CD infrastructure.


62-71: Workflow structure and publish flow are sound—verify version consistency across snapshot and publish steps.

The changeset-based snapshot and publish steps follow best practices. However, double-check that the version output used in the GitHub release (line 79) matches the version that changesets publishes, especially since there's a separate manual version calculation upstream. If they diverge, the GitHub release tag could mismatch the published package version.


84-98: Pre-release warning and installation instructions are clear and helpful.

The release body includes a prominent warning for preview releases and concise installation commands using the snapshot tag. This is good developer ergonomics—new maintainers and CI systems will immediately know this is a preview and how to install it.

@paulbalaji paulbalaji force-pushed the pbio/preview-release-workflows branch 4 times, most recently from 3e14842 to f2f221b Compare November 26, 2025 15:52
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
.github/workflows/npm-beta-release.yml (1)

54-60: Input handling has redundant fallback logic.

Since snapshot_tag is defined as required: true in the workflow_dispatch inputs (line 12), the || 'beta' fallback patterns on lines 65 and 73 aren't strictly necessary — the input will always be present. Simplifying these to just ${{ inputs.snapshot_tag }} would make the intent clearer. That said, the current approach is defensive and works fine.

If you'd like to clean this up, here's what the publish and version steps could look like:

- name: Create snapshot versions
-  run: yarn changeset version --snapshot ${{ inputs.snapshot_tag || 'beta' }}
+  run: yarn changeset version --snapshot ${{ inputs.snapshot_tag }}

And similarly for line 73.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b206570 and f2f221b.

📒 Files selected for processing (4)
  • .changeset/config.json (1 hunks)
  • .changeset/test-beta-release.md (1 hunks)
  • .github/workflows/npm-beta-release.yml (1 hunks)
  • .github/workflows/rust-release.yml (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .changeset/test-beta-release.md
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: paulbalaji
Repo: hyperlane-xyz/hyperlane-monorepo PR: 6943
File: rust/main/config/mainnet_config.json:965-965
Timestamp: 2025-08-26T13:46:37.695Z
Learning: In the repository hyperlane-xyz/hyperlane-monorepo, skip reviewing the file rust/main/config/testnet_config.json in future code reviews as requested by paulbalaji.
🪛 actionlint (1.7.8)
.github/workflows/npm-beta-release.yml

34-34: label "depot-ubuntu-latest" is unknown. available labels are "windows-latest", "windows-latest-8-cores", "windows-2025", "windows-2022", "windows-11-arm", "ubuntu-latest", "ubuntu-latest-4-cores", "ubuntu-latest-8-cores", "ubuntu-latest-16-cores", "ubuntu-24.04", "ubuntu-24.04-arm", "ubuntu-22.04", "ubuntu-22.04-arm", "macos-latest", "macos-latest-xl", "macos-latest-xlarge", "macos-latest-large", "macos-26-xlarge", "macos-26", "macos-15-intel", "macos-15-xlarge", "macos-15-large", "macos-15", "macos-14-xl", "macos-14-xlarge", "macos-14-large", "macos-14", "macos-13-xl", "macos-13-xlarge", "macos-13-large", "macos-13", "self-hosted", "x64", "arm", "arm64", "linux", "macos", "windows". if it is a custom label for self-hosted runner, set list of labels in actionlint.yaml config file

(runner-label)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (57)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-recovery)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-config)
  • GitHub Check: cli-evm-e2e-matrix (warp-rebalancer)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-4)
  • GitHub Check: cli-evm-e2e-matrix (warp-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-5)
  • GitHub Check: cli-evm-e2e-matrix (warp-send)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-basic)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-3)
  • GitHub Check: cli-evm-e2e-matrix (warp-init)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-ism-updates)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-2)
  • GitHub Check: cli-evm-e2e-matrix (relay)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-submitters)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-1)
  • GitHub Check: cli-evm-e2e-matrix (core-read)
  • GitHub Check: cli-evm-e2e-matrix (core-init)
  • GitHub Check: cli-evm-e2e-matrix (core-check)
  • GitHub Check: cli-evm-e2e-matrix (core-deploy)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, igp)
  • GitHub Check: cli-evm-e2e-matrix (core-apply)
  • GitHub Check: env-test-matrix (testnet4, sepolia, core)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, core)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, core)
  • GitHub Check: env-test-matrix (mainnet3, optimism, core)
  • GitHub Check: env-test-matrix (mainnet3, inevm, igp)
  • GitHub Check: env-test-matrix (mainnet3, inevm, core)
  • GitHub Check: env-test-matrix (mainnet3, optimism, igp)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, igp)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-route-extension)
  • GitHub Check: cli-cosmos-e2e-matrix (core-read)
  • GitHub Check: cli-radix-e2e-matrix (warp-deploy)
  • GitHub Check: cli-radix-e2e-matrix (core-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-read)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-apply)
  • GitHub Check: cosmos-sdk-e2e-run
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-ownership-updates)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (core-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (core-apply)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (core-check)
  • GitHub Check: yarn-test-run
  • GitHub Check: cli-install-test-run
  • GitHub Check: infra-test
  • GitHub Check: e2e-matrix (evm)
  • GitHub Check: yarn-install
  • GitHub Check: lint-rs
  • GitHub Check: lander-coverage
  • GitHub Check: test-rs
  • GitHub Check: beta-release
🔇 Additional comments (6)
.changeset/config.json (1)

34-37: Snapshot versioning configuration looks solid.

The useCalculatedVersion: true and prereleaseTemplate: "{tag}.{commit}" settings will work nicely with the snapshot release flow — keeps version bumps consistent across NPM and Rust workflows. This aligns with the changesets documentation for snapshot releases.

.github/workflows/npm-beta-release.yml (4)

61-71: Dependency setup and build process look straightforward.

Using --immutable ensures reproducibility, and passing the GITHUB_TOKEN to the version step (if needed by changesets) is the right call. The snapshot versioning via changesets will respect the config we saw earlier.


72-77: Publish configuration with provenance is solid security practice.

Using NODE_AUTH_TOKEN for authentication and enabling NPM_CONFIG_PROVENANCE shows good attention to security and supply-chain best practices. Just make sure the NPM_TOKEN secret is already set in the repository settings — if not, this step will fail silently (or with an auth error) since the token will be empty.

Ensure NPM_TOKEN secret is configured in repository settings. You can verify this manually in Settings → Secrets and variables → Actions, or by attempting a test run of the workflow.


78-90: Workflow summary is clear and user-friendly.

Including the version, tag, branch, and install commands makes it easy for users to copy-paste and test the beta release. This is exactly the kind of documentation that prevents support questions.


34-34: Static analysis hint about depot-ubuntu-latest runner can be ignored.

The actionlint tool flagged this as an unknown runner label, but it's a custom Depot runner which is used consistently throughout your workflows (e.g., rust-release.yml line 35). This is expected and not an issue.

.github/workflows/rust-release.yml (1)

281-302: Script exists and properly handles edge cases including first release.

The determine-next-version.sh script is well-implemented with robust error handling:

  1. Edge case handling: Lines 36-46 correctly handle the first release scenario. When no previous tags exist, it falls back to analyzing all commits in the repository using git log --oneline --no-merges -- .
  2. Internal error handling: The script uses set -euo pipefail (line 20) and validates arguments upfront (lines 22-26).
  3. Workflow error propagation: GitHub Actions runs bash steps with -e flag by default, so any failure in determine-next-version.sh will cause the workflow step to fail and halt execution.

The implementation properly handles the concern about "very first release" scenarios—when no agents tags exist, the script retrieves the git log for all commits and correctly determines the version bump.

@paulbalaji paulbalaji force-pushed the pbio/preview-release-workflows branch 5 times, most recently from 7bb5555 to 2cb4fc8 Compare November 26, 2025 16:44
@paulbalaji paulbalaji force-pushed the pbio/preview-release-workflows branch from 2cb4fc8 to c011ab2 Compare November 26, 2025 16:47
Skip build and publish steps when no changesets are present,
and display a helpful summary explaining how to create a beta release.
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.github/workflows/npm-beta-release.yml (1)

75-75: Clean up redundant fallback operators in snapshot_tag.

Since snapshot_tag input has required: true and default: 'beta', the || 'beta' fallback on lines 75 and 87 is unreachable dead code. The input will always be populated, so these can be simplified.

- run: yarn changeset version --snapshot ${{ inputs.snapshot_tag || 'beta' }}
+ run: yarn changeset version --snapshot ${{ inputs.snapshot_tag }}
- run: |
-   echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> $HOME/.npmrc
-   yarn changeset publish --tag ${{ inputs.snapshot_tag || 'beta' }}
+ run: |
+   echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> $HOME/.npmrc
+   yarn changeset publish --tag ${{ inputs.snapshot_tag }}

Also applies to: 87-87

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f2f221b and 326cbc8.

📒 Files selected for processing (4)
  • .changeset/config.json (1 hunks)
  • .github/workflows/npm-beta-release.yml (1 hunks)
  • .github/workflows/release.yml (1 hunks)
  • .github/workflows/rust-release.yml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • .changeset/config.json
  • .github/workflows/rust-release.yml
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: paulbalaji
Repo: hyperlane-xyz/hyperlane-monorepo PR: 6943
File: rust/main/config/mainnet_config.json:965-965
Timestamp: 2025-08-26T13:46:37.695Z
Learning: In the repository hyperlane-xyz/hyperlane-monorepo, skip reviewing the file rust/main/config/testnet_config.json in future code reviews as requested by paulbalaji.
Learnt from: paulbalaji
Repo: hyperlane-xyz/hyperlane-monorepo PR: 6943
File: rust/main/config/mainnet_config.json:965-965
Timestamp: 2025-08-26T13:46:37.695Z
Learning: In the repository hyperlane-xyz/hyperlane-monorepo, skip reviewing the file rust/main/config/mainnet_config.json in future code reviews as requested by paulbalaji.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (55)
  • GitHub Check: yarn-test
  • GitHub Check: cli-evm-e2e-matrix (warp-send)
  • GitHub Check: cli-evm-e2e-matrix (warp-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-3)
  • GitHub Check: cli-evm-e2e-matrix (warp-rebalancer)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-config)
  • GitHub Check: cli-evm-e2e-matrix (warp-init)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-4)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-recovery)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-5)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-basic)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-submitters)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-ism-updates)
  • GitHub Check: cli-evm-e2e-matrix (core-deploy)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-1)
  • GitHub Check: cli-evm-e2e-matrix (core-read)
  • GitHub Check: cli-evm-e2e-matrix (core-check)
  • GitHub Check: cli-evm-e2e-matrix (relay)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-2)
  • GitHub Check: cli-evm-e2e-matrix (core-apply)
  • GitHub Check: cli-evm-e2e-matrix (core-init)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, igp)
  • GitHub Check: env-test-matrix (testnet4, sepolia, core)
  • GitHub Check: env-test-matrix (mainnet3, inevm, core)
  • GitHub Check: env-test-matrix (mainnet3, inevm, igp)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, core)
  • GitHub Check: env-test-matrix (mainnet3, optimism, core)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, core)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, igp)
  • GitHub Check: env-test-matrix (mainnet3, optimism, igp)
  • GitHub Check: cli-cosmos-e2e-matrix (core-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-read)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (core-read)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-route-extension)
  • GitHub Check: cli-cosmos-e2e-matrix (core-apply)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-ownership-updates)
  • GitHub Check: cli-cosmos-e2e-matrix (core-check)
  • GitHub Check: cli-radix-e2e-matrix (warp-deploy)
  • GitHub Check: cosmos-sdk-e2e-run
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-apply)
  • GitHub Check: cli-radix-e2e-matrix (core-deploy)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-deploy)
  • GitHub Check: cli-install-test-run
  • GitHub Check: infra-test
  • GitHub Check: lint-rs
  • GitHub Check: lander-coverage
  • GitHub Check: test-rs
  • GitHub Check: e2e-matrix (evm)
🔇 Additional comments (6)
.github/workflows/release.yml (1)

62-62: LGTM! — Proper PR title adds consistency to release workflow.

This change gives the changesets action a consistent PR title ("chore: release npm packages") instead of relying on the default. Keeps things organized when you've got layers of release workflows running around, and makes it easier to spot release PRs in the GitHub interface.

.github/workflows/npm-beta-release.yml (5)

3-19: Well-layered workflow structure.

The trigger config, concurrency settings, and environment variables are all dialed in nicely. The workflow_dispatch setup with choice inputs and the concurrency group prevent tangled execution paths. Everything here does what it needs to do without extra fluff.


40-56: Version calculation logic is solid.

Extracting the base version from typescript/sdk/package.json and constructing the snapshot version with tag and short SHA matches the PR objectives and the changeset config's prereleaseTemplate. The format aligns well with how the Rust release workflow derives prerelease versions.


57-67: Changeset detection gates the workflow appropriately.

The find pattern correctly counts pending changesets and the conditional gating in downstream steps ensures no unnecessary work happens if there's nothing to release. The warning message is helpful—developers get clear guidance on what to do next.


69-90: Build and publish pipeline is well-structured.

All major operations are properly gated on the changeset count. The NPM token setup, provenance flag, and use of standard yarn changeset commands follow established patterns. One thing worth noting: if a partial publish fails (e.g., one package succeeds, another fails), the workflow won't explicitly catch it. The yarn changeset publish command will exit with an error if any package fails, which is good, but there's no retry logic or post-publish validation step. For a manual release workflow this is acceptable, but just something to keep in mind if you expand this later.


92-117: Summary output provides clear UX.

Both paths—successful release and "no changesets"—provide helpful context and next steps. The install commands use the correct dist-tag syntax, and the branch info helps users confirm they're releasing from the right place.

Copy link
Contributor

@xeno097 xeno097 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me but i would also like to have a review from our chief @antigremlin as he had to battle with changesets too

Copy link
Contributor

@antigremlin antigremlin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, but needs some fixes.

@paulbalaji paulbalaji force-pushed the pbio/preview-release-workflows branch from 49b07ef to 3ad1244 Compare December 2, 2025 11:50
@paulbalaji
Copy link
Collaborator Author

@paulbalaji paulbalaji enabled auto-merge December 2, 2025 12:07
@paulbalaji paulbalaji added this pull request to the merge queue Dec 2, 2025
Merged via the queue into main with commit 995e5db Dec 2, 2025
81 checks passed
@paulbalaji paulbalaji deleted the pbio/preview-release-workflows branch December 2, 2025 12:38
@github-project-automation github-project-automation bot moved this from In Review to Done in Hyperlane Tasks Dec 2, 2025
@codecov
Copy link

codecov bot commented Dec 2, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 0.00%. Comparing base (c4f3d33) to head (31d942b).
⚠️ Report is 15 commits behind head on main.

Additional details and impacted files
@@     Coverage Diff      @@
##   main   #7473   +/-   ##
============================
============================
Components Coverage Δ
core ∅ <ø> (∅)
hooks ∅ <ø> (∅)
isms ∅ <ø> (∅)
token ∅ <ø> (∅)
middlewares ∅ <ø> (∅)
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants