diff --git a/typescript/infra/config/docker.ts b/typescript/infra/config/docker.ts new file mode 100644 index 00000000000..35efa3cc915 --- /dev/null +++ b/typescript/infra/config/docker.ts @@ -0,0 +1,48 @@ +export const DockerImageRepos = { + AGENT: 'gcr.io/abacus-labs-dev/hyperlane-agent', + MONOREPO: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', + WARP_MONITOR: 'gcr.io/abacus-labs-dev/hyperlane-warp-monitor', + REBALANCER: 'gcr.io/abacus-labs-dev/hyperlane-rebalancer', +} as const; + +interface AgentDockerTags { + relayer: string; + relayerRC: string; + validator: string; + validatorRC: string; + scraper: string; +} + +interface BaseDockerTags extends AgentDockerTags { + keyFunder: string; + kathy: string; +} + +interface MainnetDockerTags extends BaseDockerTags { + checkWarpDeploy: string; + warpMonitor: string; + rebalancer: string; +} + +export const mainnetDockerTags: MainnetDockerTags = { + relayer: '28f67ad-20260103-234517', + relayerRC: '28f67ad-20260103-234517', + validator: '28f67ad-20260103-234517', + validatorRC: '28f67ad-20260103-234517', + scraper: '28f67ad-20260103-234517', + keyFunder: 'ff24bc3-20260104-175430', + kathy: '8da6852-20251215-172511', + checkWarpDeploy: '8da6852-20251215-172511', + warpMonitor: 'eda7b03-20251230-135200', + rebalancer: 'be84fc0-20251229-194426', +}; + +export const testnetDockerTags: BaseDockerTags = { + relayer: 'cd94774-20251217-100437', + relayerRC: 'cd94774-20251217-100437', + validator: 'cd94774-20251217-100437', + validatorRC: 'cd94774-20251217-100437', + scraper: 'f50feaa-20251219-084739', + keyFunder: '8da6852-20251215-172511', + kathy: '8da6852-20251215-172511', +}; diff --git a/typescript/infra/config/environments/mainnet3/agent.ts b/typescript/infra/config/environments/mainnet3/agent.ts index 068188edbc4..704e0742266 100644 --- a/typescript/infra/config/environments/mainnet3/agent.ts +++ b/typescript/infra/config/environments/mainnet3/agent.ts @@ -37,6 +37,7 @@ import { import { BaseScraperConfig } from '../../../src/config/agent/scraper.js'; import { ALL_KEY_ROLES, Role } from '../../../src/roles.js'; import { Contexts } from '../../contexts.js'; +import { DockerImageRepos, mainnetDockerTags } from '../../docker.js'; import { getDomainId, getWarpAddresses } from '../../registry.js'; import { environment, ethereumChainNames } from './chains.js'; @@ -58,8 +59,6 @@ import { WarpRouteIds } from './warp/warpIds.js'; // helloWorld[Contexts.ReleaseCandidate].addresses, // ); -const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; - // The chains here must be consistent with the environment's supportedChainNames, which is // checked / enforced at runtime & in the CI pipeline. // @@ -894,8 +893,8 @@ const hyperlane: RootAgentConfig = { relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: '28f67ad-20260103-234517', + repo: DockerImageRepos.AGENT, + tag: mainnetDockerTags.relayer, }, blacklist, gasPaymentEnforcement: gasPaymentEnforcement, @@ -914,8 +913,8 @@ const hyperlane: RootAgentConfig = { }, validators: { docker: { - repo, - tag: '28f67ad-20260103-234517', + repo: DockerImageRepos.AGENT, + tag: mainnetDockerTags.validator, }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.Hyperlane), @@ -925,8 +924,8 @@ const hyperlane: RootAgentConfig = { scraperOnlyChains, rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: '28f67ad-20260103-234517', + repo: DockerImageRepos.AGENT, + tag: mainnetDockerTags.scraper, }, resources: scraperResources, }, @@ -940,8 +939,8 @@ const releaseCandidate: RootAgentConfig = { relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: '28f67ad-20260103-234517', + repo: DockerImageRepos.AGENT, + tag: mainnetDockerTags.relayerRC, }, blacklist, // We're temporarily (ab)using the RC relayer as a way to increase @@ -963,8 +962,8 @@ const releaseCandidate: RootAgentConfig = { }, validators: { docker: { - repo, - tag: '28f67ad-20260103-234517', + repo: DockerImageRepos.AGENT, + tag: mainnetDockerTags.validatorRC, }, rpcConsensusType: RpcConsensusType.Quorum, chains: validatorChainConfig(Contexts.ReleaseCandidate), @@ -984,8 +983,8 @@ const neutron: RootAgentConfig = { relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: mainnetDockerTags.relayerRC, }, blacklist, gasPaymentEnforcement, diff --git a/typescript/infra/config/environments/mainnet3/funding.ts b/typescript/infra/config/environments/mainnet3/funding.ts index e10723fd100..bd084a642d5 100644 --- a/typescript/infra/config/environments/mainnet3/funding.ts +++ b/typescript/infra/config/environments/mainnet3/funding.ts @@ -3,6 +3,7 @@ import { objMap } from '@hyperlane-xyz/utils'; import { KeyFunderConfig } from '../../../src/config/funding.js'; import { Role } from '../../../src/roles.js'; import { Contexts } from '../../contexts.js'; +import { DockerImageRepos, mainnetDockerTags } from '../../docker.js'; import desiredRebalancerBalances from './balances/desiredRebalancerBalances.json' with { type: 'json' }; import desiredRelayerBalances from './balances/desiredRelayerBalances.json' with { type: 'json' }; @@ -35,8 +36,8 @@ export const keyFunderConfig: KeyFunderConfig< typeof mainnet3SupportedChainNames > = { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: 'ff24bc3-20260104-175430', + repo: DockerImageRepos.MONOREPO, + tag: mainnetDockerTags.keyFunder, }, // We're currently using the same deployer/key funder key as mainnet2. // To minimize nonce clobbering we offset the key funder cron diff --git a/typescript/infra/config/environments/mainnet3/helloworld.ts b/typescript/infra/config/environments/mainnet3/helloworld.ts index 730290a5555..65b2539c605 100644 --- a/typescript/infra/config/environments/mainnet3/helloworld.ts +++ b/typescript/infra/config/environments/mainnet3/helloworld.ts @@ -3,6 +3,7 @@ import { HelloWorldKathyRunMode, } from '../../../src/config/helloworld/types.js'; import { Contexts } from '../../contexts.js'; +import { DockerImageRepos, mainnetDockerTags } from '../../docker.js'; import { environment } from './chains.js'; import hyperlaneAddresses from './helloworld/hyperlane/addresses.json' with { type: 'json' }; @@ -12,8 +13,8 @@ export const hyperlane: HelloWorldConfig = { addresses: hyperlaneAddresses, kathy: { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8da6852-20251215-172511', + repo: DockerImageRepos.MONOREPO, + tag: mainnetDockerTags.kathy, }, chainsToSkip: [], runEnv: environment, @@ -32,8 +33,8 @@ export const releaseCandidate: HelloWorldConfig = { addresses: rcAddresses, kathy: { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8da6852-20251215-172511', + repo: DockerImageRepos.MONOREPO, + tag: mainnetDockerTags.kathy, }, chainsToSkip: [], runEnv: environment, diff --git a/typescript/infra/config/environments/mainnet3/warp/checkWarpDeploy.ts b/typescript/infra/config/environments/mainnet3/warp/checkWarpDeploy.ts index 06c65900bfa..232341cbb55 100644 --- a/typescript/infra/config/environments/mainnet3/warp/checkWarpDeploy.ts +++ b/typescript/infra/config/environments/mainnet3/warp/checkWarpDeploy.ts @@ -1,10 +1,11 @@ import { CheckWarpDeployConfig } from '../../../../src/config/funding.js'; +import { DockerImageRepos, mainnetDockerTags } from '../../../docker.js'; import { environment } from '../chains.js'; export const checkWarpDeployConfig: CheckWarpDeployConfig = { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8da6852-20251215-172511', + repo: DockerImageRepos.MONOREPO, + tag: mainnetDockerTags.checkWarpDeploy, }, namespace: environment, cronSchedule: '0 15 * * *', // set to 3pm utc every day diff --git a/typescript/infra/config/environments/testnet4/agent.ts b/typescript/infra/config/environments/testnet4/agent.ts index ccd181d6d5e..9a7ec069b80 100644 --- a/typescript/infra/config/environments/testnet4/agent.ts +++ b/typescript/infra/config/environments/testnet4/agent.ts @@ -21,6 +21,7 @@ import { } from '../../../src/config/agent/relayer.js'; import { ALL_KEY_ROLES, Role } from '../../../src/roles.js'; import { Contexts } from '../../contexts.js'; +import { DockerImageRepos, testnetDockerTags } from '../../docker.js'; import { getDomainId } from '../../registry.js'; import { environment, ethereumChainNames } from './chains.js'; @@ -35,8 +36,6 @@ const releaseCandidateHelloworldMatchingList = routerMatchingList( helloWorld[Contexts.ReleaseCandidate].addresses, ); -const repo = 'gcr.io/abacus-labs-dev/hyperlane-agent'; - // The chains here must be consistent with the environment's supportedChainNames, which is // checked / enforced at runtime & in the CI pipeline. // @@ -345,8 +344,8 @@ const hyperlane: RootAgentConfig = { relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.relayer, }, blacklist: [...releaseCandidateHelloworldMatchingList, ...relayBlacklist], gasPaymentEnforcement, @@ -366,8 +365,8 @@ const hyperlane: RootAgentConfig = { validators: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.validator, }, chains: validatorChainConfig(Contexts.Hyperlane), resources: validatorResources, @@ -375,8 +374,8 @@ const hyperlane: RootAgentConfig = { scraper: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'f50feaa-20251219-084739', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.scraper, }, resources: scraperResources, }, @@ -390,8 +389,8 @@ const releaseCandidate: RootAgentConfig = { relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.relayerRC, }, blacklist: relayBlacklist, gasPaymentEnforcement, @@ -411,8 +410,8 @@ const releaseCandidate: RootAgentConfig = { validators: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.validatorRC, }, chains: validatorChainConfig(Contexts.ReleaseCandidate), resources: validatorResources, @@ -438,8 +437,8 @@ const neutron: RootAgentConfig = { relayer: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.relayerRC, }, blacklist: relayBlacklist, gasPaymentEnforcement, @@ -459,8 +458,8 @@ const neutron: RootAgentConfig = { validators: { rpcConsensusType: RpcConsensusType.Fallback, docker: { - repo, - tag: 'cd94774-20251217-100437', + repo: DockerImageRepos.AGENT, + tag: testnetDockerTags.validatorRC, }, chains: validatorChainConfig(Contexts.ReleaseCandidate), resources: validatorResources, diff --git a/typescript/infra/config/environments/testnet4/funding.ts b/typescript/infra/config/environments/testnet4/funding.ts index fa5487c2e4e..57bbb5282c4 100644 --- a/typescript/infra/config/environments/testnet4/funding.ts +++ b/typescript/infra/config/environments/testnet4/funding.ts @@ -1,6 +1,7 @@ import { KeyFunderConfig } from '../../../src/config/funding.js'; import { Role } from '../../../src/roles.js'; import { Contexts } from '../../contexts.js'; +import { DockerImageRepos, testnetDockerTags } from '../../docker.js'; import { environment } from './chains.js'; import { testnet4SupportedChainNames } from './supportedChainNames.js'; @@ -9,8 +10,8 @@ export const keyFunderConfig: KeyFunderConfig< typeof testnet4SupportedChainNames > = { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8da6852-20251215-172511', + repo: DockerImageRepos.MONOREPO, + tag: testnetDockerTags.keyFunder, }, // We're currently using the same deployer key as testnet2. // To minimize nonce clobbering we offset the key funder cron diff --git a/typescript/infra/config/environments/testnet4/helloworld.ts b/typescript/infra/config/environments/testnet4/helloworld.ts index d8dfbab2762..15c1d050708 100644 --- a/typescript/infra/config/environments/testnet4/helloworld.ts +++ b/typescript/infra/config/environments/testnet4/helloworld.ts @@ -3,6 +3,7 @@ import { HelloWorldKathyRunMode, } from '../../../src/config/helloworld/types.js'; import { Contexts } from '../../contexts.js'; +import { DockerImageRepos, testnetDockerTags } from '../../docker.js'; import { environment } from './chains.js'; import hyperlaneAddresses from './helloworld/hyperlane/addresses.json' with { type: 'json' }; @@ -12,8 +13,8 @@ export const hyperlaneHelloworld: HelloWorldConfig = { addresses: hyperlaneAddresses, kathy: { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8da6852-20251215-172511', + repo: DockerImageRepos.MONOREPO, + tag: testnetDockerTags.kathy, }, chainsToSkip: [], runEnv: environment, @@ -31,8 +32,8 @@ export const releaseCandidateHelloworld: HelloWorldConfig = { addresses: rcAddresses, kathy: { docker: { - repo: 'gcr.io/abacus-labs-dev/hyperlane-monorepo', - tag: '8da6852-20251215-172511', + repo: DockerImageRepos.MONOREPO, + tag: testnetDockerTags.kathy, }, chainsToSkip: [], runEnv: environment, diff --git a/typescript/infra/src/rebalancer/helm.ts b/typescript/infra/src/rebalancer/helm.ts index bb7bb23aa76..8d7a2a19b97 100644 --- a/typescript/infra/src/rebalancer/helm.ts +++ b/typescript/infra/src/rebalancer/helm.ts @@ -10,6 +10,7 @@ import { DEFAULT_GITHUB_REGISTRY } from '@hyperlane-xyz/registry'; import { isObjEmpty } from '@hyperlane-xyz/utils'; import { readYaml } from '@hyperlane-xyz/utils/fs'; +import { DockerImageRepos, mainnetDockerTags } from '../../config/docker.js'; import { getWarpCoreConfig } from '../../config/registry.js'; import { DeployEnvironment } from '../config/environment.js'; import { WARP_ROUTE_MONITOR_HELM_RELEASE_PREFIX } from '../utils/consts.js'; @@ -83,13 +84,12 @@ export class RebalancerHelmManager extends HelmManager { } async helmValues() { - // Build registry URI with commit embedded in /tree/{commit} format const registryUri = `${DEFAULT_GITHUB_REGISTRY}/tree/${this.registryCommit}`; return { image: { - repository: 'gcr.io/abacus-labs-dev/hyperlane-rebalancer', - tag: 'be84fc0-20251229-194426', + repository: DockerImageRepos.REBALANCER, + tag: mainnetDockerTags.rebalancer, }, withMetrics: this.withMetrics, fullnameOverride: this.helmReleaseName, diff --git a/typescript/infra/src/warp/helm.ts b/typescript/infra/src/warp/helm.ts index 334db8f50e9..3c148c4b743 100644 --- a/typescript/infra/src/warp/helm.ts +++ b/typescript/infra/src/warp/helm.ts @@ -12,6 +12,7 @@ import { } from '@hyperlane-xyz/sdk'; import { difference, rootLogger } from '@hyperlane-xyz/utils'; +import { DockerImageRepos, mainnetDockerTags } from '../../config/docker.js'; import { DEFAULT_REGISTRY_URI, getRegistry, @@ -101,8 +102,8 @@ export class WarpRouteMonitorHelmManager extends HelmManager { async helmValues() { return { image: { - repository: 'gcr.io/abacus-labs-dev/hyperlane-warp-monitor', - tag: 'eda7b03-20251230-135200', + repository: DockerImageRepos.WARP_MONITOR, + tag: mainnetDockerTags.warpMonitor, }, warpRouteId: this.warpRouteId, fullnameOverride: this.helmReleaseName,