feat(infra): migrate keyfunder to standalone Docker package#7718
Closed
paulbalaji wants to merge 6 commits intomainfrom
Closed
feat(infra): migrate keyfunder to standalone Docker package#7718paulbalaji wants to merge 6 commits intomainfrom
paulbalaji wants to merge 6 commits intomainfrom
Conversation
Migrates the keyfunder from embedded infra code to a standalone package at typescript/keyfunder/ with its own Docker image, following the pattern established by ccip-server, rebalancer, and warp-monitor. Key changes: - New standalone package with config-driven YAML configuration - Removed L2 bridging - keyfunder is now a pure fund dispersal tool - No GCP SDK dependency - secrets injected via K8s ExternalSecrets - Uses Prometheus push gateway for metrics (CronJob pattern) - Registry URI with commit pinning via REGISTRY_URI env var - RPC overrides via RPC_URL_<CHAIN> env vars Helm chart updates: - ConfigMap for keyfunder.yaml config - Updated CronJob to run standalone Docker image - Simplified ExternalSecret for funder key and RPC URLs Deleted: - fund-keys-from-deployer.ts (37KB legacy script) - addresses-external-secret.yaml (addresses now in config YAML)
|
Config now uses a 'roles' section to define addresses once, and chains
reference role names in their 'balances' map. This simplifies config
management for roles that use the same address across all chains
(relayer, kathy, rebalancer).
Before (address repeated per chain):
chains:
ethereum:
keys:
- address: '0x...'
role: 'relayer'
desiredBalance: '0.5'
arbitrum:
keys:
- address: '0x...' # same address repeated
role: 'relayer'
desiredBalance: '0.1'
After (address defined once):
roles:
hyperlane-relayer:
address: '0x...'
chains:
ethereum:
balances:
hyperlane-relayer: '0.5'
arbitrum:
balances:
hyperlane-relayer: '0.1'
c4759af to
e57e92c
Compare
e57e92c to
b8d2f02
Compare
b093a7a to
532846b
Compare
Contributor
🔑 KeyFunder Docker Image Built SuccessfullyImage Tags: |
Contributor
🐳 Monorepo Docker Image Built SuccessfullyImage Tags: |
Collaborator
Author
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7718 +/- ##
=======================================
Coverage 77.02% 77.02%
=======================================
Files 117 117
Lines 2651 2651
Branches 244 244
=======================================
Hits 2042 2042
Misses 593 593
Partials 16 16
🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Migrates the keyfunder from embedded infra code to a standalone package at
typescript/keyfunder/with its own Docker image. This follows the pattern established by ccip-server (#7565), rebalancer (#7545), and warp-monitor (#7653).Linear Issues
Key Changes
New Standalone Package (
typescript/keyfunder/)--configflag orKEYFUNDER_CONFIG_FILEenv varREGISTRY_URIfor chain metadata with commit pinning supportRPC_URL_<CHAIN_UPPER_SNAKE>env varsConfig Structure (Option A: Global Roles)
Roles define WHO (address once), chains define HOW MUCH (balances reference role names):
Helm Chart Updates (
typescript/infra/helm/key-funder/)Infra Package Updates
KeyFunderHelmManager.forEnvironment()now requiresregistryCommitparametergenerateKeyfunderYaml()method to transform legacy environment configdeploy-key-funder.tsnow uses.registryrcas default with override optionCI/CD
.github/workflows/keyfunder-docker.yml- builds and pushesgcr.io/abacus-labs-dev/hyperlane-keyfundertypescript/keyfunder/**or manual dispatchMisc
.opencode/to root.gitignoreDeleted
fund-keys-from-deployer.ts(37KB legacy script)addresses-external-secret.yaml(addresses embedded in config)Testing
pnpm buildpassespnpm lintpassespnpm bundleproduces working bundleCommits
a128253b0- feat(infra): migrate keyfunder to standalone Docker package21e0afa4f- refactor(keyfunder): use global roles with per-chain balancesbb53853c4- fix: add keyfunder package.json COPY to Dockerfilea030115af- ci: add keyfunder Docker build workflowb8d2f02f3- fix(keyfunder): add package turbo.json to ensure build runs before bundleb093a7a96- feat(infra): use .registryrc as default for deploy-key-funder with override option