Skip to content

Comments

feat!: pnpm migration#7410

Merged
paulbalaji merged 44 commits intomainfrom
pbio-cursor/investigate-pnpm-package-manager-migration-2193
Dec 15, 2025
Merged

feat!: pnpm migration#7410
paulbalaji merged 44 commits intomainfrom
pbio-cursor/investigate-pnpm-package-manager-migration-2193

Conversation

@paulbalaji
Copy link
Collaborator

@paulbalaji paulbalaji commented Nov 19, 2025

Description

Migrate package manager from Yarn 4.x (Berry) to pnpm 10.x.

Design docs:

Changes:

  • Update packageManager to pnpm@10.25.0
  • Add pnpm-workspace.yaml for workspace configuration
  • Convert resolutions to pnpm.overrides
  • Convert yarn patches to pnpm.patchedDependencies format
  • Update all scripts that reference yarn to use pnpm
  • Create .github/actions/pnpm-cache action for CI caching
  • Update CI workflows to use pnpm (pnpm/action-setup@v4, pnpm store caching)
  • Update GitHub Actions to latest versions (checkout@v6, setup-node@v6)
  • Update READMEs and developer guides with pnpm commands
  • Remove yarn files (.yarn/, .yarnrc.yml, yarn.lock)
  • Add pnpm-lock.yaml

Drive-by changes

  • Minor typing refinements and config cleanups

Related issues

Backward compatibility

Yes - no runtime changes, only build tooling migration.

Testing

  • pnpm install succeeds
  • pnpm build succeeds
  • pnpm test passes
  • pnpm lint passes
  • CI workflows pass

Summary by CodeRabbit

  • New Features

    • Added support for pnpm monorepo workspace configuration.
    • Enhanced Docker build process with pnpm integration and registry support.
  • Chores

    • Migrated package manager from Yarn to pnpm across the entire project.
    • Updated all build scripts, CLI commands, and CI/CD workflows to use pnpm.
    • Updated documentation and installation instructions to reflect pnpm usage.
    • Upgraded GitHub Actions to latest versions.

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

@changeset-bot
Copy link

changeset-bot bot commented Nov 19, 2025

⚠️ No Changeset found

Latest commit: e5016c3

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

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

This PR is being reviewed by Cursor Bugbot

Details

You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

@socket-security
Copy link

socket-security bot commented Nov 19, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​@​types/​json-stable-stringify@​1.0.36 ⏵ 1.2.010010039 -4550 -30100
Updatednpm/​@​nomiclabs/​hardhat-etherscan@​3.1.0 ⏵ 3.1.899100100 +150 -27100
Updatednpm/​@​types/​prompts@​2.4.0 ⏵ 2.4.910010070 +180 +3100
Updatednpm/​@​types/​express@​4.17.21 ⏵ 5.0.5100 +11007191100
Updatednpm/​@​types/​express@​4.17.21 ⏵ 4.17.251001007191100
Updatednpm/​@​typescript-eslint/​parser@​8.16.0 ⏵ 8.47.010010071 +198100
Updatednpm/​solidity-bytes-utils@​0.8.2 ⏵ 0.8.473 +41009381 +3100
Updatednpm/​@​solana/​wallet-adapter-react-ui@​0.9.35 ⏵ 0.9.39100 +110073 +183 +2100
Updatednpm/​typescript-eslint@​8.37.0 ⏵ 8.47.0100 +110074 +198 +1100
Updatednpm/​@​types/​ws@​8.5.13 ⏵ 8.18.1100 +110074 +182100
Updatednpm/​@​chain-registry/​types@​0.50.13 ⏵ 0.50.25899 -110074 +398 +1100
Updatednpm/​@​types/​chai-as-promised@​8.0.0 ⏵ 8.0.2100 +110074 +381 -5100
Updatednpm/​@​types/​yargs@​17.0.32 ⏵ 17.0.35100 +110075 +190100
Updatednpm/​@​cloudflare/​vitest-pool-workers@​0.4.28 ⏵ 0.4.319910076 +1100 +1100
Updatednpm/​@​types/​react-dom@​18.3.0 ⏵ 18.3.7100 +110076 +190100
Updatednpm/​@​turnkey/​solana@​1.1.12 ⏵ 1.1.13991007698100
Updatednpm/​@​types/​sinon@​10.0.11 ⏵ 17.0.4100 +11007687100
Updatednpm/​@​types/​mocha@​10.0.5 ⏵ 10.0.1010010077 +180100
Updatednpm/​wagmi@​2.12.32 ⏵ 2.19.4100 +110078 +298 +1100
Updatednpm/​@​arbitrum/​sdk@​4.0.1 ⏵ 4.0.499 +110078 -2287 +1100
Updatednpm/​@​starknet-react/​chains@​3.1.2 ⏵ 3.1.384 +310078 +286 -7100
Updatednpm/​@​ethersproject/​hardware-wallets@​5.7.0 ⏵ 5.8.0891007981100
Updatednpm/​@​types/​react@​18.3.3 ⏵ 18.3.27100 +110079 +195100
Updatednpm/​@​wagmi/​core@​2.14.6 ⏵ 2.22.1100 +110079 +295 -1100
Updatednpm/​hardhat-ignore-warnings@​0.2.11 ⏵ 0.2.1290 +110095 +180100
Updatednpm/​@​typescript-eslint/​eslint-plugin@​8.16.0 ⏵ 8.47.099 +110080 +198100
Updatednpm/​@​ethersproject/​experimental@​5.7.0 ⏵ 5.8.0991009481100
Updatednpm/​@​types/​node@​18.19.129 ⏵ 18.19.13010010081 +196 +1100
Updatednpm/​@​cosmos-kit/​react@​2.20.1 ⏵ 2.22.781 +210092 +593100
Updatednpm/​@​interchain-ui/​react@​1.26.1 ⏵ 1.26.381 +110098 +286100
Updatednpm/​@​types/​cors@​2.8.18 ⏵ 2.8.191001009181100
Updatednpm/​hardhat-gas-reporter@​1.0.9 ⏵ 1.0.1099 +1100100 +181100
See 61 more rows in the dashboard

View full report

@paulbalaji paulbalaji force-pushed the pbio-cursor/investigate-pnpm-package-manager-migration-2193 branch from 921a2e0 to d187014 Compare December 11, 2025 14:04
paulbalaji and others added 2 commits December 11, 2025 14:48
Move the requiresKey check before chain resolution in signerMiddleware.
This ensures yargs can validate required arguments before the middleware
throws assertion errors for missing chains.

Non-sign commands like `core check` were failing with "No chains found
set in parameters" instead of the expected "Missing required argument:
chain" error from yargs.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace `pnpm --filter @hyperlane-xyz/cli run` with `pnpm -C typescript/cli run`
for consistency with the rest of the codebase.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@paulbalaji paulbalaji force-pushed the pbio-cursor/investigate-pnpm-package-manager-migration-2193 branch from d187014 to 22310c6 Compare December 11, 2025 14:49
paulbalaji and others added 2 commits December 11, 2025 14:52
…irectory

pnpm -C changes the working directory, breaking relative paths.
pnpm --filter runs from the monorepo root where paths are valid.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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)
typescript/cli/src/tests/ethereum/core/core-check.e2e-test.ts (1)

34-39: pnpm CLI invocation looks good; consider reusing shared helper for consistency

Aye, this swap to pnpm --filter @hyperlane-xyz/cli run hyperlane core check fits the new toolchain just fine for this “missing --chain” error path, and the .nothrow() usage still makes sense for the assertion that follows.

Only thing I’d watch is keeping this in step with the rest of the swamp: if other CLI tests now go through a shared helper (like localTestRunCmdPrefix or similar), it might be worth routing this one through the same path so future changes to the pnpm invocation don’t drift here unnoticed.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a75c8ae and e78c1d3.

📒 Files selected for processing (2)
  • typescript/cli/src/tests/cosmosnative/core/core-check.e2e-test.ts (1 hunks)
  • typescript/cli/src/tests/ethereum/core/core-check.e2e-test.ts (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • typescript/cli/src/tests/cosmosnative/core/core-check.e2e-test.ts
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
Learnt from: paulbalaji
Repo: hyperlane-xyz/hyperlane-monorepo PR: 7410
File: solidity/foundry.toml:8-8
Timestamp: 2025-11-25T17:10:33.369Z
Learning: In the hyperlane-xyz/hyperlane-monorepo repository, when using pnpm (instead of Yarn), Foundry's `allow_paths` in solidity/foundry.toml should be set to `["./node_modules"]` rather than `["../node_modules"]` because pnpm's default node_modules structure places dependencies locally in the workspace subdirectory, not requiring access to the parent directory's node_modules.
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.
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: CR
Repo: hyperlane-xyz/hyperlane-monorepo PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:19:38.362Z
Learning: Apply `yarn prettier` for code formatting across all workspaces
📚 Learning: 2025-11-24T17:19:38.362Z
Learnt from: CR
Repo: hyperlane-xyz/hyperlane-monorepo PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-11-24T17:19:38.362Z
Learning: Run all tests using `yarn test` for unified testing; use workspace-specific commands for targeted testing (Hardhat, Forge for Solidity; Unit tests for TypeScript; Cargo for Rust)

Applied to files:

  • typescript/cli/src/tests/ethereum/core/core-check.e2e-test.ts
📚 Learning: 2025-11-25T17:10:33.369Z
Learnt from: paulbalaji
Repo: hyperlane-xyz/hyperlane-monorepo PR: 7410
File: solidity/foundry.toml:8-8
Timestamp: 2025-11-25T17:10:33.369Z
Learning: In the hyperlane-xyz/hyperlane-monorepo repository, when using pnpm (instead of Yarn), Foundry's `allow_paths` in solidity/foundry.toml should be set to `["./node_modules"]` rather than `["../node_modules"]` because pnpm's default node_modules structure places dependencies locally in the workspace subdirectory, not requiring access to the parent directory's node_modules.

Applied to files:

  • typescript/cli/src/tests/ethereum/core/core-check.e2e-test.ts
📚 Learning: 2025-08-26T13:45:52.227Z
Learnt from: paulbalaji
Repo: hyperlane-xyz/hyperlane-monorepo PR: 6943
File: rust/main/config/testnet_config.json:34-35
Timestamp: 2025-08-26T13:45:52.227Z
Learning: Skip reviewing mainnet_config.json and testnet_config.json configuration files in typescript/infra/config/ and rust/main/config/ directories as requested by paulbalaji to reduce review noise.

Applied to files:

  • typescript/cli/src/tests/ethereum/core/core-check.e2e-test.ts
📚 Learning: 2025-08-26T13:46:37.695Z
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.

Applied to files:

  • typescript/cli/src/tests/ethereum/core/core-check.e2e-test.ts
⏰ 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). (72)
  • GitHub Check: coverage-run
  • 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-init)
  • GitHub Check: cli-evm-e2e-matrix (core-check)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-rebalancer)
  • GitHub Check: cli-evm-e2e-matrix (core-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-2)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-recovery)
  • GitHub Check: cli-evm-e2e-matrix (warp-read)
  • GitHub Check: cli-evm-e2e-matrix (warp-send)
  • GitHub Check: cli-evm-e2e-matrix (warp-check-5)
  • GitHub Check: cli-evm-e2e-matrix (warp-deploy-1)
  • GitHub Check: cli-evm-e2e-matrix (relay)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-1)
  • GitHub Check: cli-evm-e2e-matrix (warp-extend-config)
  • GitHub Check: cli-evm-e2e-matrix (warp-bridge-2)
  • GitHub Check: cli-evm-e2e-matrix (core-deploy)
  • 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-extend-basic)
  • GitHub Check: cli-evm-e2e-matrix (core-apply)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-simple-updates)
  • GitHub Check: cli-evm-e2e-matrix (core-init)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-ism-updates)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-rebalancing-config)
  • GitHub Check: cli-evm-e2e-matrix (warp-apply-hook-updates)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, igp)
  • GitHub Check: env-test-matrix (testnet4, sepolia, core)
  • GitHub Check: env-test-matrix (mainnet3, optimism, igp)
  • GitHub Check: env-test-matrix (mainnet3, optimism, core)
  • GitHub Check: env-test-matrix (mainnet3, ethereum, core)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, core)
  • GitHub Check: env-test-matrix (mainnet3, arbitrum, igp)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-ownership-updates)
  • 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-radix-e2e-matrix (core-apply)
  • GitHub Check: cli-radix-e2e-matrix (warp-apply-route-extension)
  • GitHub Check: cli-cosmos-e2e-matrix (warp-deploy)
  • GitHub Check: aleo-sdk-e2e-run
  • GitHub Check: cli-cosmos-e2e-matrix (core-apply)
  • GitHub Check: cli-cosmos-e2e-matrix (core-read)
  • GitHub Check: cli-cosmos-e2e-matrix (core-deploy)
  • GitHub Check: cli-cosmos-e2e-matrix (core-check)
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-deploy)
  • GitHub Check: cosmos-sdk-e2e-run
  • GitHub Check: cli-install-test-run
  • GitHub Check: cli-cross-chain-e2e-matrix (warp-apply)
  • GitHub Check: pnpm-test-run
  • GitHub Check: infra-test
  • GitHub Check: e2e-matrix (starknet)
  • GitHub Check: e2e-matrix (sealevel)
  • GitHub Check: e2e-matrix (cosmwasm)
  • GitHub Check: pnpm-install
  • GitHub Check: e2e-matrix (evm)
  • GitHub Check: e2e-matrix (radix)
  • GitHub Check: e2e-matrix (cosmosnative)
  • GitHub Check: agent-configs (mainnet3)
  • GitHub Check: agent-configs (testnet4)
  • GitHub Check: lint-prettier
  • GitHub Check: build-and-push-to-gcr
  • GitHub Check: fork-tests
  • GitHub Check: slither
  • GitHub Check: diff-check
  • GitHub Check: test-rs
  • GitHub Check: lander-coverage
  • GitHub Check: lint-rs
  • GitHub Check: diff-check

…upport

The previous fix moved the requiresKey check too early, before AltVM providers
were set up. This broke non-sign commands (like 'core read') that still need
AltVM providers but don't need signers.

The check now correctly returns early AFTER setting up AltVM providers but
BEFORE signer setup, matching the original behavior.
The test iterates over ~133 warp IDs, each making a network request to the
GitHub registry. The default 2000ms timeout was insufficient, causing
consistent CI failures.
@paulbalaji
Copy link
Collaborator Author

@paulbalaji paulbalaji force-pushed the pbio-cursor/investigate-pnpm-package-manager-migration-2193 branch from 96a5f05 to 12f6846 Compare December 11, 2025 19:14
@paulbalaji paulbalaji requested review from Xaroz, ltyu and xeno097 December 11, 2025 19:27
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.

It's getting better all the time

The build:zk script exists in solidity/package.json but was being called
from root in npm-beta-release.yml workflow. With pnpm, root scripts don't
automatically find workspace scripts.

- Add build:zk to turbo.json tasks (depends on build)
- Add build:zk script to root package.json delegating to turbo

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@hyper-gonk
Copy link
Contributor

hyper-gonk bot commented Dec 12, 2025

🐳 Monorepo Docker Image Built Successfully

Image Tags:

gcr.io/abacus-labs-dev/hyperlane-monorepo:pr-7410
gcr.io/abacus-labs-dev/hyperlane-monorepo:e5016c3-20251212-171401

@hyper-gonk
Copy link
Contributor

hyper-gonk bot commented Dec 12, 2025

🦀 Rust Agent Docker Image Built Successfully

Image Tags:

gcr.io/abacus-labs-dev/hyperlane-agent:pr-7410
gcr.io/abacus-labs-dev/hyperlane-agent:e5016c3-20251212-171400

@paulbalaji paulbalaji mentioned this pull request Dec 12, 2025
2 tasks
github-merge-queue bot pushed a commit to hyperlane-xyz/hyperlane-warp-ui-template that referenced this pull request Dec 15, 2025
## Summary

Migrate package manager from Yarn 4.x (Berry) to pnpm 10.x, following
the patterns established in the monorepo migration
([hyperlane-monorepo#7410](hyperlane-xyz/hyperlane-monorepo#7410)).

**Changes:**
- Update `packageManager` to pnpm@10.25.0
- Convert `resolutions` to `pnpm.overrides`
- Convert yarn patches to `pnpm.patchedDependencies` format
- Pin dependency versions to match yarn.lock (pnpm re-resolves `^`
ranges to latest):
  - `@cosmos-kit/react`: 2.18.0
  - `@solana/wallet-adapter-wallets`: 0.19.16
  - `@rainbow-me/rainbowkit`: 2.2.0
- Add phantom dependencies required by pnpm strict dependency isolation
- Update CI workflows to use pnpm (pnpm/action-setup@v4, pnpm store
caching)
- Update GitHub Actions to latest versions (checkout@v6, setup-node@v6)
- Update vercel.json to use pnpm@10.25.0
- Update README with pnpm commands
- Remove yarn files (.yarn/, .yarnrc.yml, yarn.lock)
- Add pnpm-lock.yaml

## Test plan

- [x] `pnpm install` succeeds
- [x] `pnpm typecheck` passes
- [x] `pnpm build` succeeds
- [x] `pnpm lint` passes
- [x] CI workflows pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added support for Solana wallet integrations, Sentry error monitoring,
and additional Chakra UI packages.

* **Chores**
* Migrated project tooling, package manager metadata, and CI workflows
from Yarn to pnpm; updated GitHub Actions and dev tooling versions.
* Upgraded and added multiple dependencies and devDependencies; replaced
resolution/patch approach with pnpm-compatible overrides.

* **Documentation**
  * Updated CLI/README commands and ignore lists to reflect pnpm usage.

<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
@paulbalaji paulbalaji enabled auto-merge December 15, 2025 15:21
@paulbalaji paulbalaji added this pull request to the merge queue Dec 15, 2025
Merged via the queue into main with commit f9f300d Dec 15, 2025
102 checks passed
@paulbalaji paulbalaji deleted the pbio-cursor/investigate-pnpm-package-manager-migration-2193 branch December 15, 2025 15:33
@github-project-automation github-project-automation bot moved this from In Review to Done in Hyperlane Tasks Dec 15, 2025
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.

Hyperlane Gnosis Safe integration

3 participants