Skip to content

Commit

Permalink
Add support for user Compose definitions (#331)
Browse files Browse the repository at this point in the history
Signed-off-by: Iliya Savov <isavov@users.noreply.github.com>
Signed-off-by: georgi-l95 <glazarov95@gmail.com>
Co-authored-by: Iliya Savov <isavov@users.noreply.github.com>
Co-authored-by: georgi-l95 <glazarov95@gmail.com>
  • Loading branch information
3 people authored Jun 7, 2023
1 parent 2ccbbbe commit 614a699
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 23 deletions.
45 changes: 23 additions & 22 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,10 @@ yargs(hideBin(process.argv))
"start [accounts]",
"Starts the local hedera network.",
(yargs) => {
CliOptions.addAccountsOption(yargs);
CliOptions.addDetachedOption(yargs);
CliOptions.addHostOption(yargs);
CliOptions.addNetworkOption(yargs);
CliOptions.addRateLimitOption(yargs);
CliOptions.addDevModeOption(yargs);
CliOptions.addFullModeOption(yargs);
CliOptions.addBalanceOption(yargs);
CliOptions.addAsyncOption(yargs);
CliOptions.addMultiNodeOption(yargs);
loadStartCliOptions(yargs);
},
async (argv) => {
await NodeController.startLocalNode(argv.network, argv.limits, argv.dev, argv.full, argv.multinode, argv.host);
await NodeController.startLocalNode(argv);
await main(argv.accounts, argv.async, argv.balance, argv.detached, argv.host);
}
)
Expand All @@ -43,20 +34,11 @@ yargs(hideBin(process.argv))
"restart [accounts]",
"Restart the local hedera network.",
(yargs) => {
CliOptions.addAccountsOption(yargs);
CliOptions.addDetachedOption(yargs);
CliOptions.addHostOption(yargs);
CliOptions.addNetworkOption(yargs);
CliOptions.addRateLimitOption(yargs);
CliOptions.addDevModeOption(yargs);
CliOptions.addFullModeOption(yargs);
CliOptions.addBalanceOption(yargs);
CliOptions.addAsyncOption(yargs);
CliOptions.addMultiNodeOption(yargs);
loadStartCliOptions(yargs);
},
async (argv) => {
await NodeController.stopLocalNode();
await NodeController.startLocalNode(argv.network, argv.limits, argv.dev, argv.full, argv.multinode, argv.host);
await NodeController.startLocalNode(argv);
await main(argv.accounts, argv.async, argv.balance, argv.detached, argv.host);
}
)
Expand Down Expand Up @@ -206,3 +188,22 @@ async function startDetached(accounts, async, balance, host) {
console.log("\nLocal node has been successfully started in detached mode.");
process.exit();
}

/**
* Loads the node starting options
* @param {yargs} yargs
*/
function loadStartCliOptions(yargs) {
CliOptions.addAccountsOption(yargs);
CliOptions.addDetachedOption(yargs);
CliOptions.addHostOption(yargs);
CliOptions.addNetworkOption(yargs);
CliOptions.addRateLimitOption(yargs);
CliOptions.addDevModeOption(yargs);
CliOptions.addFullModeOption(yargs);
CliOptions.addBalanceOption(yargs);
CliOptions.addAsyncOption(yargs);
CliOptions.addMultiNodeOption(yargs);
CliOptions.addUserComposeOption(yargs);
CliOptions.addUserComposeDirOption(yargs);
}
16 changes: 16 additions & 0 deletions src/utils/cliOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,20 @@ module.exports = class CliOptions {
default: false,
})
}
static addUserComposeOption(yargs) {
yargs.option('usercompose', {
type: 'boolean',
describe: "Enable or disable user Compose configuration files",
demandOption: false,
default: true
})
}
static addUserComposeDirOption(yargs) {
yargs.option('composedir', {
type: 'string',
describe: 'Path to a directory with user Compose configuration files',
demandOption: false,
default: './overrides/',
})
}
}
26 changes: 25 additions & 1 deletion src/utils/nodeController.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const path = require("path");
const yargs = require("yargs");
const fs = require("fs");
const os = require("os");
const shell = require("shelljs");
Expand Down Expand Up @@ -27,7 +28,12 @@ module.exports = class NodeController {
shell.cd(rootPath);
}

static async startLocalNode(network, limits, devMode, fullMode, multiNode, host) {
/**
* Checks the nessecery arguments and start the local node
* @param {yargs.ArgumentsCamelCase<{}>} argv
*/
static async startLocalNode(argv) {
const { network, limits, devMode, fullMode, multiNode, host, userCompose, composeDir } = argv;
await this.applyConfig(network, limits, devMode, fullMode, multiNode, host);

const dockerStatus = await DockerCheck.checkDocker();
Expand All @@ -51,6 +57,9 @@ module.exports = class NodeController {
composeFiles.push('docker-compose.multinode.evm.yml');
}
}
if (userCompose) {
composeFiles.push(...this.getUserComposeFiles(composeDir));
}
return shell.exec(`docker compose -f ${composeFiles.join(' -f ')} up -d 2>${nullOutput}`);
};
const output = dockerComposeUpCmd();
Expand Down Expand Up @@ -162,4 +171,19 @@ module.exports = class NodeController {
lines.splice(target, 1, `${key}=${value}`);
fs.writeFileSync(envPath, lines.join(os.EOL));
}

static getUserComposeFiles(dirPath = './overrides/') {
dirPath = path.normalize(dirPath);
if (!dirPath.endsWith(path.sep)) {
dirPath += path.sep;
}
if (fs.existsSync(dirPath)) {
const files = fs.readdirSync(dirPath)
.filter(file => path.extname(file).toLowerCase() === '.yml')
.sort().map(file => dirPath.concat(file));
return files;
} else {
return [];
}
}
};

0 comments on commit 614a699

Please sign in to comment.