Skip to content

Commit 9d0e460

Browse files
Merge branch 'main' into pr-branch
2 parents b1a7338 + 44d1f73 commit 9d0e460

696 files changed

Lines changed: 93546 additions & 25064 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/config.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"@hyperlane-xyz/cli",
1111
"@hyperlane-xyz/cosmos-sdk",
1212
"@hyperlane-xyz/cosmos-types",
13-
"@hyperlane-xyz/eslint-config",
1413
"@hyperlane-xyz/github-proxy",
1514
"@hyperlane-xyz/helloworld",
1615
"@hyperlane-xyz/http-registry-server",

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
typescript/sdk/src/cw-types/*.types.ts linguist-generated=true
2+
typescript/svm-sdk/src/hyperlane/program-bytes.ts linguist-generated=true binary
23
rust/main/chains/hyperlane-ethereum/abis/*.abi.json linguist-generated=true
34
solidity/contracts/interfaces/avs/*.sol linguist-vendored=true
45
solidity/contracts/avs/ECDSA*.sol linguist-vendored=true

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,5 @@ typescript/rebalancer-sim @Mo-Hussain @nambrot @paulbalaji
4040
typescript/relayer @Mo-Hussain @yorhodes @paulbalaji
4141

4242
## Shared Tooling
43-
typescript/eslint-config @xeno097 @paulbalaji
43+
oxlint.json @xeno097 @paulbalaji
4444
typescript/tsconfig @xeno097 @paulbalaji

.github/workflows/claude-code-review.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ jobs:
7777
PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
7878
with:
7979
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
80-
prompt: "Use agent teams to run /claude-review, then use /inline-pr-comments to post findings as a consolidated PR review with inline comments"
80+
prompt: 'Use agent teams to run /claude-review, then use /inline-pr-comments to post findings as a consolidated PR review with inline comments'
8181
track_progress: true
8282
use_sticky_comment: false
8383
claude_args: |
@@ -132,7 +132,7 @@ jobs:
132132
PR_NUMBER: ${{ github.event.issue.number }}
133133
with:
134134
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
135-
prompt: "Use agent teams to run /claude-security-review, then use /inline-pr-comments to post findings as a consolidated PR review with inline comments"
135+
prompt: 'Use agent teams to run /claude-security-review, then use /inline-pr-comments to post findings as a consolidated PR review with inline comments'
136136
track_progress: true
137137
use_sticky_comment: false
138138
claude_args: |
@@ -200,7 +200,7 @@ jobs:
200200
PR_NUMBER: ${{ github.event.issue.number }}
201201
with:
202202
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
203-
prompt: "Use agent teams to run /claude-tob-review, then use /inline-pr-comments to post findings as a consolidated PR review with inline comments"
203+
prompt: 'Use agent teams to run /claude-tob-review, then use /inline-pr-comments to post findings as a consolidated PR review with inline comments'
204204
track_progress: true
205205
use_sticky_comment: false
206206
claude_args: |
@@ -271,7 +271,7 @@ jobs:
271271
PR_NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }}
272272
with:
273273
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
274-
prompt: "When you have specific code feedback on changed lines, use /inline-pr-comments to deliver it as a consolidated GitHub review with inline comments."
274+
prompt: 'When you have specific code feedback on changed lines, use /inline-pr-comments to deliver it as a consolidated GitHub review with inline comments.'
275275
track_progress: true
276276
use_sticky_comment: false
277-
claude_args: "--model ${{ env.CLAUDE_SONNET_MODEL }}"
277+
claude_args: '--model ${{ env.CLAUDE_SONNET_MODEL }}'

.github/workflows/ghcr-cleanup.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
hyperlane-agent
4141
hyperlane-monorepo
4242
hyperlane-node-services
43-
image-tags: "pr-*"
43+
image-tags: 'pr-*'
4444
tag-selection: tagged
4545
cut-off: 1w
4646
keep-n-most-recent: 5

.github/workflows/node-services-docker.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ jobs:
128128
|-------|-----|
129129
| hyperlane-node-services | \`${TAG_SHA_DATE}\` |
130130
131-
**Services included:** rebalancer, warp-monitor, ccip-server, keyfunder, relayer
131+
**Services included:** rebalancer, warp-monitor, ccip-server, keyfunder, relayer, fee-quoting
132132
133133
**Full image path:**
134134
\`\`\`

.github/workflows/release.yml

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ on:
1010
- 'typescript/**'
1111
- '!typescript/infra/**'
1212
- '!typescript/ccip-server/**'
13-
- '!typescript/eslint-config/**'
1413
- '!typescript/github-proxy/**'
1514
- '!typescript/http-registry-server/**'
1615
- '!typescript/tsconfig/**'
@@ -31,6 +30,11 @@ on:
3130
- alpha
3231
- rc
3332
- preview
33+
include_zksync:
34+
description: 'Include ZKSync build artifacts (adds ~6min)'
35+
required: false
36+
default: false
37+
type: boolean
3438

3539
concurrency: ${{ github.workflow }}-${{ github.ref }}
3640

@@ -255,6 +259,19 @@ jobs:
255259
- name: Install dependencies
256260
run: pnpm install --frozen-lockfile
257261

262+
# Need to install foundry for the build step. `hardhat-foundry` expects foundry to be installed.
263+
- name: Setup Foundry
264+
uses: ./.github/actions/setup-foundry
265+
266+
# Build BEFORE snapshot versioning so turbo cache hits are preserved.
267+
# Snapshot versioning rewrites every package.json, which invalidates turbo hashes.
268+
- name: Build packages
269+
run: pnpm run build
270+
271+
- name: Build ZKSync artifacts
272+
if: inputs.include_zksync
273+
run: pnpm run build:zk
274+
258275
- name: Create snapshot versions
259276
run: pnpm exec changeset version --snapshot ${{ inputs.snapshot_tag }}
260277

@@ -264,13 +281,6 @@ jobs:
264281
SNAPSHOT_VERSION=$(node -p "require('./typescript/sdk/package.json').version")
265282
echo "snapshot=$SNAPSHOT_VERSION" >> $GITHUB_OUTPUT
266283
267-
# Need to install foundry for the build step. `hardhat-foundry` expects foundry to be installed.
268-
- name: Setup Foundry
269-
uses: ./.github/actions/setup-foundry
270-
271-
- name: Build packages
272-
run: pnpm run build && pnpm run build:zk
273-
274284
- name: Publish beta packages
275285
run: pnpm exec changeset publish --tag ${{ inputs.snapshot_tag }} --no-git-tag
276286
env:
@@ -289,3 +299,31 @@ jobs:
289299
echo "npm install @hyperlane-xyz/sdk@${{ inputs.snapshot_tag }}" >> $GITHUB_STEP_SUMMARY
290300
echo "npm install @hyperlane-xyz/cli@${{ inputs.snapshot_tag }}" >> $GITHUB_STEP_SUMMARY
291301
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
302+
303+
notify-publish-failure:
304+
if: >-
305+
always() && (
306+
needs.publish-release.result == 'failure' ||
307+
needs.check-latest-published.result == 'failure' ||
308+
needs.cli-install-cross-platform-release-test.result == 'failure'
309+
)
310+
needs:
311+
[
312+
check-latest-published,
313+
cli-install-cross-platform-release-test,
314+
publish-release,
315+
]
316+
runs-on: ubuntu-latest
317+
steps:
318+
- name: Notify Slack on publish failure
319+
uses: slackapi/slack-github-action@v3
320+
with:
321+
webhook: ${{ secrets.SLACK_INCIDENTS_WEBHOOK }}
322+
webhook-type: incoming-webhook
323+
payload: |
324+
text: ":red-siren: NPM package publish failed — see workflow run for details"
325+
blocks:
326+
- type: "section"
327+
text:
328+
type: "mrkdwn"
329+
text: ":red-siren: *NPM package publish failed*\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View workflow run #${{ github.run_number }}>"

.github/workflows/rust-release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ jobs:
191191
git config user.name "${{ steps.generate-token.outputs.app-slug }}[bot]"
192192
git config user.email "${BOT_USER_ID}+${{ steps.generate-token.outputs.app-slug }}[bot]@users.noreply.github.com"
193193
194-
BRANCH_NAME="release-agents-v${NEW_VERSION}"
194+
BRANCH_NAME="release-agents"
195195
196196
# Create branch from current HEAD (which is main)
197197
git checkout -B "$BRANCH_NAME"

.github/workflows/solidity-fork-tests.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,3 @@ jobs:
5353
- name: Run Fork Tests
5454
working-directory: ./solidity
5555
run: pnpm run test:fork
56-
57-
- name: Run Multicollateral Fork Tests
58-
working-directory: ./solidity/multicollateral
59-
run: pnpm run test:fork

.github/workflows/test-cli-e2e.yml

Lines changed: 165 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@ on:
1414
type: string
1515
has_radix:
1616
type: string
17+
has_starknet:
18+
type: string
1719
has_tron:
1820
type: string
1921
has_relayer:
2022
type: string
2123
has_rebalancer:
2224
type: string
25+
has_svm:
26+
type: string
2327

2428
env:
2529
TURBO_TELEMETRY_DISABLED: 1
@@ -98,6 +102,7 @@ jobs:
98102
- warp-bridge-2
99103
- warp-deploy-1
100104
- warp-deploy-2
105+
- warp-deploy-remote-routers
101106
# check
102107
- warp-check-1
103108
- warp-check-2
@@ -259,6 +264,83 @@ jobs:
259264
env:
260265
CLI_E2E_TEST: ${{ matrix.test }}
261266

267+
# ── Starknet ─────────────────────────────────────────
268+
269+
cli-starknet-e2e-smoke:
270+
runs-on: depot-ubuntu-24.04
271+
if: (inputs.run_cli_e2e == 'true' || inputs.has_starknet == 'true') && inputs.ci_tier == 'smoke'
272+
timeout-minutes: 20
273+
strategy:
274+
fail-fast: false
275+
matrix:
276+
test:
277+
- core-deploy
278+
- warp-deploy
279+
steps:
280+
- uses: actions/checkout@v6
281+
with:
282+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
283+
submodules: recursive
284+
persist-credentials: false
285+
- name: install-hyperlane-cli
286+
uses: ./.github/actions/install-cli
287+
with:
288+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
289+
- name: Checkout registry
290+
uses: ./.github/actions/checkout-registry
291+
- name: CLI starknet e2e tests (${{ matrix.test }})
292+
run: pnpm -C typescript/cli test:starknet:e2e
293+
env:
294+
CLI_E2E_TEST: ${{ matrix.test }}
295+
CLI_E2E_TIER: ${{ inputs.ci_tier }}
296+
297+
cli-starknet-e2e-matrix:
298+
runs-on: depot-ubuntu-24.04
299+
if: (inputs.run_cli_e2e == 'true' || inputs.has_starknet == 'true') && inputs.ci_tier == 'full'
300+
timeout-minutes: 20
301+
strategy:
302+
fail-fast: false
303+
matrix:
304+
test:
305+
- core-apply-mailbox-owner
306+
- core-apply-default-hook-protocol-fee
307+
- core-apply-default-ism-redeploy
308+
- core-apply-routing-ism-owner
309+
- core-deploy
310+
- core-read
311+
- ism
312+
- warp-apply-hook-add-merkle
313+
- warp-apply-hook-replace-with-protocol-fee
314+
- warp-apply-hook-update-protocol-fee-config
315+
- warp-apply-hook-same-config
316+
- warp-apply-ism-add-test-ism
317+
- warp-apply-ism-replace-with-message-id-multisig
318+
- warp-apply-ism-same-config
319+
- warp-apply-ownership-preserve
320+
- warp-apply-ownership-starknet1
321+
- warp-apply-ownership-starknet2
322+
- warp-apply-ownership-all
323+
- warp-apply-route-extension
324+
- warp-deploy
325+
- warp-read
326+
steps:
327+
- uses: actions/checkout@v6
328+
with:
329+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
330+
submodules: recursive
331+
persist-credentials: false
332+
- name: install-hyperlane-cli
333+
uses: ./.github/actions/install-cli
334+
with:
335+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
336+
- name: Checkout registry
337+
uses: ./.github/actions/checkout-registry
338+
- name: CLI starknet e2e tests (${{ matrix.test }})
339+
run: pnpm -C typescript/cli test:starknet:e2e
340+
env:
341+
CLI_E2E_TEST: ${{ matrix.test }}
342+
CLI_E2E_TIER: ${{ inputs.ci_tier }}
343+
262344
# ── Tron (small — always full) ──────────────────────
263345

264346
cli-tron-e2e-matrix:
@@ -289,7 +371,7 @@ jobs:
289371
env:
290372
CLI_E2E_TEST: ${{ matrix.test }}
291373

292-
# ── Cross-chain (small — always full) ───────────────
374+
# ── Cross-chain ─────────────────────────────────────
293375

294376
cli-cross-chain-e2e-matrix:
295377
runs-on: depot-ubuntu-24.04
@@ -319,6 +401,33 @@ jobs:
319401
env:
320402
CLI_E2E_TEST: ${{ matrix.test }}
321403

404+
cli-cross-chain-starknet-e2e-matrix:
405+
runs-on: depot-ubuntu-24.04
406+
if: inputs.run_cli_e2e == 'true' || inputs.has_starknet == 'true'
407+
timeout-minutes: 20
408+
strategy:
409+
fail-fast: false
410+
matrix:
411+
test:
412+
- warp-apply-starknet
413+
- warp-deploy-starknet
414+
steps:
415+
- uses: actions/checkout@v6
416+
with:
417+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
418+
submodules: recursive
419+
persist-credentials: false
420+
- name: install-hyperlane-cli
421+
uses: ./.github/actions/install-cli
422+
with:
423+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
424+
- name: Checkout registry
425+
uses: ./.github/actions/checkout-registry
426+
- name: CLI cross chain e2e tests (${{ matrix.test }})
427+
run: pnpm -C typescript/cli test:cross-chain:e2e
428+
env:
429+
CLI_E2E_TEST: ${{ matrix.test }}
430+
322431
# ── Aleo ─────────────────────────────────────────────
323432

324433
cli-aleo-e2e-smoke:
@@ -389,6 +498,61 @@ jobs:
389498
env:
390499
CLI_E2E_TEST: ${{ matrix.test }}
391500

501+
# ── SVM (Sealevel) ──────────────────────────────────
502+
503+
cli-svm-e2e-smoke:
504+
runs-on: depot-ubuntu-24.04
505+
if: (inputs.run_cli_e2e == 'true' || inputs.has_svm == 'true') && inputs.ci_tier == 'smoke'
506+
timeout-minutes: 15
507+
strategy:
508+
fail-fast: false
509+
matrix:
510+
test:
511+
- core-deploy
512+
steps:
513+
- uses: actions/checkout@v6
514+
with:
515+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
516+
submodules: recursive
517+
persist-credentials: false
518+
- name: install-hyperlane-cli
519+
uses: ./.github/actions/install-cli
520+
with:
521+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
522+
- name: Checkout registry
523+
uses: ./.github/actions/checkout-registry
524+
- name: CLI sealevel e2e tests (${{ matrix.test }})
525+
run: pnpm -C typescript/cli test:sealevel:e2e
526+
env:
527+
CLI_E2E_TEST: ${{ matrix.test }}
528+
529+
cli-svm-e2e-matrix:
530+
runs-on: depot-ubuntu-24.04
531+
if: (inputs.run_cli_e2e == 'true' || inputs.has_svm == 'true') && inputs.ci_tier == 'full'
532+
timeout-minutes: 15
533+
strategy:
534+
fail-fast: false
535+
matrix:
536+
test:
537+
- core-deploy
538+
- core-apply
539+
steps:
540+
- uses: actions/checkout@v6
541+
with:
542+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
543+
submodules: recursive
544+
persist-credentials: false
545+
- name: install-hyperlane-cli
546+
uses: ./.github/actions/install-cli
547+
with:
548+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
549+
- name: Checkout registry
550+
uses: ./.github/actions/checkout-registry
551+
- name: CLI sealevel e2e tests (${{ matrix.test }})
552+
run: pnpm -C typescript/cli test:sealevel:e2e
553+
env:
554+
CLI_E2E_TEST: ${{ matrix.test }}
555+
392556
# ── Package-specific targeted tests ─────────────────
393557
# Run only when peripheral packages change, testing just the
394558
# specific CLI commands that use them. Full coverage in merge queue.

0 commit comments

Comments
 (0)