diff --git a/javascript/packages/cli/src/actions/spawn.ts b/javascript/packages/cli/src/actions/spawn.ts index 0386540e1..0f8d73564 100644 --- a/javascript/packages/cli/src/actions/spawn.ts +++ b/javascript/packages/cli/src/actions/spawn.ts @@ -1,5 +1,5 @@ import { Network, start } from "@zombienet/orchestrator"; -import { LaunchConfig } from "@zombienet/orchestrator/dist/types"; +import { LaunchConfig } from "@zombienet/orchestrator/dist/configTypes"; import { decorators, getCredsFilePath, diff --git a/javascript/packages/orchestrator/src/chainSpec.ts b/javascript/packages/orchestrator/src/chainSpec.ts index 4b5e66c99..9332f7f4a 100644 --- a/javascript/packages/orchestrator/src/chainSpec.ts +++ b/javascript/packages/orchestrator/src/chainSpec.ts @@ -9,7 +9,9 @@ import { import crypto from "crypto"; import fs from "fs"; import { generateKeyFromSeed } from "./keys"; -import { ChainSpec, ComputedNetwork, HrmpChannelsConfig, Node } from "./types"; +import { ChainSpec } from "./types"; +import { HrmpChannelsConfig, Node } from "./sharedTypes"; +import { ComputedNetwork } from "./configTypes"; const JSONbig = require("json-bigint")({ useNativeBigInt: true }); const debug = require("debug")("zombie::chain-spec"); diff --git a/javascript/packages/orchestrator/src/cmdGenerator.ts b/javascript/packages/orchestrator/src/cmdGenerator.ts index 7913a21c4..de4703bb6 100644 --- a/javascript/packages/orchestrator/src/cmdGenerator.ts +++ b/javascript/packages/orchestrator/src/cmdGenerator.ts @@ -6,7 +6,7 @@ import { RPC_HTTP_PORT, RPC_WS_PORT, } from "./constants"; -import { Node, SubstrateCliArgsVersion, ZombieRole } from "./types"; +import { Node, ZombieRole, SubstrateCliArgsVersion } from "./sharedTypes"; const debug = require("debug")("zombie::cmdGenerator"); diff --git a/javascript/packages/orchestrator/src/configGenerator.ts b/javascript/packages/orchestrator/src/configGenerator.ts index 7f5145f79..502c18a5a 100644 --- a/javascript/packages/orchestrator/src/configGenerator.ts +++ b/javascript/packages/orchestrator/src/configGenerator.ts @@ -30,17 +30,15 @@ import { } from "./constants"; import { generateKeyForNode } from "./keys"; import { PARA, decorate, whichPara } from "./paras-decorators"; +import { ComputedNetwork, LaunchConfig, ParachainConfig } from "./configTypes"; import { - ComputedNetwork, - LaunchConfig, - Node, NodeConfig, Override, Parachain, - ParachainConfig, - ZombieRole, envVars, -} from "./types"; + Node, + ZombieRole, +} from "./sharedTypes"; const debug = require("debug")("zombie::config-manager"); diff --git a/javascript/packages/orchestrator/src/configTypes.ts b/javascript/packages/orchestrator/src/configTypes.ts new file mode 100644 index 000000000..33702b5db --- /dev/null +++ b/javascript/packages/orchestrator/src/configTypes.ts @@ -0,0 +1,122 @@ +import { + CommonParachainConfig, + HrmpChannelsConfig, + NodeCommonTypes, + NodeConfig, + ObjectJSON, + Override, + Parachain, + Resources, + SubstrateCliArgsVersion, + Node, +} from "./sharedTypes"; + +// network config to spawn. +export interface LaunchConfig extends PolkadotLaunchConfig { + config: { provider: string }; + settings: Settings; + configBasePath: string; +} + +export interface PolkadotLaunchConfig { + relaychain: RelayChainConfig; + parachains: ParachainConfig[]; + types: any; + hrmp_channels?: HrmpChannelsConfig[]; +} + +export interface RelayChainConfig { + default_command?: string; + default_image?: string; + default_resources?: Resources; + default_db_snapshot?: string; + default_prometheus_prefix?: string; + default_substrate_cli_args_version?: SubstrateCliArgsVersion; + chain: string; + chain_spec_path?: string; + chain_spec_command?: string; + default_args?: string[]; + default_overrides?: Override[]; + random_nominators_count?: number; + max_nominations?: number; + nodes?: NodeConfig[]; + node_groups?: NodeGroupConfig[]; + total_node_in_groups?: number; + genesis?: JSON | ObjectJSON; +} + +export interface ComputedNetwork { + settings: Settings; + relaychain: { + defaultImage: string; + defaultCommand: string; + defaultArgs: string[]; + defaultDbSnapshot?: string; + defaultPrometheusPrefix: string; + chain: string; + chainSpecPath?: string; + chainSpecCommand?: string; + randomNominatorsCount: number; + maxNominations: number; + nodes: Node[]; + overrides: Override[]; + genesis?: JSON | ObjectJSON; + defaultResources?: Resources; + }; + parachains: Parachain[]; + types: any; + hrmp_channels?: HrmpChannelsConfig[]; + configBasePath: string; + seed: string; +} + +export interface Settings { + global_volumes?: GlobalVolume[]; + bootnode?: boolean; + bootnode_domain?: string; + timeout: number; + node_spawn_timeout?: number; + grafana?: boolean; + telemetry?: boolean; + prometheus?: boolean; + jaeger_agent?: string; // agent or collator + tracing_collator_url?: string; // collator query url + tracing_collator_service_name?: string; // only used by k8s provider and if not set the `url` + tracing_collator_service_namespace?: string; // only used by k8s provider and if not set the `url` + tracing_collator_service_port?: number; // only used by k8s provider and if not set the `url` + enable_tracing?: boolean; + provider: string; + polkadot_introspector?: boolean; + backchannel?: boolean; // only used in k8s at the moment, spawn a backchannel instance + image_pull_policy?: "IfNotPresent" | "Never" | "Always"; + local_ip?: string; // ip used for expose local services (rpc/metrics/monitors) +} + +export interface GlobalVolume { + name: string; + fs_type: string; + mount_path: string; +} + +export interface ParachainConfig extends CommonParachainConfig { + add_to_genesis?: boolean; + register_para?: boolean; + onboard_as_parachain?: boolean; + genesis_wasm_path?: string; + genesis_wasm_generator?: string; + genesis_state_path?: string; + genesis_state_generator?: string; + chain_spec_path?: string; + cumulus_based?: boolean; + bootnodes?: string[]; + prometheus_prefix?: string; + // backward compatibility + collator?: NodeConfig; + collators?: NodeConfig[]; + collator_groups?: NodeGroupConfig[]; +} + +export interface NodeGroupConfig extends NodeCommonTypes { + image?: string; + count: string | number; +} diff --git a/javascript/packages/orchestrator/src/index.ts b/javascript/packages/orchestrator/src/index.ts index 6b94c02b7..d9f6fbb9d 100644 --- a/javascript/packages/orchestrator/src/index.ts +++ b/javascript/packages/orchestrator/src/index.ts @@ -2,12 +2,10 @@ export { Network } from "./network"; export { start, test } from "./orchestrator"; export { Providers } from "./providers"; export { run } from "./test-runner"; +export { TestDefinition } from "./types"; export { - HrmpChannelsConfig, + PolkadotLaunchConfig, LaunchConfig, - NodeConfig, - ObjectJSON, ParachainConfig, - PolkadotLaunchConfig, - TestDefinition, -} from "./types"; +} from "./configTypes"; +export { HrmpChannelsConfig, ObjectJSON, NodeConfig } from "./sharedTypes"; diff --git a/javascript/packages/orchestrator/src/keys.ts b/javascript/packages/orchestrator/src/keys.ts index 927a459e5..a79ca0580 100644 --- a/javascript/packages/orchestrator/src/keys.ts +++ b/javascript/packages/orchestrator/src/keys.ts @@ -7,7 +7,7 @@ import { } from "@polkadot/util-crypto"; import { makeDir } from "@zombienet/utils"; import fs from "fs"; -import { Node } from "./types"; +import { Node } from "./sharedTypes"; function nameCase(string: string) { return string.charAt(0).toUpperCase() + string.slice(1); diff --git a/javascript/packages/orchestrator/src/network-helpers/tracing-collator.ts b/javascript/packages/orchestrator/src/network-helpers/tracing-collator.ts index feebb6e39..58c9b4f36 100644 --- a/javascript/packages/orchestrator/src/network-helpers/tracing-collator.ts +++ b/javascript/packages/orchestrator/src/network-helpers/tracing-collator.ts @@ -8,7 +8,7 @@ import { import { Network } from "../network"; import { Client } from "../providers/client"; import { PodmanClient } from "../providers/podman/podmanClient"; -import { ComputedNetwork } from "../types"; +import { ComputedNetwork } from "../configTypes"; export async function setTracingCollatorConfig( networkSpec: ComputedNetwork, diff --git a/javascript/packages/orchestrator/src/orchestrator.ts b/javascript/packages/orchestrator/src/orchestrator.ts index a09c8755c..c810e7fe0 100644 --- a/javascript/packages/orchestrator/src/orchestrator.ts +++ b/javascript/packages/orchestrator/src/orchestrator.ts @@ -37,13 +37,7 @@ import { registerParachain } from "./jsapi-helpers"; import { Network, Scope } from "./network"; import { generateParachainFiles } from "./paras"; import { getProvider } from "./providers/"; -import { - ComputedNetwork, - LaunchConfig, - Node, - Parachain, - fileMap, -} from "./types"; +import { fileMap } from "./types"; import { spawnIntrospector } from "./network-helpers/instrospector"; import { setTracingCollatorConfig } from "./network-helpers/tracing-collator"; @@ -52,6 +46,8 @@ import { Client } from "./providers/client"; import { KubeClient } from "./providers/k8s/kubeClient"; import { spawnNode } from "./spawner"; import { setSubstrateCliArgsVersion } from "./substrateCliArgsHelper"; +import { ComputedNetwork, LaunchConfig } from "./configTypes"; +import { Node, Parachain } from "./sharedTypes"; const debug = require("debug")("zombie"); diff --git a/javascript/packages/orchestrator/src/paras-decorators/acala.ts b/javascript/packages/orchestrator/src/paras-decorators/acala.ts index daea120ca..390f94032 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/acala.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/acala.ts @@ -1,4 +1,4 @@ -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Acala genesis node key type export type GenesisNodeKey = [string, string, { [key: string]: string }]; diff --git a/javascript/packages/orchestrator/src/paras-decorators/asset_hub_polkadot.ts b/javascript/packages/orchestrator/src/paras-decorators/asset_hub_polkadot.ts index ad78dfb75..0b9d05ffc 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/asset_hub_polkadot.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/asset_hub_polkadot.ts @@ -1,5 +1,5 @@ import { GenesisNodeKey, getNodeKey as _getNodeKey } from "../chainSpec"; -import { Node } from "../types"; +import { Node } from "../sharedTypes"; export function getNodeKey(node: Node, useStash = true): GenesisNodeKey { const { ed_account } = node.accounts; diff --git a/javascript/packages/orchestrator/src/paras-decorators/astar.ts b/javascript/packages/orchestrator/src/paras-decorators/astar.ts index 7bf1fd0f2..3fc6785ea 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/astar.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/astar.ts @@ -1,4 +1,4 @@ -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Astar genesis node key type export type GenesisNodeKey = [string, string, { [key: string]: string }]; diff --git a/javascript/packages/orchestrator/src/paras-decorators/bifrost.ts b/javascript/packages/orchestrator/src/paras-decorators/bifrost.ts index 2fb25ffc7..4ca60df04 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/bifrost.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/bifrost.ts @@ -1,4 +1,4 @@ -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Bifrost genesis node key type export type GenesisNodeKey = [string, string, { [key: string]: string }]; diff --git a/javascript/packages/orchestrator/src/paras-decorators/efinity.ts b/javascript/packages/orchestrator/src/paras-decorators/efinity.ts index bc517946c..49ff01bcf 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/efinity.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/efinity.ts @@ -1,4 +1,4 @@ -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Efinity genesis node key type export type GenesisNodeKey = [string, string, { [key: string]: string }]; diff --git a/javascript/packages/orchestrator/src/paras-decorators/equilibrium.ts b/javascript/packages/orchestrator/src/paras-decorators/equilibrium.ts index e82626975..756831c16 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/equilibrium.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/equilibrium.ts @@ -4,7 +4,7 @@ import { readAndParseChainSpec, writeChainSpec, } from "../chainSpec"; -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Acala genesis node key type export type GenesisNodeKey = [string, string, { [key: string]: string }]; diff --git a/javascript/packages/orchestrator/src/paras-decorators/local-v.ts b/javascript/packages/orchestrator/src/paras-decorators/local-v.ts index 06a81d197..b5668f4b4 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/local-v.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/local-v.ts @@ -9,7 +9,7 @@ import { writeChainSpec, } from "../chainSpec"; import { generateKeyForNode as _generateKeyForNode } from "../keys"; -import { Node } from "../types"; +import { Node } from "../sharedTypes"; async function generateKeyForNode(nodeName?: string): Promise { const keys = await _generateKeyForNode(nodeName); diff --git a/javascript/packages/orchestrator/src/paras-decorators/mangata.ts b/javascript/packages/orchestrator/src/paras-decorators/mangata.ts index caf0167e0..a0b16404b 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/mangata.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/mangata.ts @@ -4,7 +4,7 @@ import { readAndParseChainSpec, writeChainSpec, } from "../chainSpec"; -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Track 1st staking bond as default let paraStakingBond: number | undefined; diff --git a/javascript/packages/orchestrator/src/paras-decorators/moonbeam.ts b/javascript/packages/orchestrator/src/paras-decorators/moonbeam.ts index ba7d115ab..a67282696 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/moonbeam.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/moonbeam.ts @@ -10,7 +10,8 @@ import { writeChainSpec, } from "../chainSpec"; import { generateKeyForNode as _generateKeyForNode } from "../keys"; -import { ChainSpec, Node } from "../types"; +import { ChainSpec } from "../types"; +import { Node } from "../sharedTypes"; // track 1st staking as default; let paraStakingBond: bigint | undefined; diff --git a/javascript/packages/orchestrator/src/paras-decorators/oak.ts b/javascript/packages/orchestrator/src/paras-decorators/oak.ts index e6999c063..3bfc3b8b7 100644 --- a/javascript/packages/orchestrator/src/paras-decorators/oak.ts +++ b/javascript/packages/orchestrator/src/paras-decorators/oak.ts @@ -4,7 +4,7 @@ import { readAndParseChainSpec, writeChainSpec, } from "../chainSpec"; -import { Node } from "../types"; +import { Node } from "../sharedTypes"; // Track 1st staking bond as default let paraStakingBond: number | undefined; diff --git a/javascript/packages/orchestrator/src/paras.ts b/javascript/packages/orchestrator/src/paras.ts index 5f56dd676..836dc0107 100644 --- a/javascript/packages/orchestrator/src/paras.ts +++ b/javascript/packages/orchestrator/src/paras.ts @@ -12,7 +12,8 @@ import { import { decorate } from "./paras-decorators"; import { Providers } from "./providers"; import { getClient } from "./providers/client"; -import { Node, Parachain, ZombieRole, fileMap } from "./types"; +import { fileMap } from "./types"; +import { Node, ZombieRole, Parachain } from "./sharedTypes"; const debug = require("debug")("zombie::paras"); diff --git a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts index ea73002cc..d8e5b64f1 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/dynResourceDefinition.ts @@ -2,7 +2,7 @@ import { getRandomPort, getSha256 } from "@zombienet/utils"; import { getUniqueName } from "../../configGenerator"; import { TMP_DONE, WAIT_UNTIL_SCRIPT_SUFIX } from "../../constants"; import { Network } from "../../network"; -import { Node, ZombieRole } from "../../types"; +import { Node, ZombieRole } from "../../sharedTypes"; import { BootNodeResource, NodeResource, ServiceResource } from "./resources"; import { PodSpec, ServiceSpec } from "./resources/types"; diff --git a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts index babbabd9a..d6a7bd1ae 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/kubeClient.ts @@ -18,7 +18,8 @@ import { TRANSFER_CONTAINER_NAME, TRANSFER_CONTAINER_WAIT_LOG, } from "../../constants"; -import { fileMap, ZombieRole } from "../../types"; +import { fileMap } from "../../types"; +import { ZombieRole } from "../../sharedTypes"; import { Client, RunCommandOptions, diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts index 6b0bb9287..2d8f20780 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/bootNodeResource.ts @@ -1,4 +1,4 @@ -import { Node, ZombieRole } from "../../../types"; +import { Node, ZombieRole } from "../../../sharedTypes"; import { NodeResource } from "./nodeResource"; import { Container, PodSpec, Volume } from "./types"; diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts index c86eaf05d..2d5fcd4f9 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/nodeResource.ts @@ -8,7 +8,7 @@ import { TRANSFER_CONTAINER_NAME, TRANSFER_CONTAINER_WAIT_LOG, } from "../../../constants"; -import { Node, ZombieRole, ZombieRoleLabel } from "../../../types"; +import { Node, ZombieRole, ZombieRoleLabel } from "../../../sharedTypes"; import { Container, ContainerPort, diff --git a/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts b/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts index e76c0b429..b92d0fade 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/resources/types.ts @@ -1,4 +1,4 @@ -import { envVars, Resources, ZombieRoleLabel } from "../../../types"; +import { envVars, Resources, ZombieRoleLabel } from "../../../sharedTypes"; type ContainerResource = Resources["resources"]; diff --git a/javascript/packages/orchestrator/src/providers/k8s/substrateCliArgsHelper.ts b/javascript/packages/orchestrator/src/providers/k8s/substrateCliArgsHelper.ts index 7e02d9994..3f9ee3a63 100644 --- a/javascript/packages/orchestrator/src/providers/k8s/substrateCliArgsHelper.ts +++ b/javascript/packages/orchestrator/src/providers/k8s/substrateCliArgsHelper.ts @@ -1,4 +1,4 @@ -import { SubstrateCliArgsVersion } from "../../types"; +import { SubstrateCliArgsVersion } from "../../sharedTypes"; import { getClient } from "../client"; import { createTempNodeDef, genNodeDef } from "./dynResourceDefinition"; import { KubeClient } from "./kubeClient"; diff --git a/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts index 149218e94..f19596bc8 100644 --- a/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/native/dynResourceDefinition.ts @@ -1,7 +1,7 @@ import { getRandomPort } from "@zombienet/utils"; import { getUniqueName } from "../../configGenerator"; import { Network } from "../../network"; -import { Node, ZombieRole } from "../../types"; +import { Node, ZombieRole } from "../../sharedTypes"; import { getClient } from "../client"; import { BootNodeResource, NodeResource } from "./resources"; diff --git a/javascript/packages/orchestrator/src/providers/native/nativeClient.ts b/javascript/packages/orchestrator/src/providers/native/nativeClient.ts index 0ec18213a..c2ab6eb6d 100644 --- a/javascript/packages/orchestrator/src/providers/native/nativeClient.ts +++ b/javascript/packages/orchestrator/src/providers/native/nativeClient.ts @@ -17,7 +17,8 @@ import { LOCALHOST, P2P_PORT, } from "../../constants"; -import { ZombieRole, fileMap } from "../../types"; +import { fileMap } from "../../types"; +import { ZombieRole } from "../../sharedTypes"; import { Client, RunCommandOptions, diff --git a/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts index 970fcc65c..d76d5f8a1 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/bootnodeResource.ts @@ -1,6 +1,6 @@ import { makeDir } from "@zombienet/utils"; import { genCmd } from "../../../cmdGenerator"; -import { ZombieRole, ZombieRoleLabel } from "../../../types"; +import { ZombieRole, ZombieRoleLabel } from "../../../sharedTypes"; import { NodeResource } from "./nodeResource"; import { NodeSpec, Port, ProcessEnvironment } from "./types"; diff --git a/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts index 446d6e809..935452dcf 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/nodeResource.ts @@ -6,7 +6,12 @@ import { RPC_HTTP_PORT, RPC_WS_PORT, } from "../../../constants"; -import { Node, ZombieRole, ZombieRoleLabel, envVars } from "../../../types"; +import { + Node, + ZombieRole, + ZombieRoleLabel, + envVars, +} from "../../../sharedTypes"; import { Client } from "../../client"; import { NodeSpec, Port, PortProperty, ProcessEnvironment } from "./types"; diff --git a/javascript/packages/orchestrator/src/providers/native/resources/types.ts b/javascript/packages/orchestrator/src/providers/native/resources/types.ts index ce3049fa0..9a91a7acb 100644 --- a/javascript/packages/orchestrator/src/providers/native/resources/types.ts +++ b/javascript/packages/orchestrator/src/providers/native/resources/types.ts @@ -1,4 +1,4 @@ -import { Node, ZombieRoleLabel } from "../../../types"; +import { Node, ZombieRoleLabel } from "../../../sharedTypes"; export interface ProcessEnvironment { [key: string]: string; diff --git a/javascript/packages/orchestrator/src/providers/native/substrateCliArgsHelper.ts b/javascript/packages/orchestrator/src/providers/native/substrateCliArgsHelper.ts index c8ce96bc8..d70c456cb 100644 --- a/javascript/packages/orchestrator/src/providers/native/substrateCliArgsHelper.ts +++ b/javascript/packages/orchestrator/src/providers/native/substrateCliArgsHelper.ts @@ -1,4 +1,4 @@ -import { SubstrateCliArgsVersion } from "../../types"; +import { SubstrateCliArgsVersion } from "../../sharedTypes"; import { getClient } from "../client"; export const getCliArgsVersion = async ( diff --git a/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts b/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts index 16520410f..c2719e2a8 100644 --- a/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts +++ b/javascript/packages/orchestrator/src/providers/podman/dynResourceDefinition.ts @@ -1,7 +1,7 @@ import { getRandomPort } from "@zombienet/utils"; import { getUniqueName } from "../../configGenerator"; import { Network } from "../../network"; -import { Node, ZombieRole } from "../../types"; +import { Node, ZombieRole } from "../../sharedTypes"; import { getClient } from "../client"; import { BootNodeResource, diff --git a/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts b/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts index 8630b69fd..868f75044 100644 --- a/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/podman/resources/bootnodeResource.ts @@ -1,4 +1,4 @@ -import { Node, ZombieRole } from "../../../types"; +import { Node, ZombieRole } from "../../../sharedTypes"; import { Client } from "../../client"; import { NodeResource } from "./nodeResource"; import { Container, PodSpec, Volume } from "./types"; diff --git a/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts b/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts index e79e9f6e3..c61713d78 100644 --- a/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts +++ b/javascript/packages/orchestrator/src/providers/podman/resources/nodeResource.ts @@ -6,7 +6,7 @@ import { RPC_HTTP_PORT, RPC_WS_PORT, } from "../../../constants"; -import { Node, ZombieRole } from "../../../types"; +import { Node, ZombieRole } from "../../../sharedTypes"; import { Client } from "../../client"; import { Container, diff --git a/javascript/packages/orchestrator/src/providers/podman/resources/types.ts b/javascript/packages/orchestrator/src/providers/podman/resources/types.ts index 75797f9fd..112d8c0c1 100644 --- a/javascript/packages/orchestrator/src/providers/podman/resources/types.ts +++ b/javascript/packages/orchestrator/src/providers/podman/resources/types.ts @@ -1,4 +1,4 @@ -import { envVars } from "../../../types"; +import { envVars } from "../../../sharedTypes"; export interface VolumeMount { name: string; diff --git a/javascript/packages/orchestrator/src/providers/podman/substrateCliArgsHelper.ts b/javascript/packages/orchestrator/src/providers/podman/substrateCliArgsHelper.ts index b44b7fb03..cedc50cdb 100644 --- a/javascript/packages/orchestrator/src/providers/podman/substrateCliArgsHelper.ts +++ b/javascript/packages/orchestrator/src/providers/podman/substrateCliArgsHelper.ts @@ -1,4 +1,4 @@ -import { SubstrateCliArgsVersion } from "../../types"; +import { SubstrateCliArgsVersion } from "../../sharedTypes"; import { getClient } from "../client"; import { createTempNodeDef, genNodeDef } from "./dynResourceDefinition"; diff --git a/javascript/packages/orchestrator/src/sharedTypes.ts b/javascript/packages/orchestrator/src/sharedTypes.ts new file mode 100644 index 000000000..73a16fd71 --- /dev/null +++ b/javascript/packages/orchestrator/src/sharedTypes.ts @@ -0,0 +1,143 @@ +import { PARA } from "./paras-decorators"; + +export enum SubstrateCliArgsVersion { + V0 = 0, + V1 = 1, +} + +// enums +export enum ZombieRole { + Temp = "temp", + Node = "node", + BootNode = "bootnode", + Collator = "collator", + CumulusCollator = "cumulus-collator", +} + +export interface HrmpChannelsConfig { + sender: number; + recipient: number; + max_capacity: number; + max_message_size: number; +} + +export type ZombieRoleLabel = ZombieRole | "authority" | "full-node"; + +export interface Override { + local_path: string; + remote_name: string; +} + +export interface ObjectJSON { + [key: string]: ObjectJSON | number | string; +} + +export interface Parachain extends CommonParachainConfig { + name: string; + para: PARA; + addToGenesis: boolean; + registerPara: boolean; + onboardAsParachain: boolean; + cumulusBased: boolean; + genesisWasmPath?: string; + genesisWasmGenerator?: string; + genesisStatePath?: string; + genesisStateGenerator?: string; + chainSpecPath?: string; + specPath?: string; + wasmPath?: string; + statePath?: string; + collators: Node[]; +} + +export interface Node extends NodeCommonTypes, Ports { + image: string; + key?: string; + accounts?: any; + balance?: bigint; + command?: string; + commandWithArgs?: string; + fullCommand?: string; + chain: string; + chainSpec?: string; + validator: boolean; + invulnerable: boolean; + args: string[]; + env: envVars[]; + bootnodes: string[]; + zombieRole: ZombieRole; + group?: string; + telemetry?: boolean; + telemetryUrl: string; + prometheus?: boolean; + prometheusPrefix?: string; + overrides: Override[]; + addToBootnodes?: boolean; + resources?: Resources; + parachainId?: number; + jaegerUrl?: string; + p2pCertHash?: string; + imagePullPolicy?: "IfNotPresent" | "Never" | "Always"; + dbSnapshot?: string; + externalPorts?: Ports; + substrateCliArgsVersion?: SubstrateCliArgsVersion; +} + +export interface Ports { + wsPort: number; + rpcPort: number; + prometheusPort: number; + p2pPort: number; +} + +export interface NodeConfig extends NodeCommonTypes { + name: string; + image?: string; + command_with_args?: string; + validator: boolean; + invulnerable: boolean; + balance: number; + bootnodes?: string[]; + add_to_bootnodes?: boolean; + ws_port?: number; + rpc_port?: number; + p2p_port?: number; + prometheus_port?: number; + p2p_cert_hash?: string; // libp2p certhash to use with webrtc transport. +} + +export interface NodeCommonTypes { + name: string; + command?: string; + args?: string[]; + env?: envVars[]; + overrides?: Override[]; + prometheus_prefix?: string; + db_snapshot?: string; + substrate_cli_args_version?: SubstrateCliArgsVersion; + resources?: Resources; +} + +export interface envVars { + name: string; + value: string; +} +export interface Resources { + resources: { + requests?: { + memory?: string; + cpu?: string; + }; + limits?: { + memory?: string; + cpu?: string; + }; + }; +} + +export interface CommonParachainConfig { + id: number; + chain?: string; + genesis?: JSON | ObjectJSON; + balance?: number; +} diff --git a/javascript/packages/orchestrator/src/spawner.ts b/javascript/packages/orchestrator/src/spawner.ts index f3a868e5a..d604edf22 100644 --- a/javascript/packages/orchestrator/src/spawner.ts +++ b/javascript/packages/orchestrator/src/spawner.ts @@ -19,13 +19,8 @@ import { Network, Scope } from "./network"; import { NetworkNode } from "./networkNode"; import { getProvider } from "./providers"; import { Client } from "./providers/client"; -import { - Node, - NodeMultiAddress, - Parachain, - ZombieRole, - fileMap, -} from "./types"; +import { NodeMultiAddress, fileMap } from "./types"; +import { Node, ZombieRole, Parachain } from "./sharedTypes"; const debug = require("debug")("zombie::spawner"); export const spawnNode = async ( diff --git a/javascript/packages/orchestrator/src/substrateCliArgsHelper.ts b/javascript/packages/orchestrator/src/substrateCliArgsHelper.ts index 6e153f8bd..e452d07da 100644 --- a/javascript/packages/orchestrator/src/substrateCliArgsHelper.ts +++ b/javascript/packages/orchestrator/src/substrateCliArgsHelper.ts @@ -1,7 +1,7 @@ import { series } from "@zombienet/utils"; import { getProvider } from "./providers"; import { Client } from "./providers/client"; -import { ComputedNetwork } from "./types"; +import { ComputedNetwork } from "./configTypes"; export const setSubstrateCliArgsVersion = async ( network: ComputedNetwork, diff --git a/javascript/packages/orchestrator/src/test-runner/index.ts b/javascript/packages/orchestrator/src/test-runner/index.ts index 2f92647a3..44956ec03 100644 --- a/javascript/packages/orchestrator/src/test-runner/index.ts +++ b/javascript/packages/orchestrator/src/test-runner/index.ts @@ -11,9 +11,10 @@ import path from "path"; import { Network, rebuildNetwork } from "../network"; import { start } from "../orchestrator"; import { Providers } from "../providers"; -import { LaunchConfig, TestDefinition } from "../types"; +import { TestDefinition } from "../types"; import assertions from "./assertions"; import commands from "./commands"; +import { LaunchConfig } from "../configTypes"; const DEFAULT_GLOBAL_TIMEOUT = 1200; // 20 mins diff --git a/javascript/packages/orchestrator/src/types.ts b/javascript/packages/orchestrator/src/types.ts index e48230a1e..cfcf3a084 100644 --- a/javascript/packages/orchestrator/src/types.ts +++ b/javascript/packages/orchestrator/src/types.ts @@ -1,205 +1,15 @@ // Launch Config, there are used user-input // mapped from the json/toml to compute the -import { PARA } from "./paras-decorators"; +import { NodeCommonTypes, envVars } from "./sharedTypes"; -// network config to spawn. -export interface LaunchConfig extends PolkadotLaunchConfig { - config: { provider: string }; - settings: Settings; - configBasePath: string; -} - -export interface PolkadotLaunchConfig { - relaychain: RelayChainConfig; - parachains: ParachainConfig[]; - types: any; - hrmp_channels?: HrmpChannelsConfig[]; -} - -export interface Settings { - global_volumes?: GlobalVolume[]; - bootnode?: boolean; - bootnode_domain?: string; - timeout: number; - node_spawn_timeout?: number; - grafana?: boolean; - telemetry?: boolean; - prometheus?: boolean; - jaeger_agent?: string; // agent or collator - tracing_collator_url?: string; // collator query url - tracing_collator_service_name?: string; // only used by k8s provider and if not set the `url` - tracing_collator_service_namespace?: string; // only used by k8s provider and if not set the `url` - tracing_collator_service_port?: number; // only used by k8s provider and if not set the `url` - enable_tracing?: boolean; - provider: string; - polkadot_introspector?: boolean; - backchannel?: boolean; // only used in k8s at the moment, spawn a backchannel instance - image_pull_policy?: "IfNotPresent" | "Never" | "Always"; - local_ip?: string; // ip used for expose local services (rpc/metrics/monitors) -} - -export interface RelayChainConfig { - default_command?: string; - default_image?: string; - default_resources?: Resources; - default_db_snapshot?: string; - default_prometheus_prefix?: string; - default_substrate_cli_args_version?: SubstrateCliArgsVersion; - chain: string; - chain_spec_path?: string; - chain_spec_command?: string; - default_args?: string[]; - default_overrides?: Override[]; - random_nominators_count?: number; - max_nominations?: number; - nodes?: NodeConfig[]; - node_groups?: NodeGroupConfig[]; - total_node_in_groups?: number; - genesis?: JSON | ObjectJSON; -} - -export interface NodeConfig { - name: string; - image?: string; - command?: string; - command_with_args?: string; - args?: string[]; - validator: boolean; - invulnerable: boolean; - balance: number; - env?: envVars[]; - bootnodes?: string[]; - overrides?: Override[]; - add_to_bootnodes?: boolean; - resources?: Resources; - ws_port?: number; - rpc_port?: number; - prometheus_port?: number; - prometheus_prefix?: string; - p2p_port?: number; - db_snapshot?: string; - p2p_cert_hash?: string; // libp2p certhash to use with webrtc transport. - substrate_cli_args_version?: SubstrateCliArgsVersion; -} - -export interface NodeGroupConfig { - name: string; - image?: string; - command?: string; - args?: string[]; - env?: envVars[]; - overrides?: Override[]; - count: string | number; - resources?: Resources; - db_snapshot?: string; - prometheus_prefix?: string; - substrate_cli_args_version?: SubstrateCliArgsVersion; -} - -export interface ParachainConfig { - id: number; - chain?: string; - add_to_genesis?: boolean; - register_para?: boolean; - onboard_as_parachain?: boolean; - balance?: number; - genesis_wasm_path?: string; - genesis_wasm_generator?: string; - genesis_state_path?: string; - genesis_state_generator?: string; - chain_spec_path?: string; - cumulus_based?: boolean; - bootnodes?: string[]; - prometheus_prefix?: string; - // backward compatibility - collator?: NodeConfig; - collators?: NodeConfig[]; - collator_groups?: NodeGroupConfig[]; - genesis?: JSON | ObjectJSON; -} - -export interface HrmpChannelsConfig { - sender: number; - recipient: number; - max_capacity: number; - max_message_size: number; -} - -// Computed Network -export interface ComputedNetwork { - settings: Settings; - relaychain: { - defaultImage: string; - defaultCommand: string; - defaultArgs: string[]; - defaultDbSnapshot?: string; - defaultPrometheusPrefix: string; - chain: string; - chainSpecPath?: string; - chainSpecCommand?: string; - randomNominatorsCount: number; - maxNominations: number; - nodes: Node[]; - overrides: Override[]; - genesis?: JSON | ObjectJSON; - defaultResources?: Resources; - }; - parachains: Parachain[]; - types: any; - hrmp_channels?: HrmpChannelsConfig[]; - configBasePath: string; - seed: string; -} +// Types +export type NodeMultiAddress = string; -export interface Node { - name: string; - key?: string; - accounts?: any; - balance?: bigint; - command?: string; - commandWithArgs?: string; - fullCommand?: string; +export interface Collator extends NodeCommonTypes { image: string; - chain: string; - chainSpec?: string; - validator: boolean; - invulnerable: boolean; - args: string[]; - env: envVars[]; - bootnodes: string[]; - zombieRole: ZombieRole; - group?: string; - telemetry?: boolean; - telemetryUrl: string; - prometheus?: boolean; - prometheusPrefix?: string; - overrides: Override[]; - addToBootnodes?: boolean; - resources?: Resources; - parachainId?: number; - jaegerUrl?: string; - wsPort: number; - rpcPort: number; - prometheusPort: number; - p2pPort: number; - p2pCertHash?: string; - imagePullPolicy?: "IfNotPresent" | "Never" | "Always"; - dbSnapshot?: string; - externalPorts?: { - wsPort: number; - rpcPort: number; - prometheusPort: number; - p2pPort: number; - }; - substrateCliArgsVersion?: SubstrateCliArgsVersion; -} - -export interface Collator { - name: string; command: string; commandWithArgs?: string; - image: string; chain?: string; args: string[]; env: envVars[]; @@ -207,33 +17,6 @@ export interface Collator { count?: number; } -export interface Parachain { - id: number; - name: string; - chain?: string; - para: PARA; - addToGenesis: boolean; - registerPara: boolean; - onboardAsParachain: boolean; - cumulusBased: boolean; - genesisWasmPath?: string; - genesisWasmGenerator?: string; - genesisStatePath?: string; - genesisStateGenerator?: string; - chainSpecPath?: string; - specPath?: string; - wasmPath?: string; - statePath?: string; - balance?: number; - collators: Node[]; - genesis?: JSON | ObjectJSON; -} - -export interface envVars { - name: string; - value: string; -} - export interface ChainSpec { name: string; id: string; @@ -256,14 +39,7 @@ export interface ChainSpec { }; } -export type NodeMultiAddress = string; - // Utils -export interface GlobalVolume { - name: string; - fs_type: string; - mount_path: string; -} export interface fileMap { localFilePath: string; @@ -271,32 +47,6 @@ export interface fileMap { unique?: boolean; } -export interface Override { - local_path: string; - remote_name: string; -} - -export interface ObjectJSON { - [key: string]: ObjectJSON | number | string; -} - -export interface Resources { - resources: { - requests?: { - memory?: string; - cpu?: string; - }; - limits?: { - memory?: string; - cpu?: string; - }; - }; -} - -export interface MultiAddressByNode { - [key: string]: string; -} - export interface TestDefinition { network: string; creds: string; @@ -343,18 +93,3 @@ export interface RegisterParachainOptions { seed?: string; finalization?: boolean; } - -export enum ZombieRole { - Temp = "temp", - Node = "node", - BootNode = "bootnode", - Collator = "collator", - CumulusCollator = "cumulus-collator", -} - -export type ZombieRoleLabel = ZombieRole | "authority" | "full-node"; - -export enum SubstrateCliArgsVersion { - V0 = 0, - V1 = 1, -}