Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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

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

32 changes: 32 additions & 0 deletions packages/dashmate/src/config/getPlatformProfilesFactory.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const PLATFORM_PROFILES = [
'platform',
'platform-dapi-deprecated',
'platform-dapi-rs',
];

/**
* @param {getConfigProfiles} getConfigProfiles
* @return {getPlatformProfiles}
*/
export default function getPlatformProfilesFactory(getConfigProfiles) {
/**
* @typedef {function} getPlatformProfiles
* @param {Config} config
* @param {{includeAll?: boolean}} [options]
* @returns {string[]}
*/
function getPlatformProfiles(config, { includeAll = false } = {}) {
if (!config.get('platform.enable')) {
return [];
}

if (includeAll) {
return [...PLATFORM_PROFILES];
}

return getConfigProfiles(config)
.filter((profile) => profile.startsWith('platform'));
}

return getPlatformProfiles;
}
2 changes: 2 additions & 0 deletions packages/dashmate/src/createDIContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ import assertLocalServicesRunningFactory from './test/asserts/assertLocalService
import assertServiceRunningFactory from './test/asserts/assertServiceRunningFactory.js';
import generateEnvsFactory from './config/generateEnvsFactory.js';
import getConfigProfilesFactory from './config/getConfigProfilesFactory.js';
import getPlatformProfilesFactory from './config/getPlatformProfilesFactory.js';
import createIpAndPortsFormFactory from './listr/prompts/createIpAndPortsForm.js';
import registerMasternodeWithCoreWalletFactory from './listr/tasks/setup/regular/registerMasternode/registerMasternodeWithCoreWallet.js';
import registerMasternodeWithDMTFactory from './listr/tasks/setup/regular/registerMasternode/registerMasternodeWithDMT.js';
Expand Down Expand Up @@ -169,6 +170,7 @@ export default async function createDIContainer(options = {}) {
getConnectionHost: asFunction(getConnectionHostFactory).singleton(),
generateEnvs: asFunction(generateEnvsFactory).singleton(),
getConfigProfiles: asFunction(getConfigProfilesFactory).singleton(),
getPlatformProfiles: asFunction(getPlatformProfilesFactory).singleton(),
ensureFileMountExists: asFunction(ensureFileMountExistsFactory).singleton(),
// `configFile` and `config` are registering on command init
});
Expand Down
16 changes: 12 additions & 4 deletions packages/dashmate/src/listr/tasks/resetNodeTaskFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import wait from '../../util/wait.js';
* @param {ConfigFile} configFile
* @param {HomeDir} homeDir
* @param {generateEnvs} generateEnvs
* @param {getPlatformProfiles} getPlatformProfiles
* @return {resetNodeTask}
*/
export default function resetNodeTaskFactory(
Expand All @@ -23,6 +24,7 @@ export default function resetNodeTaskFactory(
configFile,
homeDir,
generateEnvs,
getPlatformProfiles,
) {
/**
* Remove path but ignore permission issues to avoid failing reset on root-owned directories.
Expand Down Expand Up @@ -70,9 +72,13 @@ export default function resetNodeTaskFactory(
title: 'Check services are not running',
skip: (ctx) => ctx.isForce,
task: async (ctx) => {
const profiles = ctx.isPlatformOnlyReset
? getPlatformProfiles(config, { includeAll: true })
: [];

if (await dockerCompose.isNodeRunning(
config,
{ profiles: ctx.isPlatformOnlyReset ? ['platform'] : [] },
{ profiles },
)) {
throw new Error('Running services detected. Please ensure all services are stopped for this config before starting');
}
Expand All @@ -98,20 +104,22 @@ export default function resetNodeTaskFactory(
title: 'Remove platform services and associated data',
enabled: (ctx) => ctx.isPlatformOnlyReset,
task: async (ctx, task) => {
const profiles = getPlatformProfiles(config, { includeAll: true });

if (ctx.keepData) {
// eslint-disable-next-line no-param-reassign
task.title = 'Remove platform services and keep associated data';
}

await dockerCompose.rm(config, { profiles: ['platform'] });
await dockerCompose.rm(config, { profiles });

// Remove volumes
if (!ctx.keepData) {
const { COMPOSE_PROJECT_NAME: composeProjectName } = generateEnvs(config);

const projectVolumeNames = await dockerCompose.getVolumeNames(
config,
{ profiles: ['platform'] },
{ profiles },
);

await Promise.all(
Expand All @@ -132,7 +140,7 @@ export default function resetNodeTaskFactory(
await wait(1000);

// Remove containers
await dockerCompose.rm(config, { profiles: ['platform'] });
await dockerCompose.rm(config, { profiles });

isRetry = true;

Expand Down
15 changes: 2 additions & 13 deletions packages/dashmate/src/listr/tasks/startNodeTaskFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const DAPI_PROFILE_SERVICES = {
* @param {getConnectionHost} getConnectionHost
* @param {ensureFileMountExists} ensureFileMountExists
* @param {HomeDir} homeDir
* @param {getConfigProfiles} getConfigProfiles
* @param {getPlatformProfiles} getPlatformProfiles
* @return {startNodeTask}
*/
export default function startNodeTaskFactory(
Expand All @@ -31,19 +31,8 @@ export default function startNodeTaskFactory(
getConnectionHost,
ensureFileMountExists,
homeDir,
getConfigProfiles,
getPlatformProfiles,
) {
function getPlatformProfiles(config) {
const platformProfiles = getConfigProfiles(config)
.filter((profile) => profile.startsWith('platform'));

if (platformProfiles.length === 0) {
platformProfiles.push('platform');
}

return Array.from(new Set(platformProfiles));
}

/**
* @typedef {startNodeTask}
* @param {Config} config
Expand Down
23 changes: 8 additions & 15 deletions packages/dashmate/src/listr/tasks/stopNodeTaskFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,15 @@ import waitForDKGWindowPass from '../../core/quorum/waitForDKGWindowPass.js';
* @param {DockerCompose} dockerCompose
* @param {createRpcClient} createRpcClient
* @param {getConnectionHost} getConnectionHost
* @param {getConfigProfiles} getConfigProfiles
* @param {getPlatformProfiles} getPlatformProfiles
* @return {stopNodeTask}
*/
export default function stopNodeTaskFactory(
dockerCompose,
createRpcClient,
getConnectionHost,
getConfigProfiles,
getPlatformProfiles,
) {
function getPlatformProfiles(config) {
const platformProfiles = getConfigProfiles(config)
.filter((profile) => profile.startsWith('platform'));

if (platformProfiles.length === 0) {
platformProfiles.push('platform');
}

return Array.from(new Set(platformProfiles));
}

/**
* Stop node
* @typedef stopNodeTask
Expand All @@ -40,7 +29,9 @@ export default function stopNodeTaskFactory(
title: 'Check node is running',
skip: (ctx) => ctx.isForce,
task: async (ctx) => {
const profiles = ctx.platformOnly ? getPlatformProfiles(config) : [];
const profiles = ctx.platformOnly
? getPlatformProfiles(config, { includeAll: true })
: [];

if (!await dockerCompose.isNodeRunning(config, { profiles })) {
throw new Error('Node is not running');
Expand Down Expand Up @@ -80,7 +71,9 @@ export default function stopNodeTaskFactory(
{
title: `Stopping ${config.getName()} node`,
task: async (ctx) => {
const profiles = ctx.platformOnly ? getPlatformProfiles(config) : [];
const profiles = ctx.platformOnly
? getPlatformProfiles(config, { includeAll: true })
: [];

await dockerCompose.stop(config, { profiles });
},
Expand Down
Loading