Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Create remote config #862

Merged
merged 153 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from 143 commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
fdc8678
feat: add LocalCOnfiguration class
Ivo-Yankov Oct 30, 2024
0eda60f
feat: finalize LocalConfig class and tests
Ivo-Yankov Nov 1, 2024
a5e0812
chore: code cleanup
Ivo-Yankov Nov 1, 2024
dac5104
chore: rename class
Ivo-Yankov Nov 1, 2024
dd07de0
wip: LocalConfig prompting
Ivo-Yankov Nov 4, 2024
cf9bada
Merge branch 'main' into 00590-create-a-local-config-for-storing-conf…
Ivo-Yankov Nov 4, 2024
7116e6e
feat: LocalConfig prompts
Ivo-Yankov Nov 5, 2024
baa94b3
test: add yaml file for e2e tests
Ivo-Yankov Nov 6, 2024
584032b
Merge branch 'main' into 00590-create-a-local-config-for-storing-conf…
Ivo-Yankov Nov 6, 2024
3905f5d
debug: e2e tests
Ivo-Yankov Nov 6, 2024
2601d5a
debug: e2e tests
Ivo-Yankov Nov 6, 2024
84b9666
checkpoint
instamenta Nov 6, 2024
1795d18
cleanup
instamenta Nov 7, 2024
36c8ccd
merge with main
instamenta Nov 7, 2024
f769c91
Merge remote-tracking branch 'origin/00590-create-a-local-config-for-…
instamenta Nov 7, 2024
efd21e9
cleanup, further implementing the remote config, and testing ahead
instamenta Nov 7, 2024
6b832ce
fix eslint errors
instamenta Nov 7, 2024
83cd71e
fix readme template
instamenta Nov 7, 2024
658775a
feat: inject config into BaseCommand
Ivo-Yankov Nov 7, 2024
4ba7b58
chore: rename types
Ivo-Yankov Nov 7, 2024
3620598
class improvements and functionality testing setp
instamenta Nov 7, 2024
3d34877
a lot of work done on the metadata.components
instamenta Nov 8, 2024
204a3a1
finished up components data wrapper class
instamenta Nov 8, 2024
8396f54
merge with main
instamenta Nov 8, 2024
ee7d2b2
Merge remote-tracking branch 'origin/main' into 00771-read-a-remoteco…
instamenta Nov 8, 2024
09fd944
cleanup after merges
instamenta Nov 8, 2024
55a1202
chore: refactor LocalConfig class
Ivo-Yankov Nov 8, 2024
f50cfb7
chore: eslint
Ivo-Yankov Nov 8, 2024
03d7c06
Merge branch 'main' into 00590-create-a-local-config-for-storing-conf…
Ivo-Yankov Nov 8, 2024
00afa98
further improvements of data wrappers and remote config data manager
instamenta Nov 8, 2024
4b6cad1
fix: circular dependency
Ivo-Yankov Nov 8, 2024
6838f6d
chore: eslint
Ivo-Yankov Nov 8, 2024
18255cc
nit: cleanup
Ivo-Yankov Nov 8, 2024
ba50a7b
Merge branch 'main' into 00590-create-a-local-config-for-storing-conf…
Ivo-Yankov Nov 8, 2024
c74f2e7
nit: cleanup
Ivo-Yankov Nov 8, 2024
e049a36
fix: comment out injectable code in BaseCommand
Ivo-Yankov Nov 8, 2024
2145210
merge with main
instamenta Nov 11, 2024
f429d53
further improvement of oop for the remote config feature, class utili…
instamenta Nov 11, 2024
cddf073
removed inversifyjs
Ivo-Yankov Nov 11, 2024
a239db4
cleanup and type improvements
instamenta Nov 12, 2024
40e7e13
merge with local config branch
instamenta Nov 12, 2024
e9f4c6b
Merge branch 'main' into 00590-create-a-local-config-for-storing-conf…
Ivo-Yankov Nov 12, 2024
428e81d
chore: fix formatting
Ivo-Yankov Nov 12, 2024
a3fb43b
fix: integration test
Ivo-Yankov Nov 12, 2024
a70cc2c
cleanup, adding the remote functionality to commands, and writing tes…
instamenta Nov 12, 2024
fd6c312
fix: test-e2e-integration script
Ivo-Yankov Nov 12, 2024
994d37b
fix tests
instamenta Nov 13, 2024
7fc2900
adding tests, fixing issues and minor refactors
instamenta Nov 13, 2024
d772577
tests, improvements and fixes
instamenta Nov 13, 2024
0475d73
adding and improving tests
instamenta Nov 13, 2024
3b5e998
adding tests and improving
instamenta Nov 13, 2024
5c81460
fixing tests
instamenta Nov 13, 2024
6594244
added tests for metadata
instamenta Nov 13, 2024
a02743b
adding final tests
instamenta Nov 13, 2024
347b1a7
fixed issue with turning the remote config data wrapper to object pre…
instamenta Nov 13, 2024
5f18cb5
merge with main
instamenta Nov 14, 2024
5ee74d0
Merge remote-tracking branch 'origin/00590-create-a-local-config-for-…
instamenta Nov 14, 2024
fd492c2
fixing tests, and creating the 'deployment create' command
instamenta Nov 14, 2024
5ff4117
comments, quality and logical improvements
instamenta Nov 15, 2024
02a0d8b
code quality and changes related to code standards discussed to start…
instamenta Nov 15, 2024
2351aa8
cleanup and removeal of obsolete logic
instamenta Nov 15, 2024
0af83b8
code quality and improvements
instamenta Nov 18, 2024
002f005
added access modifiers where missed and interfaces to implement for t…
instamenta Nov 18, 2024
ffaebb3
remove obsolete comments
instamenta Nov 18, 2024
d5d4040
working on 'deployment create' command
instamenta Nov 18, 2024
9d309c7
type improvements
instamenta Nov 19, 2024
36dca6c
add utility method's to components, and add new eslint rules
instamenta Nov 19, 2024
adadd7f
fixing eslint rules
instamenta Nov 19, 2024
e3d48f3
Merge remote-tracking branch 'origin/main' into 00771-read-a-remoteco…
instamenta Nov 19, 2024
bec7204
quick fix for cases when namespace is not passed to command and addit…
instamenta Nov 19, 2024
497b9fe
adding logic for handling components to remote config in each command
instamenta Nov 19, 2024
cd0c75d
Merge remote-tracking branch 'origin/main' into 00771-read-a-remoteco…
instamenta Nov 19, 2024
6d292a3
added logic for remote config components in relay command
instamenta Nov 19, 2024
3665004
remove access modifier for now
instamenta Nov 19, 2024
4a1dc81
feat: add LocalCOnfiguration class
Ivo-Yankov Oct 30, 2024
4e247ee
feat: finalize LocalConfig class and tests
Ivo-Yankov Nov 1, 2024
d5f08b2
chore: code cleanup
Ivo-Yankov Nov 1, 2024
76bee22
chore: rename class
Ivo-Yankov Nov 1, 2024
b6f3395
wip: LocalConfig prompting
Ivo-Yankov Nov 4, 2024
1a9face
feat: LocalConfig prompts
Ivo-Yankov Nov 5, 2024
b77c55e
test: add yaml file for e2e tests
Ivo-Yankov Nov 6, 2024
ad3195f
debug: e2e tests
Ivo-Yankov Nov 6, 2024
ef45975
debug: e2e tests
Ivo-Yankov Nov 6, 2024
329b6a6
feat: inject config into BaseCommand
Ivo-Yankov Nov 7, 2024
a6381df
chore: rename types
Ivo-Yankov Nov 7, 2024
ac314f0
chore: refactor LocalConfig class
Ivo-Yankov Nov 8, 2024
b0d1d5d
chore: eslint
Ivo-Yankov Nov 8, 2024
de4be41
fix: circular dependency
Ivo-Yankov Nov 8, 2024
e8a37dd
chore: eslint
Ivo-Yankov Nov 8, 2024
fb3a294
nit: cleanup
Ivo-Yankov Nov 8, 2024
767984c
nit: cleanup
Ivo-Yankov Nov 8, 2024
ec3d535
fix: comment out injectable code in BaseCommand
Ivo-Yankov Nov 8, 2024
a00e908
removed inversifyjs
Ivo-Yankov Nov 11, 2024
3845d15
chore: fix formatting
Ivo-Yankov Nov 12, 2024
d7db2cb
fix: integration test
Ivo-Yankov Nov 12, 2024
b227e2f
update package.json
jeromy-cannon Nov 19, 2024
442bf43
moved remote config component related tasks to its own static class
instamenta Nov 20, 2024
154efb7
move create and load remote config task builders to remote config tas…
instamenta Nov 20, 2024
356e32b
fix tests
instamenta Nov 20, 2024
608bb8c
formatting
instamenta Nov 20, 2024
886a5fa
merge with mian
instamenta Nov 20, 2024
76b3486
utilities for remote config
instamenta Nov 20, 2024
72c574e
merge with local config dev branch
instamenta Nov 20, 2024
325ad06
Merge remote-tracking branch 'origin/00590-create-a-local-config-for-…
Ivo-Yankov Nov 21, 2024
2307c38
chore: renamed files
Ivo-Yankov Nov 21, 2024
b143ba4
add 'as const' to flags since they are immutable objects and new flags
instamenta Nov 21, 2024
18a1a03
Merge branch 'main' into 00590-create-a-local-config-for-storing-conf…
Ivo-Yankov Nov 21, 2024
2068797
chore: import js files
Ivo-Yankov Nov 21, 2024
4acdece
chore: regenerate package-lock.json
Ivo-Yankov Nov 21, 2024
18b16b8
merge with main
instamenta Nov 21, 2024
0dd2019
since I saw there was effort to rename from 'ts' --> 'js' the file ex…
instamenta Nov 21, 2024
b83e688
rest of import statemnts file extensions renamed 'ts' --> 'js'
instamenta Nov 21, 2024
1cdc599
fixing issues after merge with mian
instamenta Nov 21, 2024
8a89857
minor tidy on lease manager
instamenta Nov 21, 2024
9e3c9c9
adding as const to objects and arrays to actually enforce their prope…
instamenta Nov 21, 2024
a7a6ed2
adding as const
instamenta Nov 21, 2024
e1aef98
merge with local config dev branch
instamenta Nov 21, 2024
a36a41f
fixes after merge with local config dev branch
instamenta Nov 21, 2024
a5a49f5
rename ComponentTypeEnum --> ComponentType
instamenta Nov 21, 2024
c807a56
formating and fix of failing test
instamenta Nov 21, 2024
3bcbf92
merge with main
instamenta Nov 22, 2024
faf962e
formatting
instamenta Nov 22, 2024
71ce585
remove noicy changes
instamenta Nov 22, 2024
6a82084
remove noisy obosolete changes
instamenta Nov 22, 2024
ea292ba
minor changes to localconfig
instamenta Nov 22, 2024
4405a14
fixing issues with prompting
instamenta Nov 22, 2024
6c61934
attempting to run all tests in pull request by making the remote conf…
instamenta Nov 22, 2024
facbd27
merge with main
instamenta Nov 22, 2024
c7b4619
fixig issues related to merge with main
instamenta Nov 22, 2024
ca709a4
fix package-lock
instamenta Nov 22, 2024
479b4df
Merge remote-tracking branch 'origin/main' into 00771-read-a-remoteco…
instamenta Nov 22, 2024
ec7b63a
quickfix
instamenta Nov 22, 2024
440fa25
fix localconfig formatting and validation
instamenta Nov 22, 2024
896a141
making feature optional for once
instamenta Nov 22, 2024
fd74043
fix tests
instamenta Nov 22, 2024
c4d97b0
additional tests and fixes
instamenta Nov 25, 2024
f4ce916
Merge remote-tracking branch 'origin/main' into 00771-read-a-remoteco…
instamenta Nov 25, 2024
ad3b802
remove obsolete changes to remove noice
instamenta Nov 25, 2024
63a92fb
remove js-yaml usage from new feature
instamenta Nov 25, 2024
ab94944
merge with main
instamenta Nov 25, 2024
36d483d
merge with main
instamenta Nov 27, 2024
ec456d1
progress done on node commands keeping accurate state inside the remo…
instamenta Nov 27, 2024
850d32c
add more data in error message as requested
instamenta Nov 27, 2024
50e31d0
merge with main
instamenta Dec 2, 2024
af0ab02
fixes
instamenta Dec 2, 2024
56158ed
added logic to keep the use of the remote config feature optional for…
instamenta Dec 2, 2024
7397570
fix failing unit test
instamenta Dec 2, 2024
abb7768
fix logic for skipping when remote config is not loaded
instamenta Dec 2, 2024
b9ed15f
additional tests for remote config
instamenta Dec 2, 2024
245fe26
added new task about commands that work with a single nodeAlias
instamenta Dec 3, 2024
99cfdb6
remove obsolete coment
instamenta Dec 3, 2024
2b93260
merge with main
instamenta Dec 3, 2024
63e31b2
formatting and fixing merge issues
instamenta Dec 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,17 @@ export default [
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/class-literal-property-style': 'off',
'no-invalid-this': [ 'error', { capIsConstructor : false } ],
'no-prototype-builtins': 'off',
'@typescript-eslint/no-dynamic-delete': 'off',

// Ensure all class members have explicit access modifiers
"@typescript-eslint/explicit-member-accessibility": ["warn", { "accessibility": "explicit" }],

// Require return types on all functions and methods
"@typescript-eslint/explicit-function-return-type": "warn",

// Require return types on exported functions or methods
"@typescript-eslint/explicit-module-boundary-types": "warn"
}
},
{ // test ts files
Expand Down
12 changes: 11 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
"inquirer": "^12.1.0",
"ip": "^2.0.1",
"js-base64": "^3.7.7",
"js-yaml": "^4.1.0",
"jsdoc": "^4.0.4",
"listr2": "^8.2.5",
"semver": "^7.6.3",
Expand Down Expand Up @@ -96,6 +95,7 @@
"@types/stream-buffers": "^3.0.7",
"@types/tar": "^6.1.13",
"@types/uuid": "^10.0.0",
"@types/ws": "^8.5.13",
"@types/yargs": "^17.0.33",
"@typescript-eslint/utils": "^8.15.0",
"c8": "^10.1.2",
Expand Down
10 changes: 7 additions & 3 deletions src/commands/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
import paths from 'path'
import { MissingArgumentError } from '../core/errors.js'
import { ShellRunner } from '../core/shell_runner.js'
import type { ChartManager, ConfigManager, Helm, K8, DependencyManager, LeaseManager } from '../core/index.js'
import type { CommandFlag, Opts } from '../types/index.js'
import { type LocalConfig } from '../core/config/local_config.js'
import type {
ChartManager, ConfigManager, Helm, K8, DependencyManager, LeaseManager, RemoteConfigManager, LocalConfig
} from '../core/index.js'
import type { CommandFlag, Opts } from '../types/index.js'

export class BaseCommand extends ShellRunner {
protected readonly helm: Helm
Expand All @@ -31,6 +32,7 @@ export class BaseCommand extends ShellRunner {
protected readonly leaseManager: LeaseManager
protected readonly _configMaps = new Map<string, any>()
protected readonly localConfig: LocalConfig
protected readonly remoteConfigManager: RemoteConfigManager

constructor (opts: Opts) {
if (!opts || !opts.logger) throw new Error('An instance of core/SoloLogger is required')
Expand All @@ -40,6 +42,7 @@ export class BaseCommand extends ShellRunner {
if (!opts || !opts.configManager) throw new Error('An instance of core/ConfigManager is required')
if (!opts || !opts.depManager) throw new Error('An instance of core/DependencyManager is required')
if (!opts || !opts.localConfig) throw new Error('An instance of core/LocalConfig is required')
if (!opts || !opts.remoteConfigManager) throw new Error('An instance of core/config/RemoteConfigManager is required')

super(opts.logger)

Expand All @@ -50,6 +53,7 @@ export class BaseCommand extends ShellRunner {
this.depManager = opts.depManager
this.leaseManager = opts.leaseManager
this.localConfig = opts.localConfig
this.remoteConfigManager = opts.remoteConfigManager
}

async prepareChartPath (chartDir: string, chartRepo: string, chartReleaseName: string) {
Expand Down
148 changes: 148 additions & 0 deletions src/commands/deployment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/**
* Copyright (C) 2024 Hedera Hashgraph, LLC
*
* Licensed under the Apache License, Version 2.0 (the ""License"");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an ""AS IS"" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import { Listr, type ListrTaskWrapper } from 'listr2'
import { SoloError } from '../core/errors.js'
import { BaseCommand } from './base.js'
import * as flags from './flags.js'
import { constants, Templates } from '../core/index.js'
import * as prompts from './prompts.js'
import chalk from 'chalk'
import { RemoteConfigTasks } from '../core/config/remote/remote_config_tasks.js'
import { ListrLease } from '../core/lease/listr_lease.js'
import type { Namespace } from '../core/config/remote/types.js'
import type { CommandFlag, ContextClusterStructure } from '../types/index.js'

export class DeploymentCommand extends BaseCommand {
private static get DEPLOY_FLAGS_LIST (): CommandFlag[] {
return [
flags.quiet,
flags.namespace,
flags.userEmailAddress,
flags.deploymentClusters,
jeromy-cannon marked this conversation as resolved.
Show resolved Hide resolved
flags.contextClusterUnparsed,
]
}

private async create (argv: any): Promise<boolean> {
const self = this
const lease = await self.leaseManager.create()

interface Config {
namespace: Namespace
contextClusterUnparsed: string
contextCluster: ContextClusterStructure }
interface Context { config: Config }

const tasks = new Listr<Context>([
{
title: 'Initialize',
task: async (ctx, task): Promise<Listr<Context, any, any>> => {
self.configManager.update(argv)
self.logger.debug('Loaded cached config', { config: self.configManager.config })

await prompts.execute(task, self.configManager, DeploymentCommand.DEPLOY_FLAGS_LIST)

ctx.config = {
contextClusterUnparsed: self.configManager.getFlag<string>(flags.contextClusterUnparsed),
namespace: self.configManager.getFlag<Namespace>(flags.namespace),
} as Config

ctx.config.contextCluster = Templates.parseContextCluster(ctx.config.contextClusterUnparsed)

const namespace = ctx.config.namespace

if (!await self.k8.hasNamespace(namespace)) {
await self.k8.createNamespace(namespace)
}

self.logger.debug('Prepared config', { config: ctx.config, cachedConfig: self.configManager.config })

return ListrLease.newAcquireLeaseTask(lease, task)
}
},
this.localConfig.promptLocalConfigTask(),
{
title: 'Validate cluster connections',
task: async (ctx, task): Promise<Listr<Context, any, any>> => {
const subTasks = []

for (const cluster of Object.keys(ctx.config.contextCluster)) {
subTasks.push({
title: `Testing connection to cluster: ${chalk.cyan(cluster)}`,
task: async (_: Context, task: ListrTaskWrapper<Context, any, any>) => {
if (!await self.k8.testClusterConnection(cluster)) {
task.title = `${task.title} - ${chalk.red('Cluster connection failed')}`

throw new SoloError(`Cluster connection failed for: ${cluster}`)
}
}
})
}

return task.newListr(subTasks, {
concurrent: true,
rendererOptions: { collapseSubtasks: false }
})
}
},
RemoteConfigTasks.createRemoteConfig.bind(this)(),
], {
concurrent: false,
rendererOptions: constants.LISTR_DEFAULT_RENDERER_OPTION
})

try {
await tasks.run()
} catch (e: Error | any) {
throw new SoloError(`Error installing chart ${constants.SOLO_DEPLOYMENT_CHART}`, e)
} finally {
await lease.release()
}

return true
}

public getCommandDefinition (): { command: string; desc: string; builder: Function } {
const networkCmd = this
return {
command: 'deployment',
desc: 'Manage solo network deployment',
builder: (yargs: any): any => {
return yargs
.command({
command: 'create',
desc: 'Creates solo deployment',
builder: (y: any) => flags.setCommandFlags(y, ...DeploymentCommand.DEPLOY_FLAGS_LIST),
handler: (argv: any) => {
networkCmd.logger.debug('==== Running \'deployment create\' ===')
networkCmd.logger.debug(argv)

networkCmd.create(argv).then(r => {
networkCmd.logger.debug('==== Finished running `deployment create`====')

if (!r) process.exit(1)
}).catch(err => {
networkCmd.logger.showUserError(err)
process.exit(1)
})
}
})
.demandCommand(1, 'Select a chart command')
}
}
}
}
35 changes: 22 additions & 13 deletions src/commands/flags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,26 @@ export const namespace: CommandFlag = {
}
}

export const contextClusterUnparsed: CommandFlag = {
constName: 'contextClusterUnparsed',
name: 'context-cluster',
definition: {
describe:
'Context cluster mapping where context is key = value is cluster and comma delimited if more than one, ' +
'(e.g.: --context-cluster kind-solo=kind-solo,kind-solo-2=kind-solo-2)',
type: 'string'
}
}

export const context: CommandFlag = {
constName: 'context',
name: 'context',
definition: {
describe: 'Kubernetes context to use for command',
type: 'string'
}
}

export const deployHederaExplorer: CommandFlag = {
constName: 'deployHederaExplorer',
name: 'hedera-explorer',
Expand Down Expand Up @@ -743,17 +763,6 @@ export const userEmailAddress: CommandFlag = {
name: 'email',
definition: {
describe: 'User email address used for local configuration',
defaultValue: '',
type: 'string'
}
}

export const deploymentName: CommandFlag = {
constName: 'deploymentName',
name: 'deployment-name',
definition: {
describe: 'Solo deployment name',
defaultValue: '',
type: 'string'
}
}
Expand All @@ -763,7 +772,6 @@ export const deploymentClusters: CommandFlag = {
name: 'deployment-clusters',
definition: {
describe: 'Solo deployment cluster list (comma separated)',
defaultValue: '',
type: 'string'
}
}
Expand Down Expand Up @@ -847,14 +855,14 @@ export const allFlags: CommandFlag[] = [
chartDirectory,
clusterName,
clusterSetupNamespace,
context,
deletePvcs,
deleteSecrets,
deployCertManager,
deployCertManagerCrds,
deployHederaExplorer,
deployJsonRpcRelay,
deploymentClusters,
deploymentName,
deployMinio,
deployPrometheusStack,
devMode,
Expand Down Expand Up @@ -908,6 +916,7 @@ export const allFlags: CommandFlag[] = [
grpcWebTlsCertificatePath,
grpcTlsKeyPath,
grpcWebTlsKeyPath,
contextClusterUnparsed
]

/** Resets the definition.disablePrompt for all flags */
Expand Down
5 changes: 4 additions & 1 deletion src/commands/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { NetworkCommand } from './network.js'
import { NodeCommand } from './node/index.js'
import { RelayCommand } from './relay.js'
import { AccountCommand } from './account.js'
import { DeploymentCommand } from './deployment.js'
import { type Opts } from '../types/index.js'

/**
Expand All @@ -37,6 +38,7 @@ function Initialize (opts: Opts) {
const relayCmd = new RelayCommand(opts)
const accountCmd = new AccountCommand(opts)
const mirrorNodeCmd = new MirrorNodeCommand(opts)
const deploymentCommand = new DeploymentCommand(opts)

return [
initCmd.getCommandDefinition(),
Expand All @@ -45,7 +47,8 @@ function Initialize (opts: Opts) {
nodeCmd.getCommandDefinition(),
relayCmd.getCommandDefinition(),
accountCmd.getCommandDefinition(),
mirrorNodeCmd.getCommandDefinition()
mirrorNodeCmd.getCommandDefinition(),
deploymentCommand.getCommandDefinition(),
]
}

Expand Down
Loading
Loading