From 1f78bea975fb8a4e09c2f95a9b2ba5074a3d82e6 Mon Sep 17 00:00:00 2001 From: Leon White Date: Sun, 6 Dec 2020 18:05:19 -0800 Subject: [PATCH 1/8] feat: outline for handling config versions --- src/config/configFile/ConfigJsonFileRepository.js | 6 ++++++ src/config/configJsonSchema.js | 5 ++++- src/config/systemConfigs/systemConfigs.js | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/config/configFile/ConfigJsonFileRepository.js b/src/config/configFile/ConfigJsonFileRepository.js index 3269e04d..27208672 100644 --- a/src/config/configFile/ConfigJsonFileRepository.js +++ b/src/config/configFile/ConfigJsonFileRepository.js @@ -10,6 +10,8 @@ const configFileJsonSchema = require('./configFileJsonSchema'); const ConfigFileNotFoundError = require('../errors/ConfigFileNotFoundError'); const InvalidConfigFileFormatError = require('../errors/InvalidConfigFileFormatError'); +const packageJson = require('../../../package.json'); + class ConfigJsonFileRepository { /** * @param configFilePath @@ -38,6 +40,10 @@ class ConfigJsonFileRepository { throw new InvalidConfigFileFormatError(this.configFilePath, e); } + if (packageJson.version !== configFileData.version) { + // do config upgrade + } + const isValid = this.ajv.validate(configFileJsonSchema, configFileData); if (!isValid) { diff --git a/src/config/configJsonSchema.js b/src/config/configJsonSchema.js index 81b716ea..51bf2c4f 100644 --- a/src/config/configJsonSchema.js +++ b/src/config/configJsonSchema.js @@ -29,6 +29,9 @@ module.exports = { description: { type: ['string', 'null'], }, + configVersion: { + type: ['string'], + }, core: { type: 'object', properties: { @@ -338,6 +341,6 @@ module.exports = { enum: ['development', 'production'], }, }, - required: ['description', 'core', 'platform', 'externalIp', 'network', 'compose', 'environment'], + required: ['description', 'configVersion', 'core', 'platform', 'externalIp', 'network', 'compose', 'environment'], additionalProperties: false, }; diff --git a/src/config/systemConfigs/systemConfigs.js b/src/config/systemConfigs/systemConfigs.js index 2d90263d..3849cd10 100644 --- a/src/config/systemConfigs/systemConfigs.js +++ b/src/config/systemConfigs/systemConfigs.js @@ -4,6 +4,7 @@ const NETWORKS = require('../../networks'); const baseConfig = { description: 'base config for use as template', + configVersion: 0.16, core: { docker: { image: 'dashpay/dashd-develop:latest', From 80324626342997625e4777f6cb85259e1878abca Mon Sep 17 00:00:00 2001 From: Leon White Date: Mon, 7 Dec 2020 17:17:50 -0800 Subject: [PATCH 2/8] fix: move version to file schema --- src/config/ConfigCollection.js | 24 ++++++++++++++++++- .../configFile/ConfigJsonFileRepository.js | 9 +++---- src/config/configFile/configFileJsonSchema.js | 5 +++- src/config/configJsonSchema.js | 5 +--- .../createSystemConfigsFactory.js | 4 +++- src/config/systemConfigs/systemConfigs.js | 1 - 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/config/ConfigCollection.js b/src/config/ConfigCollection.js index f4a83993..d4a55309 100644 --- a/src/config/ConfigCollection.js +++ b/src/config/ConfigCollection.js @@ -8,7 +8,7 @@ class ConfigCollection { * @param {Config[]} [configs] * @param {string|null} [currentConfigName=null] */ - constructor(configs = [], currentConfigName = null) { + constructor(configs = [], currentConfigName = null, currentConfigVersion) { this.configsMap = configs.reduce((configsMap, config) => { // eslint-disable-next-line no-param-reassign configsMap[config.getName()] = config; @@ -17,6 +17,7 @@ class ConfigCollection { }, {}); this.setDefaultConfigName(currentConfigName); + this.setConfigVersion(currentConfigVersion); } /** @@ -53,6 +54,27 @@ class ConfigCollection { return this.defaultConfigName; } + /** + * Set current config version + * + * @param {string} version + * @returns {ConfigCollection} + */ + setConfigVersion(version) { + this.configVersion = version; + + return this; + } + + /** + * Get current config version if set + * + * @returns {string|null} + */ + getConfigVersion() { + return this.configVersion; + } + /** * Get current config if set * diff --git a/src/config/configFile/ConfigJsonFileRepository.js b/src/config/configFile/ConfigJsonFileRepository.js index 27208672..6a904247 100644 --- a/src/config/configFile/ConfigJsonFileRepository.js +++ b/src/config/configFile/ConfigJsonFileRepository.js @@ -40,10 +40,6 @@ class ConfigJsonFileRepository { throw new InvalidConfigFileFormatError(this.configFilePath, e); } - if (packageJson.version !== configFileData.version) { - // do config upgrade - } - const isValid = this.ajv.validate(configFileJsonSchema, configFileData); if (!isValid) { @@ -52,6 +48,10 @@ class ConfigJsonFileRepository { throw new InvalidConfigFileFormatError(this.configFilePath, error); } + if (packageJson.version !== configFileData.configVersion) { + // do config upgrade + } + let configs; try { configs = Object.entries(configFileData.configs) @@ -72,6 +72,7 @@ class ConfigJsonFileRepository { async write(configCollection) { const configFileData = { defaultConfigName: configCollection.getDefaultConfigName(), + configVersion: configCollection.getConfigVersion(), }; configFileData.configs = configCollection.getAllConfigs().reduce((configsMap, config) => { diff --git a/src/config/configFile/configFileJsonSchema.js b/src/config/configFile/configFileJsonSchema.js index 5eee16dc..37c29648 100644 --- a/src/config/configFile/configFileJsonSchema.js +++ b/src/config/configFile/configFileJsonSchema.js @@ -2,6 +2,9 @@ module.exports = { $schema: 'http://json-schema.org/draft-07/schema#', type: 'object', properties: { + configVersion: { + type: 'string', + }, defaultConfigName: { type: ['string', 'null'], }, @@ -9,6 +12,6 @@ module.exports = { type: 'object', }, }, - required: ['defaultConfigName', 'configs'], + required: ['configVersion', 'defaultConfigName', 'configs'], additionalProperties: false, }; diff --git a/src/config/configJsonSchema.js b/src/config/configJsonSchema.js index 51bf2c4f..81b716ea 100644 --- a/src/config/configJsonSchema.js +++ b/src/config/configJsonSchema.js @@ -29,9 +29,6 @@ module.exports = { description: { type: ['string', 'null'], }, - configVersion: { - type: ['string'], - }, core: { type: 'object', properties: { @@ -341,6 +338,6 @@ module.exports = { enum: ['development', 'production'], }, }, - required: ['description', 'configVersion', 'core', 'platform', 'externalIp', 'network', 'compose', 'environment'], + required: ['description', 'core', 'platform', 'externalIp', 'network', 'compose', 'environment'], additionalProperties: false, }; diff --git a/src/config/systemConfigs/createSystemConfigsFactory.js b/src/config/systemConfigs/createSystemConfigsFactory.js index e9bffcff..860ef743 100644 --- a/src/config/systemConfigs/createSystemConfigsFactory.js +++ b/src/config/systemConfigs/createSystemConfigsFactory.js @@ -2,6 +2,8 @@ const Config = require('../Config'); const ConfigCollection = require('../ConfigCollection'); +const packageJson = require('../../../package.json'); + /** * @param {Object} systemConfigs * @return {createSystemConfigs} @@ -16,7 +18,7 @@ function createSystemConfigsFactory(systemConfigs) { new Config(name, options) )); - return new ConfigCollection(configs, 'base'); + return new ConfigCollection(configs, 'base', packageJson.version); } return createSystemConfigs; diff --git a/src/config/systemConfigs/systemConfigs.js b/src/config/systemConfigs/systemConfigs.js index 3849cd10..2d90263d 100644 --- a/src/config/systemConfigs/systemConfigs.js +++ b/src/config/systemConfigs/systemConfigs.js @@ -4,7 +4,6 @@ const NETWORKS = require('../../networks'); const baseConfig = { description: 'base config for use as template', - configVersion: 0.16, core: { docker: { image: 'dashpay/dashd-develop:latest', From 9265e45fad68ec0b37e72b1dbb5f08b6064de7d2 Mon Sep 17 00:00:00 2001 From: Leon White Date: Thu, 10 Dec 2020 17:02:01 -0800 Subject: [PATCH 3/8] fix: rename vars --- src/config/ConfigCollection.js | 16 ++++++++-------- .../configFile/ConfigJsonFileRepository.js | 6 +++--- src/config/configFile/configFileJsonSchema.js | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/config/ConfigCollection.js b/src/config/ConfigCollection.js index d4a55309..270d34ac 100644 --- a/src/config/ConfigCollection.js +++ b/src/config/ConfigCollection.js @@ -8,7 +8,7 @@ class ConfigCollection { * @param {Config[]} [configs] * @param {string|null} [currentConfigName=null] */ - constructor(configs = [], currentConfigName = null, currentConfigVersion) { + constructor(configs = [], currentConfigName = null, currentConfigFormatVersion) { this.configsMap = configs.reduce((configsMap, config) => { // eslint-disable-next-line no-param-reassign configsMap[config.getName()] = config; @@ -17,7 +17,7 @@ class ConfigCollection { }, {}); this.setDefaultConfigName(currentConfigName); - this.setConfigVersion(currentConfigVersion); + this.setConfigFormatVersion(currentConfigFormatVersion); } /** @@ -55,24 +55,24 @@ class ConfigCollection { } /** - * Set current config version + * Set current config format version * * @param {string} version * @returns {ConfigCollection} */ - setConfigVersion(version) { - this.configVersion = version; + setConfigFormatVersion(version) { + this.configFormatVersion = version; return this; } /** - * Get current config version if set + * Get current config format version if set * * @returns {string|null} */ - getConfigVersion() { - return this.configVersion; + getConfigFormatVersion() { + return this.configFormatVersion; } /** diff --git a/src/config/configFile/ConfigJsonFileRepository.js b/src/config/configFile/ConfigJsonFileRepository.js index 6a904247..5dd689d1 100644 --- a/src/config/configFile/ConfigJsonFileRepository.js +++ b/src/config/configFile/ConfigJsonFileRepository.js @@ -48,7 +48,7 @@ class ConfigJsonFileRepository { throw new InvalidConfigFileFormatError(this.configFilePath, error); } - if (packageJson.version !== configFileData.configVersion) { + if (packageJson.version !== configFileData.configFormatVersion) { // do config upgrade } @@ -60,7 +60,7 @@ class ConfigJsonFileRepository { throw new InvalidConfigFileFormatError(this.configFilePath, e); } - return new ConfigCollection(configs, configFileData.defaultConfigName); + return new ConfigCollection(configs, configFileData.defaultConfigName, packageJson.version); } /** @@ -72,7 +72,7 @@ class ConfigJsonFileRepository { async write(configCollection) { const configFileData = { defaultConfigName: configCollection.getDefaultConfigName(), - configVersion: configCollection.getConfigVersion(), + configFormatVersion: configCollection.getConfigFormatVersion(), }; configFileData.configs = configCollection.getAllConfigs().reduce((configsMap, config) => { diff --git a/src/config/configFile/configFileJsonSchema.js b/src/config/configFile/configFileJsonSchema.js index 37c29648..e2903f85 100644 --- a/src/config/configFile/configFileJsonSchema.js +++ b/src/config/configFile/configFileJsonSchema.js @@ -2,7 +2,7 @@ module.exports = { $schema: 'http://json-schema.org/draft-07/schema#', type: 'object', properties: { - configVersion: { + configFormatVersion: { type: 'string', }, defaultConfigName: { @@ -12,6 +12,6 @@ module.exports = { type: 'object', }, }, - required: ['configVersion', 'defaultConfigName', 'configs'], + required: ['configFormatVersion', 'defaultConfigName', 'configs'], additionalProperties: false, }; From 34e7675ca24de315b131c72002c67a17b0d44a7a Mon Sep 17 00:00:00 2001 From: Leon White Date: Tue, 15 Dec 2020 11:09:53 -0800 Subject: [PATCH 4/8] fix: merge conflict --- docker-compose.platform.yml | 6 +- package-lock.json | 2 +- .../initializeTenderdashNodeFactory.js | 123 ++++++++++++++++++ 3 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 src/tenderdash/initializeTenderdashNodeFactory.js diff --git a/docker-compose.platform.yml b/docker-compose.platform.yml index 93e30ec8..e3b1aad8 100644 --- a/docker-compose.platform.yml +++ b/docker-compose.platform.yml @@ -43,10 +43,8 @@ services: - ${PLATFORM_DRIVE_TENDERMINT_P2P_PORT:?err}:26656 # P2P - 127.0.0.1:${PLATFORM_DRIVE_TENDERMINT_RPC_PORT:?err}:26657 # RPC volumes: - - ${MN_HOME_DIR:?err}/${CONFIG_NAME:?err}/genesis.json:/tendermint/config/genesis.json - - ${MN_HOME_DIR:?err}/${CONFIG_NAME:?err}/config.toml:/tendermint/config/config.toml - - drive_tendermint_homedir:/tendermint - entrypoint: sh -c "/usr/bin/tendermint init && /usr/bin/tendermint node" + - ${MN_HOME_DIR:?err}/${CONFIG_NAME:?err}/tenderdash:/tenderdash/config + - drive_tenderdash_data:/tenderdash dapi_insight: image: ${PLATFORM_DAPI_INSIGHT_DOCKER_IMAGE:?err} diff --git a/package-lock.json b/package-lock.json index c25e2b24..15da441c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4287,7 +4287,7 @@ "dev": true }, "protobufjs": { - "version": "github:jawid-h/protobuf.js#8b91c72dca68fd6c418078fd2358c4969425dcdc", + "version": "github:jawid-h/protobuf.js#264b99b2ab6e097ff5350a57055d754d44d8e703", "from": "github:jawid-h/protobuf.js#fix/buffer-conversion", "requires": { "@protobufjs/aspromise": "^1.1.2", diff --git a/src/tenderdash/initializeTenderdashNodeFactory.js b/src/tenderdash/initializeTenderdashNodeFactory.js new file mode 100644 index 00000000..b6519612 --- /dev/null +++ b/src/tenderdash/initializeTenderdashNodeFactory.js @@ -0,0 +1,123 @@ +const { WritableStream } = require('memory-streams'); + +/** + * + * @param {DockerCompose} dockerCompose + * @param {Docker} docker + * @param {dockerPull} dockerPull + * @return {initializeTenderdashNode} + */ +function initializeTenderdashNodeFactory(dockerCompose, docker, dockerPull) { + /** + * @typedef {initializeTenderdashNode} + * @param {Config} config + * @return {Promise} + */ + async function initializeTenderdashNode(config) { + if (await dockerCompose.isServiceRunning(config.toEnvs(), 'drive_tenderdash')) { + throw new Error('Can\'t initialize Tenderdash. Already running.'); + } + + const { COMPOSE_PROJECT_NAME: composeProjectName } = config.toEnvs(); + const volumeName = 'drive_tenderdash_data'; + const volumeNameFullName = `${composeProjectName}_${volumeName}`; + const tempVolumeNameFullName = `${composeProjectName}_tempvol`; + + const volume = docker.getVolume(volumeNameFullName); + + const isVolumeDefined = await volume.inspect() + .then(() => true) + .catch(() => false); + + if (!isVolumeDefined) { + // Create volume with tenderdash data + await docker.createVolume({ + Name: volumeNameFullName, + Labels: { + 'com.docker.compose.project': composeProjectName, + 'com.docker.compose.version': '1.27.4', + 'com.docker.compose.volume': volumeName, + }, + }); + + await docker.createVolume({ + Name: tempVolumeNameFullName, + Labels: { + 'com.docker.compose.project': composeProjectName, + 'com.docker.compose.version': '1.27.4', + 'com.docker.compose.volume': 'tempvol', + }, + }); + + // Set tmuser ownership for the volume + /*await dockerPull('alpine:latest'); + + const writableStream = new WritableStream(); + + const command = [ + 'addgroup tmuser', + 'adduser -S -G tmuser tmuser', + 'chown -R tmuser:tmuser /tenderdash', + ].join('&&'); + + const [result] = await docker.run( + 'alpine:latest', + ['sh', '-c', command], + writableStream, + { + HostConfig: { + //AutoRemove: true, + Binds: [`${volumeNameFullName}:/tenderdash`, 'tempvol:/tenderdash/config'], + }, + }, + {}, + ); + + if (result.StatusCode !== 0) { + throw new Error(result.Error || writableStream.toString()); + }*/ + } + + // Initialize Tenderdash + + const tenderdashImage = config.get('platform.drive.tenderdash.docker.image'); + + await dockerPull(tenderdashImage); + + const writableStream = new WritableStream(); + + const command = [ + '/usr/bin/tenderdash init > /dev/null', + 'echo "["', + 'cat $TMHOME/config/priv_validator_key.json', + 'echo ","', + 'cat $TMHOME/config/node_key.json', + 'echo ","', + 'cat $TMHOME/config/genesis.json', + 'echo "]"', + ].join('&&'); + + const [result] = await docker.run( + tenderdashImage, + [], + writableStream, + { + Entrypoint: ['sh', '-c', command], + HostConfig: { + //AutoRemove: true, + Binds: [`${volumeNameFullName}:/tenderdash`, '/home/strophy/Code/mn-bootstrap/tempdir:/tenderdash/config'], + }, + }, + ); + + if (result.StatusCode !== 0) { + throw new Error(result.Error || writableStream.toString()); + } + + return JSON.parse(writableStream.toString()); + } + + return initializeTenderdashNode; +} + +module.exports = initializeTenderdashNodeFactory; From 119e6e771cfb4bab6668a7d423a524a7ed4cfee2 Mon Sep 17 00:00:00 2001 From: Leon White Date: Tue, 15 Dec 2020 14:49:31 -0800 Subject: [PATCH 5/8] fix: apply version migration functions from object --- .../configFile/ConfigJsonFileRepository.js | 18 +++++++++++------ src/config/configOptionMigrations.js | 20 +++++++++++++++++++ src/config/migrateConfigOptions.js | 19 ++++++++++++++++++ src/createDIContainer.js | 2 ++ 4 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 src/config/configOptionMigrations.js create mode 100644 src/config/migrateConfigOptions.js diff --git a/src/config/configFile/ConfigJsonFileRepository.js b/src/config/configFile/ConfigJsonFileRepository.js index 5dd689d1..254f21f5 100644 --- a/src/config/configFile/ConfigJsonFileRepository.js +++ b/src/config/configFile/ConfigJsonFileRepository.js @@ -16,8 +16,9 @@ class ConfigJsonFileRepository { /** * @param configFilePath */ - constructor(configFilePath) { + constructor(configFilePath, migrateConfigOptions) { this.configFilePath = configFilePath; + this.migrateConfigOptions = migrateConfigOptions; this.ajv = new Ajv(); } @@ -48,14 +49,19 @@ class ConfigJsonFileRepository { throw new InvalidConfigFileFormatError(this.configFilePath, error); } - if (packageJson.version !== configFileData.configFormatVersion) { - // do config upgrade - } - let configs; try { configs = Object.entries(configFileData.configs) - .map(([name, options]) => new Config(name, options)); + .map(([name, options]) => { + const migratedOptions = this.migrateConfigOptions( + name, + options, + configFileData.configFormatVersion, + packageJson.version, + ); + + return new Config(name, migratedOptions); + }); } catch (e) { throw new InvalidConfigFileFormatError(this.configFilePath, e); } diff --git a/src/config/configOptionMigrations.js b/src/config/configOptionMigrations.js new file mode 100644 index 00000000..eb8f3d29 --- /dev/null +++ b/src/config/configOptionMigrations.js @@ -0,0 +1,20 @@ +const lodashSet = require('lodash.set'); + +// const systemConfigs = require('./systemConfigs/systemConfigs'); + +module.exports = { + '0.17.0-dev.12': (name, options) => { + lodashSet(options, 'platform.dapi.nginx.rateLimiter.enable', name !== 'base'); + lodashSet(options, 'platform.dapi.nginx.rateLimiter.rate', 120); + lodashSet(options, 'platform.dapi.nginx.rateLimiter.burst', 300); + + lodashSet(options, 'platform.drive.tenderdash', options.platform.drive.tendermint); + // eslint-disable-next-line no-param-reassign + delete options.platform.drive.tendermint; + + lodashSet(options, 'platform.drive.tenderdash.validatorKey', {}); + lodashSet(options, 'platform.drive.tenderdash.nodeKey', {}); + + return options; + }, +}; diff --git a/src/config/migrateConfigOptions.js b/src/config/migrateConfigOptions.js new file mode 100644 index 00000000..485b21c1 --- /dev/null +++ b/src/config/migrateConfigOptions.js @@ -0,0 +1,19 @@ +const semver = require('semver'); + +const configOptionMigrations = require('./configOptionMigrations'); + +function migrateConfigOptions(name, options, fromVersion, toVersion) { + if (fromVersion === toVersion) { + return options; + } + + return Object.keys(configOptionMigrations) + .filter((version) => (semver.gt(version, fromVersion) && semver.lte(version, toVersion))) + .sort() + .reduce((migratedOptions, version) => { + const migrationFunction = configOptionMigrations[version]; + return migrationFunction(name, migratedOptions); + }, options); +} + +module.exports = migrateConfigOptions; diff --git a/src/createDIContainer.js b/src/createDIContainer.js index 66a7379b..b71e3908 100644 --- a/src/createDIContainer.js +++ b/src/createDIContainer.js @@ -15,6 +15,7 @@ const ensureHomeDirFactory = require('./config/configFile/ensureHomeDirFactory') const ConfigJsonFileRepository = require('./config/configFile/ConfigJsonFileRepository'); const createSystemConfigsFactory = require('./config/systemConfigs/createSystemConfigsFactory'); const resetSystemConfigFactory = require('./config/systemConfigs/resetSystemConfigFactory'); +const migrateConfigOptions = require('./config/migrateConfigOptions'); const systemConfigs = require('./config/systemConfigs/systemConfigs'); const renderServiceTemplatesFactory = require('./templates/renderServiceTemplatesFactory'); @@ -67,6 +68,7 @@ async function createDIContainer(options) { systemConfigs: asValue(systemConfigs), createSystemConfigs: asFunction(createSystemConfigsFactory), resetSystemConfig: asFunction(resetSystemConfigFactory), + migrateConfigOptions: asValue(migrateConfigOptions), // `configCollection` and `config` are registering on command init }); From e961e37db2ddb0004a901e45ccdb1523dc022cb9 Mon Sep 17 00:00:00 2001 From: Leon White Date: Tue, 15 Dec 2020 16:25:55 -0800 Subject: [PATCH 6/8] fix: copy configs from systemConfigs --- src/config/configOptionMigrations.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/config/configOptionMigrations.js b/src/config/configOptionMigrations.js index eb8f3d29..9a21ebc2 100644 --- a/src/config/configOptionMigrations.js +++ b/src/config/configOptionMigrations.js @@ -1,19 +1,28 @@ +const lodashGet = require('lodash.get'); const lodashSet = require('lodash.set'); -// const systemConfigs = require('./systemConfigs/systemConfigs'); +const systemConfigs = require('./systemConfigs/systemConfigs'); module.exports = { '0.17.0-dev.12': (name, options) => { - lodashSet(options, 'platform.dapi.nginx.rateLimiter.enable', name !== 'base'); - lodashSet(options, 'platform.dapi.nginx.rateLimiter.rate', 120); - lodashSet(options, 'platform.dapi.nginx.rateLimiter.burst', 300); - + // Rename tendermint to tenderdash lodashSet(options, 'platform.drive.tenderdash', options.platform.drive.tendermint); // eslint-disable-next-line no-param-reassign delete options.platform.drive.tendermint; - lodashSet(options, 'platform.drive.tenderdash.validatorKey', {}); - lodashSet(options, 'platform.drive.tenderdash.nodeKey', {}); + // Copy new configs from system defaults + const sourceConfigName = name in systemConfigs ? name : 'base'; + const paths = [ + 'platform.dapi.nginx.rateLimiter.enable', + 'platform.dapi.nginx.rateLimiter.burst', + 'platform.dapi.nginx.rateLimiter.rate', + 'platform.drive.tenderdash.validatorKey', + 'platform.drive.tenderdash.nodeKey', + ]; + + paths.forEach((path) => { + lodashSet(options, path, lodashGet(systemConfigs[sourceConfigName], path)); + }); return options; }, From 71a603f75a7df869205f1dcbeba3e97f624ad36c Mon Sep 17 00:00:00 2001 From: Leon White Date: Fri, 18 Dec 2020 15:35:46 -0800 Subject: [PATCH 7/8] fix: sort option migrations with semver --- src/config/migrateConfigOptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/migrateConfigOptions.js b/src/config/migrateConfigOptions.js index 485b21c1..f87e0a84 100644 --- a/src/config/migrateConfigOptions.js +++ b/src/config/migrateConfigOptions.js @@ -9,7 +9,7 @@ function migrateConfigOptions(name, options, fromVersion, toVersion) { return Object.keys(configOptionMigrations) .filter((version) => (semver.gt(version, fromVersion) && semver.lte(version, toVersion))) - .sort() + .sort((v1, v2) => semver.compare(v1, v2)) .reduce((migratedOptions, version) => { const migrationFunction = configOptionMigrations[version]; return migrationFunction(name, migratedOptions); From e29934ae1e71e41edbbb6d17c3066f9237b84693 Mon Sep 17 00:00:00 2001 From: strophy <32928115+strophy@users.noreply.github.com> Date: Mon, 21 Dec 2020 11:34:31 -0800 Subject: [PATCH 8/8] fix: simpler sort syntax Co-authored-by: Ivan Shumkov --- src/config/migrateConfigOptions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/migrateConfigOptions.js b/src/config/migrateConfigOptions.js index f87e0a84..480c3b80 100644 --- a/src/config/migrateConfigOptions.js +++ b/src/config/migrateConfigOptions.js @@ -9,7 +9,7 @@ function migrateConfigOptions(name, options, fromVersion, toVersion) { return Object.keys(configOptionMigrations) .filter((version) => (semver.gt(version, fromVersion) && semver.lte(version, toVersion))) - .sort((v1, v2) => semver.compare(v1, v2)) + .sort(semver.compare) .reduce((migratedOptions, version) => { const migrationFunction = configOptionMigrations[version]; return migrationFunction(name, migratedOptions);