From 502f12fc85467bbd67259fed13d6328ba37566d3 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 09:39:19 +0200 Subject: [PATCH 01/47] feat: setup upgrade script --- upgrade.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 upgrade.js diff --git a/upgrade.js b/upgrade.js new file mode 100644 index 0000000000..855a9ec695 --- /dev/null +++ b/upgrade.js @@ -0,0 +1,39 @@ +const envPaths = require("env-paths"); +const expandHomeDir = require('expand-home-dir'); + +// Paths +const corePaths = envPaths("ark", { suffix: "core" }); + +const paths = { + core: { + old: expandHomeDir('~/ark-core'), + new: expandHomeDir('~/core'), + }, + cache: { + old: expandHomeDir('~/.ark/database'), + new: corePaths.cache, + }, + config: { + old: expandHomeDir('~/.ark/config'), + new: corePaths.config, + }, + data: { + old: expandHomeDir('~/.ark'), + new: corePaths.data, + }, + log: { + old: expandHomeDir('~/.ark/logs'), + new: corePaths.log, + }, + temp: { + old: expandHomeDir('~/.ark/temp'), + new: corePaths.temp, + }, +} + +// TODO: move config directory +// TODO: move .env file directory +// TODO: move database directory +// TODO: move logs directory +// TODO: update configuration files +// TODO: validate configuration files From f437d89858c67ba4882cc867be330b22ae8d9c13 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 09:47:03 +0200 Subject: [PATCH 02/47] feat: move directories --- upgrade.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/upgrade.js b/upgrade.js index 855a9ec695..bf89e7ffd4 100644 --- a/upgrade.js +++ b/upgrade.js @@ -1,5 +1,8 @@ const envPaths = require("env-paths"); const expandHomeDir = require('expand-home-dir'); +const fs = require('fs-extra'); + +// TODO: kill & delete all pm2 processes // Paths const corePaths = envPaths("ark", { suffix: "core" }); @@ -17,23 +20,20 @@ const paths = { old: expandHomeDir('~/.ark/config'), new: corePaths.config, }, - data: { - old: expandHomeDir('~/.ark'), - new: corePaths.data, - }, log: { old: expandHomeDir('~/.ark/logs'), new: corePaths.log, }, - temp: { - old: expandHomeDir('~/.ark/temp'), - new: corePaths.temp, + data: { + old: expandHomeDir('~/.ark'), + new: corePaths.data, }, } -// TODO: move config directory -// TODO: move .env file directory -// TODO: move database directory -// TODO: move logs directory +// Move files & directories +for (const value of Object.values(paths)) { + fs.moveSync(value.old, value.new) +} + // TODO: update configuration files // TODO: validate configuration files From 4821dbc0c8b3834b91b2921b11569c53544f70ef Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 09:47:41 +0200 Subject: [PATCH 03/47] fix: ensure that the new directory exists --- upgrade.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/upgrade.js b/upgrade.js index bf89e7ffd4..145af2b259 100644 --- a/upgrade.js +++ b/upgrade.js @@ -32,6 +32,8 @@ const paths = { // Move files & directories for (const value of Object.values(paths)) { + fs.moveSensureDirSyncync(value.new) + fs.moveSync(value.old, value.new) } From 346902623c66d998be74f0be2c003f3374777bca Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 09:48:24 +0200 Subject: [PATCH 04/47] fix: only move if the old directory exists --- upgrade.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/upgrade.js b/upgrade.js index 145af2b259..e4d6384e34 100644 --- a/upgrade.js +++ b/upgrade.js @@ -32,9 +32,11 @@ const paths = { // Move files & directories for (const value of Object.values(paths)) { - fs.moveSensureDirSyncync(value.new) + if (fs.existsSync(value.old)) { + fs.ensureDirSync(value.new) - fs.moveSync(value.old, value.new) + fs.moveSync(value.old, value.new) + } } // TODO: update configuration files From 333535e68f658e130a1f3990666814e920ec5378 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 09:55:48 +0200 Subject: [PATCH 05/47] feat: delete pm2 processes --- upgrade.js | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/upgrade.js b/upgrade.js index e4d6384e34..ac57aaf9dd 100644 --- a/upgrade.js +++ b/upgrade.js @@ -1,11 +1,35 @@ const envPaths = require("env-paths"); const expandHomeDir = require('expand-home-dir'); const fs = require('fs-extra'); +const pm2 = require('pm2'); -// TODO: kill & delete all pm2 processes +// Delete all pm2 processes created by commander +function deletePM2(name) { + pm2.connect(connectionError => { + if (connectionError) { + console.error(connectionError); + process.exit(2); + } + + pm2.delete(processName, deleteError => { + pm2.disconnect(); + + if (deleteError) { + throw deleteError; + } + }); + }); +} + +deletePM2('ark-core-relay'); +deletePM2('ark-core-forger'); +deletePM2('core-relay'); +deletePM2('core-forger'); // Paths -const corePaths = envPaths("ark", { suffix: "core" }); +const corePaths = envPaths("ark", { + suffix: "core" +}); const paths = { core: { @@ -35,7 +59,9 @@ for (const value of Object.values(paths)) { if (fs.existsSync(value.old)) { fs.ensureDirSync(value.new) - fs.moveSync(value.old, value.new) + fs.moveSync(value.old, value.new, { + overwrite: true + }); } } From 1311927d1411dc041b2765c8dd042141a39c2214 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 09:58:54 +0200 Subject: [PATCH 06/47] chore: add pm2 as dev dependency --- package.json | 1 + yarn.lock | 481 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 458 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 00832ffbaa..536231ce1c 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "lerna": "^3.6.0", "lint-staged": "^8.1.0", "npm-check-updates": "^2.15.0", + "pm2": "^3.2.9", "prettier": "^1.15.3", "regenerator-runtime": "^0.13.1", "request-promise": "^4.2.2", diff --git a/yarn.lock b/yarn.lock index b20da5820d..87efad513a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1277,6 +1277,60 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@pm2/agent-node@^1.0.9": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@pm2/agent-node/-/agent-node-1.1.3.tgz#4603dd808bf8f8c4890d023b758d1232bdfc40a6" + integrity sha512-xOQUbqnKkwWIDfzH1PMVwCQxur1gK/asCSvCHnE8u1O1FC/93FAq3m0Xc5ckFApibSwZYDRqUikE8yC/WnCN6A== + dependencies: + debug "^3.1.0" + eventemitter2 "^5.0.1" + proxy-agent "^3.0.3" + ws "^6.0.0" + +"@pm2/agent@^0.5.22": + version "0.5.22" + resolved "https://registry.yarnpkg.com/@pm2/agent/-/agent-0.5.22.tgz#df1558b9fd077ae0b6e9cc3c6f13449746d063d6" + integrity sha512-f858kJafdzRwl00xUlbrw/bBSY3P7jubNFCkxQ2CVACW/XU40GRz2aWmddgR7lrIPrnQQWUq3fr/ENEJnnSZ7w== + dependencies: + async "^2.6.0" + chalk "^2.3.2" + eventemitter2 "^5.0.1" + fclone "^1.0.11" + moment "^2.21.0" + nssocket "^0.6.0" + pm2-axon "^3.2.0" + pm2-axon-rpc "^0.5.0" + semver "^5.5.0" + ws "^5.1.0" + +"@pm2/io@~2.4.2": + version "2.4.7" + resolved "https://registry.yarnpkg.com/@pm2/io/-/io-2.4.7.tgz#153ce2a3827a115c8437315d9da71aae36fc5558" + integrity sha512-01IQBBeIFUO6Gs3mVDfoDYcZ3cbaN66gPo6guVQTfhiTv1+ftQlSuZH64dO+41wKbUYgDrXnIvFHR99bnpqj8Q== + dependencies: + "@pm2/agent-node" "^1.0.9" + async "^2.6.1" + debug "3.1.0" + deep-metrics "0.0.2" + deepmerge "2.1.1" + event-loop-inspector "^1.2.0" + json-stringify-safe "5.0.1" + semver "5.5.0" + signal-exit "3.0.2" + tslib "1.9.3" + vxx "1.2.2" + +"@pm2/js-api@^0.5.43": + version "0.5.44" + resolved "https://registry.yarnpkg.com/@pm2/js-api/-/js-api-0.5.44.tgz#ff3b23dab7ca3b763f0df0fa146747a3a1e860d8" + integrity sha512-1zwM2E/ueo3gu/1bbHTJjf4EmtPVtg6rzkWbuwnOgLHOVXK6QGxVTfkU+hX6k9xY0KvnmontkqnrvsDKXRpCCA== + dependencies: + async "^2.4.1" + axios "^0.16.2" + debug "^2.6.8" + eventemitter2 "^4.1.0" + ws "^3.0.0" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -2527,6 +2581,18 @@ ammo@3.x.x: dependencies: hoek "6.x.x" +amp-message@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/amp-message/-/amp-message-0.1.2.tgz#a78f1c98995087ad36192a41298e4db49e3dfc45" + integrity sha1-p48cmJlQh602GSpBKY5NtJ49/EU= + dependencies: + amp "0.3.1" + +amp@0.3.1, amp@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/amp/-/amp-0.3.1.tgz#6adf8d58a74f361e82c1fa8d389c079e139fc47d" + integrity sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0= + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -2937,6 +3003,14 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + async-retry@^1.2.1: version "1.2.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" @@ -2944,18 +3018,18 @@ async-retry@^1.2.1: dependencies: retry "0.12.0" -async@^1.4.0, async@~1.5: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -async@^2.1.4, async@^2.5.0, async@^2.6.0, async@^2.6.1: +async@2.6.1, async@^2.1.4, async@^2.4.1, async@^2.5.0, async@^2.6, async@^2.6.0, async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== dependencies: lodash "^4.17.10" +async@^1.4.0, async@~1.5: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2996,6 +3070,14 @@ axios-mock-adapter@^1.15.0: dependencies: deep-equal "^1.0.1" +axios@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.16.2.tgz#ba4f92f17167dfbab40983785454b9ac149c3c6d" + integrity sha1-uk+S8XFn37q0CYN4VFS5rBScPG0= + dependencies: + follow-redirects "^1.2.3" + is-buffer "^1.1.5" + axios@^0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" @@ -3305,6 +3387,11 @@ bl@~1.1.2: dependencies: readable-stream "~2.0.5" +blessed@^0.1.81: + version "0.1.81" + resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" + integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk= + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -3322,6 +3409,11 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.3, bn.js@^4.11.8, bn.js@^4 resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== +bodec@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bodec/-/bodec-0.1.0.tgz#bc851555430f23c9f7650a75ef64c6a94c3418cc" + integrity sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw= + body-parser@1.18.3, body-parser@^1.18.3: version "1.18.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" @@ -3811,7 +3903,12 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.0.2: +charm@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/charm/-/charm-0.1.2.tgz#06c21eed1a1b06aeb67553cdc53e23274bac2296" + integrity sha1-BsIe7RobBq62dVPNxT4jJ0usIpY= + +chokidar@^2.0.2, chokidar@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== @@ -3901,6 +3998,13 @@ cli-progress@^2.1.1: colors "^1.1.2" string-width "^2.1.1" +cli-table-redemption@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli-table-redemption/-/cli-table-redemption-1.0.1.tgz#0359d8c34df74980029d76dff071a05a127c4fdd" + integrity sha512-SjVCciRyx01I4azo2K2rcc0NP/wOceXGzG1ZpYkEulbbIxDA/5YWv0oxG2HtQ4v8zPC6bgbRI7SbNaTZCxMNkg== + dependencies: + chalk "^1.1.3" + cli-table3@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -4100,6 +4204,11 @@ commander@*, commander@2.19.0, commander@^2.12.1, commander@^2.14.1, commander@^ resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -4192,6 +4301,14 @@ content@4.x.x: dependencies: boom "7.x.x" +continuation-local-storage@^3.1.4: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + conventional-changelog-angular@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz#39d945635e03b6d0c9d4078b1df74e06163dc66a" @@ -4415,6 +4532,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cron@^1.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.6.0.tgz#15f92c1b5a930c5cdfcd53fe940064fa8ca2e72d" + integrity sha512-8OkXbeK3qF42ndzkIkCo3zfCDg2TxGjQiCQqVE+ZFFHa4vAcw0PdBc5i/6aJ9FppLncyKZmDuZdJ9/uuXEYZaw== + dependencies: + moment-timezone "^0.5.x" + cross-env@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" @@ -4491,6 +4615,11 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" +culvert@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/culvert/-/culvert-0.1.2.tgz#9502f5f0154a2d5a22a023e79f71cc936fa6ef6f" + integrity sha1-lQL18BVKLVoioCPnn3HMk2+m728= + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -4543,7 +4672,7 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-fns@^1.27.2: +date-fns@^1.27.2, date-fns@^1.29.0: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== @@ -4566,7 +4695,7 @@ dayjs-ext@^2.2.0: fast-plural-rules "^0.0.1" timezone-support "^1.8.0" -debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -4580,7 +4709,7 @@ debug@3.1.0, debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3, debug@^3.1.0, debug@^3.2.5: +debug@^3, debug@^3.0, debug@^3.1, debug@^3.1.0, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -4644,11 +4773,23 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-metrics@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/deep-metrics/-/deep-metrics-0.0.2.tgz#180900dea82a2c4b976be2b7684914748f5a0931" + integrity sha512-2b4DO8YcPWSHrZ7XW9YjjJajmflw2EhKUMmeriZmGYsC8XvCWIyztsEjCQ3f5kIQO+ItzBK7BqVjSWlFZQtONQ== + dependencies: + semver "^5.3.0" + deepmerge@*, deepmerge@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.0.0.tgz#ca7903b34bfa1f8c2eab6779280775a411bfc6ba" integrity sha512-a8z8bkgHsAML+uHLqmMS83HHlpy3PvZOOuiTQqaa3wu8ZVg3h0hqHk6aCsGdOnZV2XMM/FRimNGjUh0KCcmHBw== +deepmerge@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768" + integrity sha512-urQxA1smbLZ2cBbXbaYObM1dJ82aJ2H57A1C/Kklfh/ZN1bgH4G/n5KWhdNfOK11W98gqZfyYj7W4frJJRwA2w== + default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" @@ -4987,6 +5128,13 @@ email-validator@^2.0.4: resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed" integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ== +emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -5148,6 +5296,11 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= +escape-regexp@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/escape-regexp/-/escape-regexp-0.0.1.tgz#f44bda12d45bbdf9cb7f862ee7e4827b3dd32254" + integrity sha1-9EvaEtRbvfnLf4Yu5+SCez3TIlQ= + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -5210,6 +5363,26 @@ event-lite@^0.1.1: resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.2.tgz#838a3e0fdddef8cc90f128006c8e55a4e4e4c11b" integrity sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g== +event-loop-inspector@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/event-loop-inspector/-/event-loop-inspector-1.2.2.tgz#e56ed73f50a8b0b9193cc36be877fea18641aceb" + integrity sha512-v7OqIPmO0jqpmSH4Uc6IrY/H6lOidYzrXHE8vPHLDDOfV1Pw+yu+KEIE/AWnoFheWYlunZbxzKpZBAezVlrU9g== + +eventemitter2@5.0.1, eventemitter2@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" + integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= + +eventemitter2@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-4.1.2.tgz#0e1a8477af821a6ef3995b311bf74c23a5247f15" + integrity sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU= + +eventemitter2@~0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= + eventemitter3@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" @@ -5387,7 +5560,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@3, extend@~3.0.0, extend@~3.0.2: +extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -5500,6 +5673,11 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fclone@1.0.11, fclone@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fclone/-/fclone-1.0.11.tgz#10e85da38bfea7fc599341c296ee1d77266ee640" + integrity sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA= + fecha@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" @@ -5647,6 +5825,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +follow-redirects@^1.2.3: + version "1.6.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.6.1.tgz#514973c44b5757368bad8bddfe52f81f015c94cb" + integrity sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.3.0: version "1.5.10" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" @@ -5972,6 +6157,11 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-node-fs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/git-node-fs/-/git-node-fs-1.0.0.tgz#49b215e242ebe43aa4c7561bbba499521752080f" + integrity sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8= + git-raw-commits@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" @@ -5999,6 +6189,11 @@ git-semver-tags@^2.0.2: meow "^4.0.0" semver "^5.5.0" +git-sha1@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/git-sha1/-/git-sha1-0.1.2.tgz#599ac192b71875825e13a445f3a6e05118c2f745" + integrity sha1-WZrBkrcYdYJeE6RF86bgURjC90U= + gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" @@ -6006,6 +6201,10 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +"gkt@https://tgz.pm2.io/gkt-1.0.0.tgz": + version "1.0.0" + resolved "https://tgz.pm2.io/gkt-1.0.0.tgz#405502b007f319c3f47175c4474527300f2ab5ad" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -7246,6 +7445,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" + integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -7764,6 +7968,16 @@ joi@^10.6.0: items "2.x.x" topo "2.x.x" +js-git@^0.7.8: + version "0.7.8" + resolved "https://registry.yarnpkg.com/js-git/-/js-git-0.7.8.tgz#52fa655ab61877d6f1079efc6534b554f31e5444" + integrity sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ= + dependencies: + bodec "^0.1.0" + culvert "^0.1.2" + git-sha1 "^0.1.2" + pako "^0.2.5" + js-levenshtein@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" @@ -7873,7 +8087,7 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@5.0.x, json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@5.0.1, json-stringify-safe@5.0.x, json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -8002,6 +8216,11 @@ lazy-cache@^0.2.3: resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= +lazy@~1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/lazy/-/lazy-1.0.11.tgz#daa068206282542c088288e975c297c1ae77b690" + integrity sha1-2qBoIGKCVCwIgojpdcKXwa53tpA= + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -8372,6 +8591,11 @@ lodash.fill@^3.4.0: resolved "https://registry.yarnpkg.com/lodash.fill/-/lodash.fill-3.4.0.tgz#a3c74ae640d053adf0dc2079f8720788e8bfef85" integrity sha1-o8dK5kDQU63w3CB5+HIHiOi/74U= +lodash.findindex@^4.4.0, lodash.findindex@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.findindex/-/lodash.findindex-4.6.0.tgz#a3245dee61fb9b6e0624b535125624bb69c11106" + integrity sha1-oyRd7mH7m24GJLU1ElYku2nBEQY= + lodash.first@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash.first/-/lodash.first-3.0.0.tgz#5dae180d7f818ee65fc5b210b104a7bbef98a16a" @@ -8382,6 +8606,11 @@ lodash.flatten@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.foreach@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -8402,7 +8631,7 @@ lodash.isempty@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= -lodash.isequal@^4.5.0: +lodash.isequal@^4.0.0, lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= @@ -8427,6 +8656,11 @@ lodash.last@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.last/-/lodash.last-3.0.0.tgz#242f663112dd4c6e63728c60a3c909d1bdadbd4c" integrity sha1-JC9mMRLdTG5jcoxgo8kJ0b2tvUw= +lodash.merge@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" + integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== + lodash.orderby@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.orderby/-/lodash.orderby-4.6.0.tgz#e697f04ce5d78522f54d9338b32b81a3393e4eb3" @@ -8828,7 +9062,7 @@ merge@^1.2.0: resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== -methods@~1.1.2: +methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -9001,7 +9235,7 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -9013,7 +9247,7 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moment-timezone@^0.5.14: +moment-timezone@^0.5.14, moment-timezone@^0.5.x: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" integrity sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w== @@ -9025,7 +9259,7 @@ moment@2.20.x: resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" integrity sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg== -"moment@>= 2.9.0", moment@>=2.14.0, moment@^2.11.2, moment@^2.20.0: +"moment@>= 2.9.0", moment@>=2.14.0, moment@^2.11.2, moment@^2.20.0, moment@^2.21.0, moment@^2.22.2: version "2.23.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.23.0.tgz#759ea491ac97d54bac5ad776996e2a58cc1bc225" integrity sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA== @@ -9660,6 +9894,14 @@ npmlog@~4.0.0: gauge "~2.7.1" set-blocking "~2.0.0" +nssocket@0.6.0, nssocket@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/nssocket/-/nssocket-0.6.0.tgz#59f96f6ff321566f33c70f7dbeeecdfdc07154fa" + integrity sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo= + dependencies: + eventemitter2 "~0.4.14" + lazy "~1.0.11" + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -9994,6 +10236,20 @@ pac-proxy-agent@^2.0.1: raw-body "^2.2.0" socks-proxy-agent "^3.0.0" +pac-proxy-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz#11d578b72a164ad74bf9d5bac9ff462a38282432" + integrity sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q== + dependencies: + agent-base "^4.2.0" + debug "^3.1.0" + get-uri "^2.0.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + pac-resolver "^3.0.0" + raw-body "^2.2.0" + socks-proxy-agent "^4.0.1" + pac-resolver@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" @@ -10053,6 +10309,11 @@ pacote@^9.2.3: unique-filename "^1.1.1" which "^1.3.1" +pako@^0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= + pako@~1.0.2, pako@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.7.tgz#2473439021b57f1516c82f58be7275ad8ef1bb27" @@ -10300,6 +10561,13 @@ pgpass@1.x: dependencies: split "^1.0.0" +pidusage@^2.0.14: + version "2.0.17" + resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-2.0.17.tgz#6b4a2b4a09026f0e9828f7e5627837e4c0672581" + integrity sha512-N8X5v18rBmlBoArfS83vrnD0gIFyZkXEo7a5pAS2aT0i2OLVymFb2AzVg+v8l/QcXnE1JwZcaXR8daJcoJqtjw== + dependencies: + safe-buffer "^5.1.2" + pify@3.0.0, pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -10382,6 +10650,77 @@ pluralize@^7.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== +pm2-axon-rpc@^0.5.0, pm2-axon-rpc@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/pm2-axon-rpc/-/pm2-axon-rpc-0.5.1.tgz#ad3c43c43811c71f13e5eee2821194d03ceb03fe" + integrity sha512-hT8gN3/j05895QLXpwg+Ws8PjO4AVID6Uf9StWpud9HB2homjc1KKCcI0vg9BNOt56FmrqKDT1NQgheIz35+sA== + dependencies: + debug "^3.0" + +pm2-axon@3.3.0, pm2-axon@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/pm2-axon/-/pm2-axon-3.3.0.tgz#a9badfdb8e083fbd5d7d24317b4a21eb708f0735" + integrity sha512-dAFlFYRuFbFjX7oAk41zT+dx86EuaFX/TgOp5QpUKRKwxb946IM6ydnoH5sSTkdI2pHSVZ+3Am8n/l0ocr7jdQ== + dependencies: + amp "~0.3.1" + amp-message "~0.1.1" + debug "^3.0" + escape-regexp "0.0.1" + +pm2-deploy@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/pm2-deploy/-/pm2-deploy-0.4.0.tgz#d543076919f7776c57eb75841a4320f547287661" + integrity sha512-3BdCghcGwMKwl3ffHZhc+j5JY5dldH9nq8m/I9W5wehJuSRZIyO96VOgKTMv3hYp7Yk5E+2lRGm8WFNlp65vOA== + dependencies: + async "^2.6" + tv4 "^1.3" + +pm2-multimeter@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz#1a1e55153d41a05534cea23cfe860abaa0eb4ace" + integrity sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4= + dependencies: + charm "~0.1.1" + +pm2@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/pm2/-/pm2-3.2.9.tgz#6e0e009355fa089007689d97c6565f6b3e341476" + integrity sha512-dlNIwmbsRe+Ttculrjj776ILtP5rjDsykxCOhpZB+ioCsnOmRUGJHrWCdmoOjcyHgA5tvE/X0s9M1J/hYsRKGQ== + dependencies: + "@pm2/agent" "^0.5.22" + "@pm2/io" "~2.4.2" + "@pm2/js-api" "^0.5.43" + async "^2.6.1" + blessed "^0.1.81" + chalk "^2.4.1" + chokidar "^2.0.4" + cli-table-redemption "^1.0.0" + commander "2.15.1" + cron "^1.3" + date-fns "^1.29.0" + debug "^3.1" + eventemitter2 "5.0.1" + fclone "1.0.11" + mkdirp "0.5.1" + moment "^2.22.2" + needle "^2.2.1" + nssocket "0.6.0" + pidusage "^2.0.14" + pm2-axon "3.3.0" + pm2-axon-rpc "^0.5.1" + pm2-deploy "^0.4.0" + pm2-multimeter "^0.1.2" + promptly "^2" + semver "^5.5" + shelljs "~0.8.2" + source-map-support "^0.5.6" + sprintf-js "1.1.1" + v8-compile-cache "^2.0.0" + vizion "~2.0.2" + yamljs "^0.3.0" + optionalDependencies: + gkt "https://tgz.pm2.io/gkt-1.0.0.tgz" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -10520,6 +10859,13 @@ promise-retry@^1.1.1: dependencies: asap "~2.0.3" +promptly@^2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/promptly/-/promptly-2.2.0.tgz#2a13fa063688a2a5983b161fff0108a07d26fc74" + integrity sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ= + dependencies: + read "^1.0.4" + prompts@^0.1.9: version "0.1.14" resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" @@ -10588,6 +10934,20 @@ proxy-agent@^2.0.0: proxy-from-env "^1.0.0" socks-proxy-agent "^3.0.0" +proxy-agent@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.0.3.tgz#1c1a33db60ef5f2e9e35b876fd63c2bc681c611d" + integrity sha512-PXVVVuH9tiQuxQltFJVSnXWuDtNr+8aNBP6XVDDCDiUuDN8eRCm+ii4/mFWmXWEA0w8jjJSlePa4LXlM4jIzNA== + dependencies: + agent-base "^4.2.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" + lru-cache "^4.1.2" + pac-proxy-agent "^3.0.0" + proxy-from-env "^1.0.0" + socks-proxy-agent "^4.0.1" + proxy-from-env@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" @@ -10888,7 +11248,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -read@1, read@~1.0.1, read@~1.0.7: +read@1, read@^1.0.4, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -11463,6 +11823,11 @@ semver@4.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c= +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + semver@^4.1.0: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -11603,7 +11968,7 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@^0.8.2: +shelljs@^0.8.2, shelljs@~0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== @@ -11617,6 +11982,11 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +shimmer@^1.0.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + shimmer@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.0.tgz#f966f7555789763e74d8841193685a5e78736665" @@ -11630,7 +12000,7 @@ shot@4.x.x: hoek "6.x.x" joi "14.x.x" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@3.0.2, signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= @@ -11941,7 +12311,7 @@ socks-proxy-agent@^3.0.0: agent-base "^4.1.0" socks "^1.1.10" -socks-proxy-agent@^4.0.0: +socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== @@ -12102,6 +12472,11 @@ split@^1.0.0: dependencies: through "2" +sprintf-js@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" + integrity sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw= + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -12813,7 +13188,7 @@ ts-loader@^5.3.1: micromatch "^3.1.4" semver "^5.0.1" -tslib@^1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@1.9.3, tslib@^1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== @@ -12865,6 +13240,11 @@ tunnel-agent@~0.4.1: resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= +tv4@^1.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" + integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -12953,6 +13333,11 @@ uid-number@0.0.6: resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + umask@^1.1.0, umask@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" @@ -13195,7 +13580,7 @@ uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -v8-compile-cache@^2.0.2: +v8-compile-cache@^2.0.0, v8-compile-cache@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" integrity sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw== @@ -13258,6 +13643,20 @@ vision@^5.4.4: items "2.x.x" joi "14.x.x" +vizion@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/vizion/-/vizion-2.0.2.tgz#fcc263f41a4543b02b655c1b6c4ff1406726d2fa" + integrity sha512-UGDB/UdC1iyPkwyQaI9AFMwKcluQyD4FleEXObrlu254MEf16MV8l+AZdpFErY/iVKZVWlQ+OgJlVVJIdeMUYg== + dependencies: + async "2.6.1" + git-node-fs "^1.0.0" + ini "^1.3.4" + js-git "^0.7.8" + lodash.findindex "^4.6.0" + lodash.foreach "^4.5.0" + lodash.get "^4.4.2" + lodash.last "^3.0.0" + vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" @@ -13270,6 +13669,23 @@ vscode-languageserver-types@^3.5.0: resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4" integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA== +vxx@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/vxx/-/vxx-1.2.2.tgz#741fb51c6f11d3383da6f9b92018a5d7ba807611" + integrity sha1-dB+1HG8R0zg9pvm5IBil17qAdhE= + dependencies: + continuation-local-storage "^3.1.4" + debug "^2.6.3" + extend "^3.0.0" + is "^3.2.0" + lodash.findindex "^4.4.0" + lodash.isequal "^4.0.0" + lodash.merge "^4.6.0" + methods "^1.1.1" + semver "^5.0.1" + shimmer "^1.0.0" + uuid "^3.0.1" + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -13596,7 +14012,16 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" -ws@^5.2.0: +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^5.1.0, ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== @@ -13673,6 +14098,14 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yamljs@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== + dependencies: + argparse "^1.0.7" + glob "^7.0.5" + yargs-parser@10.x, yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" From 027eb458d7ac4c44680f55f9e4ca358e867702ad Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 10:21:02 +0200 Subject: [PATCH 07/47] feat: remove old or temp files --- upgrade.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/upgrade.js b/upgrade.js index ac57aaf9dd..b6664088a6 100644 --- a/upgrade.js +++ b/upgrade.js @@ -19,7 +19,7 @@ function deletePM2(name) { } }); }); -} +}; deletePM2('ark-core-relay'); deletePM2('ark-core-forger'); @@ -52,18 +52,26 @@ const paths = { old: expandHomeDir('~/.ark'), new: corePaths.data, }, -} +}; // Move files & directories for (const value of Object.values(paths)) { if (fs.existsSync(value.old)) { - fs.ensureDirSync(value.new) + fs.ensureDirSync(value.new); fs.moveSync(value.old, value.new, { overwrite: true }); + + fs.removeSync(value.old); } } +// Remove old or temp files +fs.removeSync(`${paths.config.old}/peers_backup.json`); +fs.removeSync(`${paths.config.old}/network.json`); +fs.removeSync(`${paths.config.old}/genesisBlock.json`); + +// TODO: ensure all files core needs exist // TODO: update configuration files // TODO: validate configuration files From e6d8773fdf38429b9f28d5d694edbebbb7f368f1 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 10:25:55 +0200 Subject: [PATCH 08/47] chore: change some file locations --- packages/core-container/src/environment.ts | 2 +- packages/core-p2p/src/monitor.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core-container/src/environment.ts b/packages/core-container/src/environment.ts index 04f8231ed2..7dd8aa9811 100644 --- a/packages/core-container/src/environment.ts +++ b/packages/core-container/src/environment.ts @@ -54,7 +54,7 @@ export class Environment { return; } - const envPath = expandHomeDir(`${process.env.CORE_PATH_DATA}/.env`); + const envPath = expandHomeDir(`${process.env.CORE_PATH_CONFIG}/.env`); if (existsSync(envPath)) { const env = require("envfile").parseFileSync(envPath); diff --git a/packages/core-p2p/src/monitor.ts b/packages/core-p2p/src/monitor.ts index a8b6a7f84f..fabb659bdb 100644 --- a/packages/core-p2p/src/monitor.ts +++ b/packages/core-p2p/src/monitor.ts @@ -709,7 +709,7 @@ export class Monitor implements P2P.IMonitor { })); try { - fs.writeFileSync(`${process.env.CORE_PATH_CONFIG}/peers_backup.json`, JSON.stringify(peers, null, 2)); + fs.writeFileSync(`${process.env.CORE_PATH_CACHE}/peers_backup.json`, JSON.stringify(peers, null, 2)); } catch (err) { logger.error(`Failed to dump the peer list because of "${err.message}"`); } From fe39b6ba9c5dde0f907b8034cf4f9a88d10a37e8 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 12:18:24 +0200 Subject: [PATCH 09/47] feat: ensure that required files exist --- upgrade.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/upgrade.js b/upgrade.js index b6664088a6..3631d47510 100644 --- a/upgrade.js +++ b/upgrade.js @@ -48,6 +48,10 @@ const paths = { old: expandHomeDir('~/.ark/logs'), new: corePaths.log, }, + temp: { + old: expandHomeDir('~/.ark/temp'), + new: corePaths.temp, + }, data: { old: expandHomeDir('~/.ark'), new: corePaths.data, @@ -72,6 +76,21 @@ fs.removeSync(`${paths.config.old}/peers_backup.json`); fs.removeSync(`${paths.config.old}/network.json`); fs.removeSync(`${paths.config.old}/genesisBlock.json`); -// TODO: ensure all files core needs exist +// Ensure that all files core needs exist +const requiredFiles = [ + `${paths.config.new}/.env`, + `${paths.config.new}/delegates.json`, + `${paths.config.new}/peers.json`, + `${paths.config.new}/plugins.json`, +]; + +for (const file of requiredFiles) { + if (!fs.existsSync(file)) { + console.error(`File ${file} does not exist.`); + + // TODO: copy or create file or directory if it doesn't exist + } +} + // TODO: update configuration files // TODO: validate configuration files From 5f1c173ab25091d98f5c1b6b0087780ff843ae5f Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 12:35:34 +0200 Subject: [PATCH 10/47] fix: delete files in old and new folders to avoid issues --- packages/core-p2p/src/monitor.ts | 2 +- upgrade.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/core-p2p/src/monitor.ts b/packages/core-p2p/src/monitor.ts index fabb659bdb..a8b6a7f84f 100644 --- a/packages/core-p2p/src/monitor.ts +++ b/packages/core-p2p/src/monitor.ts @@ -709,7 +709,7 @@ export class Monitor implements P2P.IMonitor { })); try { - fs.writeFileSync(`${process.env.CORE_PATH_CACHE}/peers_backup.json`, JSON.stringify(peers, null, 2)); + fs.writeFileSync(`${process.env.CORE_PATH_CONFIG}/peers_backup.json`, JSON.stringify(peers, null, 2)); } catch (err) { logger.error(`Failed to dump the peer list because of "${err.message}"`); } diff --git a/upgrade.js b/upgrade.js index 3631d47510..d6eceeee4c 100644 --- a/upgrade.js +++ b/upgrade.js @@ -75,6 +75,9 @@ for (const value of Object.values(paths)) { fs.removeSync(`${paths.config.old}/peers_backup.json`); fs.removeSync(`${paths.config.old}/network.json`); fs.removeSync(`${paths.config.old}/genesisBlock.json`); +fs.removeSync(`${paths.config.new}/peers_backup.json`); +fs.removeSync(`${paths.config.new}/network.json`); +fs.removeSync(`${paths.config.new}/genesisBlock.json`); // Ensure that all files core needs exist const requiredFiles = [ From b592378426a33973e473a7b1ab2aaf37fd97390e Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 13:02:04 +0200 Subject: [PATCH 11/47] feat: validate configuration --- upgrade.js | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/upgrade.js b/upgrade.js index d6eceeee4c..23c5d44f13 100644 --- a/upgrade.js +++ b/upgrade.js @@ -1,6 +1,7 @@ const envPaths = require("env-paths"); const expandHomeDir = require('expand-home-dir'); const fs = require('fs-extra'); +const Joi = require('Joi'); const pm2 = require('pm2'); // Delete all pm2 processes created by commander @@ -74,10 +75,10 @@ for (const value of Object.values(paths)) { // Remove old or temp files fs.removeSync(`${paths.config.old}/peers_backup.json`); fs.removeSync(`${paths.config.old}/network.json`); -fs.removeSync(`${paths.config.old}/genesisBlock.json`); +// fs.removeSync(`${paths.config.old}/genesisBlock.json`); fs.removeSync(`${paths.config.new}/peers_backup.json`); fs.removeSync(`${paths.config.new}/network.json`); -fs.removeSync(`${paths.config.new}/genesisBlock.json`); +// fs.removeSync(`${paths.config.new}/genesisBlock.json`); // Ensure that all files core needs exist const requiredFiles = [ @@ -96,4 +97,25 @@ for (const file of requiredFiles) { } // TODO: update configuration files -// TODO: validate configuration files + +// Validate configuration files +const { error } = Joi.validate({ + delegates: require(`${paths.config.new}/delegates.json`), + peers: require(`${paths.config.new}/peers.json`), + peers_backup: require(`${paths.config.new}/peers_backup.json`), + plugins: require(`${paths.config.new}/plugins.json`), + genesisBlock: require(`${paths.config.new}/genesisBlock.json`), +}, Joi.object({ + delegates: Joi.object({ + secrets: Joi.array().items(Joi.string()), + bip38: Joi.string(), + }), + peers: Joi.object().required(), + peers_backup: Joi.array().items(Joi.object()), + plugins: Joi.object().required(), + genesisBlock: Joi.object().required(), +}).unknown()); + +if (error) { + console.log(error); +} From 08e992603cb5b0f304fba51d7b28f090a8446af5 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 13:03:08 +0200 Subject: [PATCH 12/47] fix: plugins config is javascript --- upgrade.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/upgrade.js b/upgrade.js index 23c5d44f13..bdfddc2ad6 100644 --- a/upgrade.js +++ b/upgrade.js @@ -85,7 +85,7 @@ const requiredFiles = [ `${paths.config.new}/.env`, `${paths.config.new}/delegates.json`, `${paths.config.new}/peers.json`, - `${paths.config.new}/plugins.json`, + `${paths.config.new}/plugins.js`, ]; for (const file of requiredFiles) { @@ -103,7 +103,7 @@ const { error } = Joi.validate({ delegates: require(`${paths.config.new}/delegates.json`), peers: require(`${paths.config.new}/peers.json`), peers_backup: require(`${paths.config.new}/peers_backup.json`), - plugins: require(`${paths.config.new}/plugins.json`), + plugins: require(`${paths.config.new}/plugins.js`), genesisBlock: require(`${paths.config.new}/genesisBlock.json`), }, Joi.object({ delegates: Joi.object({ From f8e1d101d214d8e087d29b4364cf174129d8660a Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 13:19:41 +0200 Subject: [PATCH 13/47] fix: wrong var name --- upgrade.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upgrade.js b/upgrade.js index bdfddc2ad6..93f2703114 100644 --- a/upgrade.js +++ b/upgrade.js @@ -5,7 +5,7 @@ const Joi = require('Joi'); const pm2 = require('pm2'); // Delete all pm2 processes created by commander -function deletePM2(name) { +function deletePM2(processName) { pm2.connect(connectionError => { if (connectionError) { console.error(connectionError); From 2ed0981e861ec19424faf537bf0755343da01d9f Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 13:23:48 +0200 Subject: [PATCH 14/47] feat: update the delegates configuration --- upgrade.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/upgrade.js b/upgrade.js index 93f2703114..6f6579ec59 100644 --- a/upgrade.js +++ b/upgrade.js @@ -96,7 +96,13 @@ for (const file of requiredFiles) { } } -// TODO: update configuration files +// Update configuration files +const configDelegates = require(`${paths.config.new}/delegates.json`) + +delete configDelegates.dynamicFee +delete configDelegates.dynamicFees + +fs.writeFileSync(`${paths.config.new}/delegates.json`, JSON.stringify(configDelegates, null, 4)); // Validate configuration files const { error } = Joi.validate({ From 2360d2b9badf4932d21bb023a5e0624935c0a8f3 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Fri, 18 Jan 2019 14:24:42 +0200 Subject: [PATCH 15/47] feat: update env and plugin config --- upgrade.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/upgrade.js b/upgrade.js index 6f6579ec59..1ff074820e 100644 --- a/upgrade.js +++ b/upgrade.js @@ -1,4 +1,4 @@ -const envPaths = require("env-paths"); +const envPaths = require('env-paths'); const expandHomeDir = require('expand-home-dir'); const fs = require('fs-extra'); const Joi = require('Joi'); @@ -28,8 +28,8 @@ deletePM2('core-relay'); deletePM2('core-forger'); // Paths -const corePaths = envPaths("ark", { - suffix: "core" +const corePaths = envPaths('ark', { + suffix: 'core' }); const paths = { @@ -97,13 +97,21 @@ for (const file of requiredFiles) { } // Update configuration files -const configDelegates = require(`${paths.config.new}/delegates.json`) - +let configDelegates = require(`${paths.config.new}/delegates.json`) delete configDelegates.dynamicFee delete configDelegates.dynamicFees - fs.writeFileSync(`${paths.config.new}/delegates.json`, JSON.stringify(configDelegates, null, 4)); +// Update environment file +let configEnv = fs.readFileSync(`${paths.config.new}/.env`); +configEnv = configEnv.replace('ARK_', 'CORE_'); +fs.writeFileSync(`${paths.config.new}/.env`, configEnv); + +// Update environment file +let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`); +configPlugins = configPlugins.replace('ARK_', 'CORE_'); +fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); + // Validate configuration files const { error } = Joi.validate({ delegates: require(`${paths.config.new}/delegates.json`), From 3fafe2f74be34ddbf8fc6f963fd63271112a2a23 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 21 Jan 2019 08:38:53 +0200 Subject: [PATCH 16/47] chore: add upgrade command --- package.json | 1 + upgrade.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 536231ce1c..667b4393da 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "The packages that make up the Ark Core", "scripts": { "lerna": "./node_modules/lerna/cli.js", + "upgrade": "node ./upgrade.js", "setup": "yarn && yarn clean && yarn bootstrap && yarn build", "bootstrap": "yarn lerna bootstrap", "clean": "yarn lerna clean --yes", diff --git a/upgrade.js b/upgrade.js index 1ff074820e..5450c9592d 100644 --- a/upgrade.js +++ b/upgrade.js @@ -107,11 +107,13 @@ let configEnv = fs.readFileSync(`${paths.config.new}/.env`); configEnv = configEnv.replace('ARK_', 'CORE_'); fs.writeFileSync(`${paths.config.new}/.env`, configEnv); -// Update environment file +// Update plugins file let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`); configPlugins = configPlugins.replace('ARK_', 'CORE_'); fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); +// TODO: turn plugins.js into plugins.json + // Validate configuration files const { error } = Joi.validate({ delegates: require(`${paths.config.new}/delegates.json`), From ca7b7b202ca3b37ef487b8695a620aedfa5cb534 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 21 Jan 2019 13:02:23 +0200 Subject: [PATCH 17/47] refactor: prompt the user for input to ask for install and config paths --- package.json | 1 + upgrade.js | 236 ++++++++++++++++++++++++++++----------------------- yarn.lock | 18 ++++ 3 files changed, 148 insertions(+), 107 deletions(-) diff --git a/package.json b/package.json index 667b4393da..b743d60468 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "npm-check-updates": "^2.15.0", "pm2": "^3.2.9", "prettier": "^1.15.3", + "prompts": "^2.0.1", "regenerator-runtime": "^0.13.1", "request-promise": "^4.2.2", "rimraf": "^2.6.2", diff --git a/upgrade.js b/upgrade.js index 5450c9592d..f3ed4f3892 100644 --- a/upgrade.js +++ b/upgrade.js @@ -1,8 +1,9 @@ const envPaths = require('env-paths'); const expandHomeDir = require('expand-home-dir'); const fs = require('fs-extra'); -const Joi = require('Joi'); +const Joi = require('joi'); const pm2 = require('pm2'); +const prompts = require('prompts'); // Delete all pm2 processes created by commander function deletePM2(processName) { @@ -22,116 +23,137 @@ function deletePM2(processName) { }); }; -deletePM2('ark-core-relay'); -deletePM2('ark-core-forger'); -deletePM2('core-relay'); -deletePM2('core-forger'); - -// Paths -const corePaths = envPaths('ark', { - suffix: 'core' -}); - -const paths = { - core: { - old: expandHomeDir('~/ark-core'), - new: expandHomeDir('~/core'), - }, - cache: { - old: expandHomeDir('~/.ark/database'), - new: corePaths.cache, - }, - config: { - old: expandHomeDir('~/.ark/config'), - new: corePaths.config, - }, - log: { - old: expandHomeDir('~/.ark/logs'), - new: corePaths.log, - }, - temp: { - old: expandHomeDir('~/.ark/temp'), - new: corePaths.temp, - }, - data: { - old: expandHomeDir('~/.ark'), - new: corePaths.data, - }, -}; - -// Move files & directories -for (const value of Object.values(paths)) { - if (fs.existsSync(value.old)) { - fs.ensureDirSync(value.new); +const main = async () => { + const { + corePath, + coreData + } = await prompts([{ + type: 'text', + name: 'corePath', + initial: expandHomeDir('~/ark-core'), + message: 'Where is the installation located at?', + validate: value => fs.existsSync(value) ? true : `${value} does not exist.` + }, { + type: 'text', + name: 'coreData', + initial: expandHomeDir('~/.ark'), + message: 'Where is the configuration located at?', + validate: value => fs.existsSync(value) ? true : `${value} does not exist.` + }]); + + deletePM2('ark-core-relay'); + deletePM2('ark-core-forger'); + deletePM2('core-relay'); + deletePM2('core-forger'); + + // Paths + const corePaths = envPaths('ark', { + suffix: 'core' + }); - fs.moveSync(value.old, value.new, { - overwrite: true - }); + const paths = { + core: { + old: corePath, + new: expandHomeDir('~/core'), + }, + cache: { + old: `${coreData}/database`, + new: corePaths.cache, + }, + config: { + old: `${coreData}/config`, + new: corePaths.config, + }, + log: { + old: `${coreData}/logs`, + new: corePaths.log, + }, + temp: { + old: `${coreData}/temp`, + new: corePaths.temp, + }, + data: { + old: coreData, + new: corePaths.data, + }, + }; + + // Move files & directories + for (const value of Object.values(paths)) { + if (fs.existsSync(value.old)) { + fs.ensureDirSync(value.new); + + fs.moveSync(value.old, value.new, { + overwrite: true + }); + + fs.removeSync(value.old); + } + } - fs.removeSync(value.old); + // Remove old or temp files + fs.removeSync(`${paths.config.old}/peers_backup.json`); + fs.removeSync(`${paths.config.old}/network.json`); + // fs.removeSync(`${paths.config.old}/genesisBlock.json`); + fs.removeSync(`${paths.config.new}/peers_backup.json`); + fs.removeSync(`${paths.config.new}/network.json`); + // fs.removeSync(`${paths.config.new}/genesisBlock.json`); + + // Ensure that all files core needs exist + const requiredFiles = [ + `${paths.config.new}/.env`, + `${paths.config.new}/delegates.json`, + `${paths.config.new}/peers.json`, + `${paths.config.new}/plugins.js`, + ]; + + for (const file of requiredFiles) { + if (!fs.existsSync(file)) { + console.error(`File ${file} does not exist.`); + + // TODO: copy or create file or directory if it doesn't exist + } } -} -// Remove old or temp files -fs.removeSync(`${paths.config.old}/peers_backup.json`); -fs.removeSync(`${paths.config.old}/network.json`); -// fs.removeSync(`${paths.config.old}/genesisBlock.json`); -fs.removeSync(`${paths.config.new}/peers_backup.json`); -fs.removeSync(`${paths.config.new}/network.json`); -// fs.removeSync(`${paths.config.new}/genesisBlock.json`); - -// Ensure that all files core needs exist -const requiredFiles = [ - `${paths.config.new}/.env`, - `${paths.config.new}/delegates.json`, - `${paths.config.new}/peers.json`, - `${paths.config.new}/plugins.js`, -]; - -for (const file of requiredFiles) { - if (!fs.existsSync(file)) { - console.error(`File ${file} does not exist.`); - - // TODO: copy or create file or directory if it doesn't exist + // Update configuration files + let configDelegates = require(`${paths.config.new}/delegates.json`) + delete configDelegates.dynamicFee + delete configDelegates.dynamicFees + fs.writeFileSync(`${paths.config.new}/delegates.json`, JSON.stringify(configDelegates, null, 4)); + + // Update environment file + let configEnv = fs.readFileSync(`${paths.config.new}/.env`); + configEnv = configEnv.replace('ARK_', 'CORE_'); + fs.writeFileSync(`${paths.config.new}/.env`, configEnv); + + // Update plugins file + let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`); + configPlugins = configPlugins.replace('ARK_', 'CORE_'); + fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); + + // TODO: turn plugins.js into plugins.json + + // Validate configuration files + const { error } = Joi.validate({ + delegates: require(`${paths.config.new}/delegates.json`), + peers: require(`${paths.config.new}/peers.json`), + peers_backup: require(`${paths.config.new}/peers_backup.json`), + plugins: require(`${paths.config.new}/plugins.js`), + genesisBlock: require(`${paths.config.new}/genesisBlock.json`), + }, Joi.object({ + delegates: Joi.object({ + secrets: Joi.array().items(Joi.string()), + bip38: Joi.string(), + }), + peers: Joi.object().required(), + peers_backup: Joi.array().items(Joi.object()), + plugins: Joi.object().required(), + genesisBlock: Joi.object().required(), + }).unknown()); + + if (error) { + console.log(error); } } -// Update configuration files -let configDelegates = require(`${paths.config.new}/delegates.json`) -delete configDelegates.dynamicFee -delete configDelegates.dynamicFees -fs.writeFileSync(`${paths.config.new}/delegates.json`, JSON.stringify(configDelegates, null, 4)); - -// Update environment file -let configEnv = fs.readFileSync(`${paths.config.new}/.env`); -configEnv = configEnv.replace('ARK_', 'CORE_'); -fs.writeFileSync(`${paths.config.new}/.env`, configEnv); - -// Update plugins file -let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`); -configPlugins = configPlugins.replace('ARK_', 'CORE_'); -fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); - -// TODO: turn plugins.js into plugins.json - -// Validate configuration files -const { error } = Joi.validate({ - delegates: require(`${paths.config.new}/delegates.json`), - peers: require(`${paths.config.new}/peers.json`), - peers_backup: require(`${paths.config.new}/peers_backup.json`), - plugins: require(`${paths.config.new}/plugins.js`), - genesisBlock: require(`${paths.config.new}/genesisBlock.json`), -}, Joi.object({ - delegates: Joi.object({ - secrets: Joi.array().items(Joi.string()), - bip38: Joi.string(), - }), - peers: Joi.object().required(), - peers_backup: Joi.array().items(Joi.object()), - plugins: Joi.object().required(), - genesisBlock: Joi.object().required(), -}).unknown()); - -if (error) { - console.log(error); -} +main() diff --git a/yarn.lock b/yarn.lock index 87efad513a..9496b92405 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8197,6 +8197,11 @@ kleur@^2.0.1: resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== +kleur@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.1.tgz#4f5b313f5fa315432a400f19a24db78d451ede62" + integrity sha512-P3kRv+B+Ra070ng2VKQqW4qW7gd/v3iD8sy/zOdcYRsfiD+QBokQNOps/AfP6Hr48cBhIIBFWckB9aO+IZhrWg== + kuler@1.0.x: version "1.0.1" resolved "https://registry.yarnpkg.com/kuler/-/kuler-1.0.1.tgz#ef7c784f36c9fb6e16dd3150d152677b2b0228a6" @@ -10874,6 +10879,14 @@ prompts@^0.1.9: kleur "^2.0.1" sisteransi "^0.1.1" +prompts@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.1.tgz#201b3718b4276fb407f037db48c0029d6465245c" + integrity sha512-8lnEOSIGQbgbnO47+13S+H204L8ISogGulyi0/NNEFAQ9D1VMNTrJ9SBX2Ra03V4iPn/zt36HQMndRYkaPoWiQ== + dependencies: + kleur "^3.0.0" + sisteransi "^1.0.0" + promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -12024,6 +12037,11 @@ sisteransi@^0.1.1: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== +sisteransi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" From 28441897249e8ced4f603d49766554fc91642f51 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 21 Jan 2019 13:04:08 +0200 Subject: [PATCH 18/47] fix: expand home dir in case the user enters tilde --- upgrade.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/upgrade.js b/upgrade.js index f3ed4f3892..9994b34be5 100644 --- a/upgrade.js +++ b/upgrade.js @@ -53,28 +53,28 @@ const main = async () => { const paths = { core: { - old: corePath, + old: expandHomeDir(corePath), new: expandHomeDir('~/core'), }, cache: { - old: `${coreData}/database`, - new: corePaths.cache, + old: expandHomeDir(`${coreData}/database`), + new: expandHomeDir(corePaths.cache), }, config: { - old: `${coreData}/config`, - new: corePaths.config, + old: expandHomeDir(`${coreData}/config`), + new: expandHomeDir(corePaths.config), }, log: { - old: `${coreData}/logs`, - new: corePaths.log, + old: expandHomeDir(`${coreData}/logs`), + new: expandHomeDir(corePaths.log), }, temp: { - old: `${coreData}/temp`, - new: corePaths.temp, + old: expandHomeDir(`${coreData}/temp`), + new: expandHomeDir(corePaths.temp), }, data: { - old: coreData, - new: corePaths.data, + old: expandHomeDir(coreData, + new: expandHomeDir(corePaths.data), }, }; From 33ad0d24f6ae0d686b4253f15c63c067d5f147d4 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 21 Jan 2019 13:15:44 +0200 Subject: [PATCH 19/47] fix: ask the user for the network they operate on and copy the correct config --- upgrade.js | 55 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/upgrade.js b/upgrade.js index 9994b34be5..046cee7aab 100644 --- a/upgrade.js +++ b/upgrade.js @@ -26,7 +26,8 @@ function deletePM2(processName) { const main = async () => { const { corePath, - coreData + coreData, + coreNetwork } = await prompts([{ type: 'text', name: 'corePath', @@ -39,10 +40,22 @@ const main = async () => { initial: expandHomeDir('~/.ark'), message: 'Where is the configuration located at?', validate: value => fs.existsSync(value) ? true : `${value} does not exist.` + }, { + type: 'text', + name: 'coreNetwork', + message: 'What network are you on?', + choices: [ + { title: 'mainnet', value: 'mainnet' }, + { title: 'devnet', value: 'devnet' }, + { title: 'testnet', value: 'testnet' } + ], }]); + deletePM2('ark-core'); deletePM2('ark-core-relay'); deletePM2('ark-core-forger'); + + deletePM2('core'); deletePM2('core-relay'); deletePM2('core-forger'); @@ -58,23 +71,23 @@ const main = async () => { }, cache: { old: expandHomeDir(`${coreData}/database`), - new: expandHomeDir(corePaths.cache), + new: corePaths.cache, }, config: { old: expandHomeDir(`${coreData}/config`), - new: expandHomeDir(corePaths.config), + new: corePaths.config, }, log: { old: expandHomeDir(`${coreData}/logs`), - new: expandHomeDir(corePaths.log), + new: corePaths.log, }, temp: { old: expandHomeDir(`${coreData}/temp`), - new: expandHomeDir(corePaths.temp), + new: corePaths.temp, }, data: { - old: expandHomeDir(coreData, - new: expandHomeDir(corePaths.data), + old: expandHomeDir(coreData), + new: corePaths.data, }, }; @@ -97,21 +110,35 @@ const main = async () => { // fs.removeSync(`${paths.config.old}/genesisBlock.json`); fs.removeSync(`${paths.config.new}/peers_backup.json`); fs.removeSync(`${paths.config.new}/network.json`); + fs.removeSync(paths.data.old); // fs.removeSync(`${paths.config.new}/genesisBlock.json`); // Ensure that all files core needs exist const requiredFiles = [ - `${paths.config.new}/.env`, - `${paths.config.new}/delegates.json`, - `${paths.config.new}/peers.json`, - `${paths.config.new}/plugins.js`, + { + copy: `${paths.config.new}/.env`, + original: `${paths.core.new}/.env`, + }, { + copy: `${paths.config.new}/delegates.json`, + original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/delegates.json`, + }, { + copy: `${paths.config.new}/peers.json`, + original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/peers.json`, + }, { + copy: `${paths.config.new}/plugins.js`, + original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/plugins.js`, + } ]; for (const file of requiredFiles) { - if (!fs.existsSync(file)) { - console.error(`File ${file} does not exist.`); + if (!fs.existsSync(file.copy)) { + console.error(`File ${file.copy} does not exist.`); - // TODO: copy or create file or directory if it doesn't exist + if (fs.existsSync(file.original)) { + fs.copySync(file.original, file.copy); + } else { + console.error(`Original ${file.original} does not exist.`); + } } } From 3ac6bfee8d2528339486ed3a28ec2c6cacd0e65a Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Mon, 21 Jan 2019 13:22:53 +0200 Subject: [PATCH 20/47] misc: logs --- upgrade.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/upgrade.js b/upgrade.js index 046cee7aab..b9c0018fcf 100644 --- a/upgrade.js +++ b/upgrade.js @@ -101,6 +101,8 @@ const main = async () => { }); fs.removeSync(value.old); + } else { + console.error(`Folder ${value.old} does not exist.`); } } @@ -117,7 +119,7 @@ const main = async () => { const requiredFiles = [ { copy: `${paths.config.new}/.env`, - original: `${paths.core.new}/.env`, + original: null, // NOTE: this should never happen }, { copy: `${paths.config.new}/delegates.json`, original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/delegates.json`, From 720579d34a5a7f570d9cc572abf0ca50685c50f2 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 06:46:10 +0200 Subject: [PATCH 21/47] fix: move database files to correct directories --- packages/core-json-rpc/src/defaults.ts | 2 +- packages/core-transaction-pool/src/defaults.ts | 2 +- packages/core-webhooks/src/defaults.ts | 2 +- upgrade.js | 5 +++++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/core-json-rpc/src/defaults.ts b/packages/core-json-rpc/src/defaults.ts index 05a6bf98cb..e2f3eb84b8 100644 --- a/packages/core-json-rpc/src/defaults.ts +++ b/packages/core-json-rpc/src/defaults.ts @@ -5,7 +5,7 @@ export const defaults = { allowRemote: false, whitelist: ["127.0.0.1", "::ffff:127.0.0.1"], database: { - uri: process.env.CORE_JSON_RPC_DATABASE || `sqlite://${process.env.CORE_PATH_DATA}/database/json-rpc.sqlite`, + uri: process.env.CORE_JSON_RPC_DATABASE || `sqlite://${process.env.CORE_PATH_DATA}/json-rpc.sqlite`, options: {}, }, }; diff --git a/packages/core-transaction-pool/src/defaults.ts b/packages/core-transaction-pool/src/defaults.ts index 7b11b200b8..55c87d370d 100644 --- a/packages/core-transaction-pool/src/defaults.ts +++ b/packages/core-transaction-pool/src/defaults.ts @@ -1,7 +1,7 @@ export const defaults = { enabled: !process.env.CORE_TRANSACTION_POOL_DISABLED, syncInterval: 512, - storage: `${process.env.CORE_PATH_CACHE}/transaction-pool.sqlite`, + storage: `${process.env.CORE_PATH_DATA}/transaction-pool.sqlite`, // When the pool contains that many transactions, then a new transaction is // only accepted if its fee is higher than the transaction with the lowest // fee in the pool. In this case the transaction with the lowest fee is removed diff --git a/packages/core-webhooks/src/defaults.ts b/packages/core-webhooks/src/defaults.ts index 830fa03113..098ccc6fab 100644 --- a/packages/core-webhooks/src/defaults.ts +++ b/packages/core-webhooks/src/defaults.ts @@ -2,7 +2,7 @@ export const defaults = { enabled: process.env.CORE_WEBHOOKS_ENABLED, database: { dialect: "sqlite", - storage: `${process.env.CORE_PATH_DATA}/database/webhooks.sqlite`, + storage: `${process.env.CORE_PATH_DATA}/webhooks.sqlite`, logging: process.env.CORE_DB_LOGGING, }, server: { diff --git a/upgrade.js b/upgrade.js index b9c0018fcf..84ab871694 100644 --- a/upgrade.js +++ b/upgrade.js @@ -106,6 +106,11 @@ const main = async () => { } } + // Move database files + fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/${coreNetwork}/json-rpc.sqlite`); + fs.moveSync(`${paths.cache.new}/transaction-pool.sqlite`, `${paths.data.new}/${coreNetwork}/transaction-pool.sqlite`); + fs.moveSync(`${paths.cache.new}/webhooks.sqlite`, `${paths.data.new}/${coreNetwork}/webhooks.sqlite`); + // Remove old or temp files fs.removeSync(`${paths.config.old}/peers_backup.json`); fs.removeSync(`${paths.config.old}/network.json`); From 5937c5ecb7be42385fc8815f829735d9a365b955 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 07:30:15 +0200 Subject: [PATCH 22/47] misc: adjust paths --- .gitignore | 1 + package.json | 2 +- packages/core-webhooks/__tests__/__support__/setup.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index ec763505a4..32c47a9858 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,7 @@ packages/**/dist/ # Random peers_backup.json +docker #Webstorm/Intellij .idea diff --git a/package.json b/package.json index b743d60468..c89dddde61 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "version": "cross-env-shell ./scripts/version.sh", "release": "cross-env-shell ./scripts/release.sh", "updates": "yarn lerna run updates", - "generateDocker": "node ./scripts/docker/generate-docker.js" + "docker": "node ./scripts/docker/generate-docker.js" }, "devDependencies": { "@babel/core": "^7.2.2", diff --git a/packages/core-webhooks/__tests__/__support__/setup.ts b/packages/core-webhooks/__tests__/__support__/setup.ts index 7684572ea0..7d7053b3b7 100644 --- a/packages/core-webhooks/__tests__/__support__/setup.ts +++ b/packages/core-webhooks/__tests__/__support__/setup.ts @@ -15,7 +15,7 @@ async function setUp() { await database.setUp({ dialect: "sqlite", - storage: `${process.env.CORE_PATH_DATA}/database/webhooks.sqlite`, + storage: `${process.env.CORE_PATH_DATA}/webhooks.sqlite`, logging: process.env.CORE_DB_LOGGING, }); From bb735c049a7c671b42a9f2d080ef9a630fbd7676 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 13:03:47 +0200 Subject: [PATCH 23/47] fix: move files into folders with network prefixes --- upgrade.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/upgrade.js b/upgrade.js index 84ab871694..855e8c9664 100644 --- a/upgrade.js +++ b/upgrade.js @@ -71,23 +71,23 @@ const main = async () => { }, cache: { old: expandHomeDir(`${coreData}/database`), - new: corePaths.cache, + new: `${corePaths.cache}/${coreNetwork}`, }, config: { old: expandHomeDir(`${coreData}/config`), - new: corePaths.config, + new: `${corePaths.config}/${coreNetwork}`, }, log: { old: expandHomeDir(`${coreData}/logs`), - new: corePaths.log, + new: `${corePaths.log}/${coreNetwork}`, }, temp: { old: expandHomeDir(`${coreData}/temp`), - new: corePaths.temp, + new: `${corePaths.temp}/${coreNetwork}`, }, data: { old: expandHomeDir(coreData), - new: corePaths.data, + new: `${corePaths.data}/${coreNetwork}`, }, }; @@ -107,18 +107,15 @@ const main = async () => { } // Move database files - fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/${coreNetwork}/json-rpc.sqlite`); - fs.moveSync(`${paths.cache.new}/transaction-pool.sqlite`, `${paths.data.new}/${coreNetwork}/transaction-pool.sqlite`); - fs.moveSync(`${paths.cache.new}/webhooks.sqlite`, `${paths.data.new}/${coreNetwork}/webhooks.sqlite`); + fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/json-rpc.sqlite`); + fs.moveSync(`${paths.cache.new}/transaction-pool.sqlite`, `${paths.data.new}/transaction-pool.sqlite`); + fs.moveSync(`${paths.cache.new}/webhooks.sqlite`, `${paths.data.new}/webhooks.sqlite`); // Remove old or temp files fs.removeSync(`${paths.config.old}/peers_backup.json`); fs.removeSync(`${paths.config.old}/network.json`); - // fs.removeSync(`${paths.config.old}/genesisBlock.json`); fs.removeSync(`${paths.config.new}/peers_backup.json`); fs.removeSync(`${paths.config.new}/network.json`); - fs.removeSync(paths.data.old); - // fs.removeSync(`${paths.config.new}/genesisBlock.json`); // Ensure that all files core needs exist const requiredFiles = [ From 0f4032d06ee8d9352afd65c30799ca64c8bdbdc3 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 13:05:21 +0200 Subject: [PATCH 24/47] fix: remove peers_backup from config --- upgrade.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/upgrade.js b/upgrade.js index 855e8c9664..62b8e1b594 100644 --- a/upgrade.js +++ b/upgrade.js @@ -168,7 +168,6 @@ const main = async () => { const { error } = Joi.validate({ delegates: require(`${paths.config.new}/delegates.json`), peers: require(`${paths.config.new}/peers.json`), - peers_backup: require(`${paths.config.new}/peers_backup.json`), plugins: require(`${paths.config.new}/plugins.js`), genesisBlock: require(`${paths.config.new}/genesisBlock.json`), }, Joi.object({ @@ -177,7 +176,6 @@ const main = async () => { bip38: Joi.string(), }), peers: Joi.object().required(), - peers_backup: Joi.array().items(Joi.object()), plugins: Joi.object().required(), genesisBlock: Joi.object().required(), }).unknown()); From 7769233ca2b69d7d9c92ec1be61712d2c951d50d Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 13:12:23 +0200 Subject: [PATCH 25/47] misc: log moving and copying --- upgrade.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/upgrade.js b/upgrade.js index 62b8e1b594..4bee4f42db 100644 --- a/upgrade.js +++ b/upgrade.js @@ -94,6 +94,8 @@ const main = async () => { // Move files & directories for (const value of Object.values(paths)) { if (fs.existsSync(value.old)) { + console.error(`Moving ${value.old} to ${value.new}.`); + fs.ensureDirSync(value.new); fs.moveSync(value.old, value.new, { @@ -139,6 +141,8 @@ const main = async () => { console.error(`File ${file.copy} does not exist.`); if (fs.existsSync(file.original)) { + console.error(`Copying ${file.original} to ${file.copy}.`); + fs.copySync(file.original, file.copy); } else { console.error(`Original ${file.original} does not exist.`); From 0d89dd28fb304eca500b0c9f44c9ac56388f77cd Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 13:33:06 +0200 Subject: [PATCH 26/47] fix: only move database files if they exist --- upgrade.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/upgrade.js b/upgrade.js index 4bee4f42db..938e663556 100644 --- a/upgrade.js +++ b/upgrade.js @@ -109,9 +109,17 @@ const main = async () => { } // Move database files - fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/json-rpc.sqlite`); - fs.moveSync(`${paths.cache.new}/transaction-pool.sqlite`, `${paths.data.new}/transaction-pool.sqlite`); - fs.moveSync(`${paths.cache.new}/webhooks.sqlite`, `${paths.data.new}/webhooks.sqlite`); + if (fs.existsSync(`${paths.cache.new}/json-rpc.sqlite`)) { + fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/json-rpc.sqlite`); + } + + if (fs.existsSync(`${paths.cache.new}/transaction-pool.sqlite`)) { + fs.moveSync(`${paths.cache.new}/transaction-pool.sqlite`, `${paths.data.new}/transaction-pool.sqlite`); + } + + if (fs.existsSync(`${paths.cache.new}/webhooks.sqlite`)) { + fs.moveSync(`${paths.cache.new}/webhooks.sqlite`, `${paths.data.new}/webhooks.sqlite`); + } // Remove old or temp files fs.removeSync(`${paths.config.old}/peers_backup.json`); From 3f8eab1399dfb79ff3058a6a11d8ff25a8a0c94e Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 13:41:56 +0200 Subject: [PATCH 27/47] fix: make sure the .env file is copied first or we exit --- upgrade.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/upgrade.js b/upgrade.js index 938e663556..38f5583ad4 100644 --- a/upgrade.js +++ b/upgrade.js @@ -91,6 +91,18 @@ const main = async () => { }, }; + // Ensure we copy the .env file + if (fs.existsSync(`${paths.data.old}/.env`)) { + fs.ensureDirSync(paths.config.new); + + fs.moveSync(`${paths.data.old}/.env`, `${paths.config.new}/.env`); + + fs.removeSync(`${paths.data.old}/.env`); + } else { + console.log('The .env file ') + process.exit(1); + } + // Move files & directories for (const value of Object.values(paths)) { if (fs.existsSync(value.old)) { From 9abc52f4c374e164e6d34985ba6c8666880b32c5 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:21:12 +0200 Subject: [PATCH 28/47] fix: clean up after all files have been verified --- upgrade.js | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/upgrade.js b/upgrade.js index 38f5583ad4..8df672295f 100644 --- a/upgrade.js +++ b/upgrade.js @@ -91,11 +91,14 @@ const main = async () => { }, }; + // Create directories + for (const value of Object.values(paths)) { + fs.ensureDirSync(value.new); + } + // Ensure we copy the .env file if (fs.existsSync(`${paths.data.old}/.env`)) { - fs.ensureDirSync(paths.config.new); - - fs.moveSync(`${paths.data.old}/.env`, `${paths.config.new}/.env`); + fs.copySync(`${paths.data.old}/.env`, `${paths.config.new}/.env`); fs.removeSync(`${paths.data.old}/.env`); } else { @@ -108,13 +111,22 @@ const main = async () => { if (fs.existsSync(value.old)) { console.error(`Moving ${value.old} to ${value.new}.`); - fs.ensureDirSync(value.new); - fs.moveSync(value.old, value.new, { overwrite: true }); + } else { + console.error(`Folder ${value.old} does not exist.`); + } + } - fs.removeSync(value.old); + // Move files & directories + for (const value of Object.values(paths)) { + if (fs.existsSync(value.old)) { + console.error(`Moving ${value.old} to ${value.new}.`); + + fs.moveSync(value.old, value.new, { + overwrite: true + }); } else { console.error(`Folder ${value.old} does not exist.`); } @@ -177,12 +189,12 @@ const main = async () => { fs.writeFileSync(`${paths.config.new}/delegates.json`, JSON.stringify(configDelegates, null, 4)); // Update environment file - let configEnv = fs.readFileSync(`${paths.config.new}/.env`); + let configEnv = fs.readFileSync(`${paths.config.new}/.env`).toString(); configEnv = configEnv.replace('ARK_', 'CORE_'); fs.writeFileSync(`${paths.config.new}/.env`, configEnv); // Update plugins file - let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`); + let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`).toString(); configPlugins = configPlugins.replace('ARK_', 'CORE_'); fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); @@ -207,6 +219,13 @@ const main = async () => { if (error) { console.log(error); } + + // Clean up + for (const value of Object.values(paths)) { + if (fs.existsSync(value.old)) { + fs.removeSync(value.old); + } + } } main() From fbcef07184a7feb51a8045e56c7c26fe213a784f Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:23:37 +0200 Subject: [PATCH 29/47] refactor: handle pm2 via bash --- package.json | 3 +-- scripts/upgrade.sh | 11 ++++++++++ upgrade.js => scripts/upgrade/upgrade.js | 27 ------------------------ 3 files changed, 12 insertions(+), 29 deletions(-) create mode 100644 scripts/upgrade.sh rename upgrade.js => scripts/upgrade/upgrade.js (91%) diff --git a/package.json b/package.json index c89dddde61..cd719233ba 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "description": "The packages that make up the Ark Core", "scripts": { "lerna": "./node_modules/lerna/cli.js", - "upgrade": "node ./upgrade.js", "setup": "yarn && yarn clean && yarn bootstrap && yarn build", "bootstrap": "yarn lerna bootstrap", "clean": "yarn lerna clean --yes", @@ -15,6 +14,7 @@ "test": "cross-env CORE_ENV=test jest --runInBand --forceExit", "test:coverage": "cross-env CORE_ENV=test jest --coverage --coveragePathIgnorePatterns='/(defaults.ts|index.ts)$' --runInBand --forceExit", "snyk": "./node_modules/.bin/snyk protect", + "upgrade": "cross-env-shell ./scripts/upgrade.sh", "version": "cross-env-shell ./scripts/version.sh", "release": "cross-env-shell ./scripts/release.sh", "updates": "yarn lerna run updates", @@ -53,7 +53,6 @@ "lerna": "^3.6.0", "lint-staged": "^8.1.0", "npm-check-updates": "^2.15.0", - "pm2": "^3.2.9", "prettier": "^1.15.3", "prompts": "^2.0.1", "regenerator-runtime": "^0.13.1", diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh new file mode 100644 index 0000000000..80573f2da1 --- /dev/null +++ b/scripts/upgrade.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +pm2 stop ark-core +pm2 stop ark-core-relay +pm2 stop ark-core-forger + +pm2 stop core +pm2 stop core-relay +pm2 stop core-forger + +node ./upgrade/upgrade.js diff --git a/upgrade.js b/scripts/upgrade/upgrade.js similarity index 91% rename from upgrade.js rename to scripts/upgrade/upgrade.js index 8df672295f..a272ce2a10 100644 --- a/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -2,27 +2,8 @@ const envPaths = require('env-paths'); const expandHomeDir = require('expand-home-dir'); const fs = require('fs-extra'); const Joi = require('joi'); -const pm2 = require('pm2'); const prompts = require('prompts'); -// Delete all pm2 processes created by commander -function deletePM2(processName) { - pm2.connect(connectionError => { - if (connectionError) { - console.error(connectionError); - process.exit(2); - } - - pm2.delete(processName, deleteError => { - pm2.disconnect(); - - if (deleteError) { - throw deleteError; - } - }); - }); -}; - const main = async () => { const { corePath, @@ -51,14 +32,6 @@ const main = async () => { ], }]); - deletePM2('ark-core'); - deletePM2('ark-core-relay'); - deletePM2('ark-core-forger'); - - deletePM2('core'); - deletePM2('core-relay'); - deletePM2('core-forger'); - // Paths const corePaths = envPaths('ark', { suffix: 'core' From d8f5a21259bcea6f0bdd90cc9741c3d41ff17b06 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:26:07 +0200 Subject: [PATCH 30/47] fix: path and log --- scripts/upgrade.sh | 2 +- scripts/upgrade/upgrade.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh index 80573f2da1..c12e2055cb 100644 --- a/scripts/upgrade.sh +++ b/scripts/upgrade.sh @@ -8,4 +8,4 @@ pm2 stop core pm2 stop core-relay pm2 stop core-forger -node ./upgrade/upgrade.js +node ./scripts/upgrade/upgrade.js diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index a272ce2a10..d03cd0c7ce 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -75,7 +75,7 @@ const main = async () => { fs.removeSync(`${paths.data.old}/.env`); } else { - console.log('The .env file ') + console.log(`The ${paths.data.old}/.env file does not exist.`) process.exit(1); } From dccab2043c6408f9a40bda97c739758b016f5217 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:33:09 +0200 Subject: [PATCH 31/47] fix: null output --- scripts/upgrade.sh | 12 ++++++------ scripts/upgrade/upgrade.js | 13 ------------- 2 files changed, 6 insertions(+), 19 deletions(-) mode change 100644 => 100755 scripts/upgrade.sh diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh old mode 100644 new mode 100755 index c12e2055cb..02004cc0d3 --- a/scripts/upgrade.sh +++ b/scripts/upgrade.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash -pm2 stop ark-core -pm2 stop ark-core-relay -pm2 stop ark-core-forger +pm2 stop ark-core > /dev/null 2>&1 +pm2 stop ark-core-relay > /dev/null 2>&1 +pm2 stop ark-core-forger > /dev/null 2>&1 -pm2 stop core -pm2 stop core-relay -pm2 stop core-forger +pm2 stop core > /dev/null 2>&1 +pm2 stop core-relay > /dev/null 2>&1 +pm2 stop core-forger > /dev/null 2>&1 node ./scripts/upgrade/upgrade.js diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index d03cd0c7ce..377633df7a 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -92,19 +92,6 @@ const main = async () => { } } - // Move files & directories - for (const value of Object.values(paths)) { - if (fs.existsSync(value.old)) { - console.error(`Moving ${value.old} to ${value.new}.`); - - fs.moveSync(value.old, value.new, { - overwrite: true - }); - } else { - console.error(`Folder ${value.old} does not exist.`); - } - } - // Move database files if (fs.existsSync(`${paths.cache.new}/json-rpc.sqlite`)) { fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/json-rpc.sqlite`); From d0d8e183edcce27e2b1f6682aa17de549e9bc237 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:40:11 +0200 Subject: [PATCH 32/47] misc: more logging --- scripts/upgrade/upgrade.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 377633df7a..c7b3e68ecd 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -70,10 +70,15 @@ const main = async () => { } // Ensure we copy the .env file - if (fs.existsSync(`${paths.data.old}/.env`)) { - fs.copySync(`${paths.data.old}/.env`, `${paths.config.new}/.env`); + const envOld = `${paths.data.old}/.env`; + const envNew = `${paths.config.new}/.env`; - fs.removeSync(`${paths.data.old}/.env`); + if (fs.existsSync(envOld)) { + console.log(`Copying ${envOld} to ${envNew}.`); + + fs.copySync(envOld, envNew); + + fs.removeSync(envOld); } else { console.log(`The ${paths.data.old}/.env file does not exist.`) process.exit(1); @@ -142,18 +147,21 @@ const main = async () => { } } - // Update configuration files + // Update delegate configuration + console.log('Update delegate configuration'); let configDelegates = require(`${paths.config.new}/delegates.json`) delete configDelegates.dynamicFee delete configDelegates.dynamicFees fs.writeFileSync(`${paths.config.new}/delegates.json`, JSON.stringify(configDelegates, null, 4)); // Update environment file + console.log('Update environment configuration'); let configEnv = fs.readFileSync(`${paths.config.new}/.env`).toString(); configEnv = configEnv.replace('ARK_', 'CORE_'); fs.writeFileSync(`${paths.config.new}/.env`, configEnv); // Update plugins file + console.log('Update plugins configuration'); let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`).toString(); configPlugins = configPlugins.replace('ARK_', 'CORE_'); fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); @@ -161,6 +169,7 @@ const main = async () => { // TODO: turn plugins.js into plugins.json // Validate configuration files + console.log('Validating configuration'); const { error } = Joi.validate({ delegates: require(`${paths.config.new}/delegates.json`), peers: require(`${paths.config.new}/peers.json`), @@ -181,6 +190,7 @@ const main = async () => { } // Clean up + console.log('Performing clean up'); for (const value of Object.values(paths)) { if (fs.existsSync(value.old)) { fs.removeSync(value.old); From 0e8d1f220075aa3680e2fd8bf0fefcf0c6610b1e Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:52:16 +0200 Subject: [PATCH 33/47] misc: logging --- scripts/upgrade/upgrade.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index c7b3e68ecd..15f38d685f 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -135,10 +135,8 @@ const main = async () => { for (const file of requiredFiles) { if (!fs.existsSync(file.copy)) { - console.error(`File ${file.copy} does not exist.`); - if (fs.existsSync(file.original)) { - console.error(`Copying ${file.original} to ${file.copy}.`); + console.error(`Copying ${file.original} to ${file.copy} because it is missing.`); fs.copySync(file.original, file.copy); } else { From 3d0a5643f20283fcd5d02afe4167f6fd5aba708c Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:54:40 +0200 Subject: [PATCH 34/47] misc: disable plugin mods --- scripts/upgrade/upgrade.js | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 15f38d685f..5d65df446c 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -70,20 +70,13 @@ const main = async () => { } // Ensure we copy the .env file - const envOld = `${paths.data.old}/.env`; - const envNew = `${paths.config.new}/.env`; - - if (fs.existsSync(envOld)) { - console.log(`Copying ${envOld} to ${envNew}.`); - - fs.copySync(envOld, envNew); - - fs.removeSync(envOld); - } else { + if (!fs.existsSync(`${paths.data.old}/.env`)) { console.log(`The ${paths.data.old}/.env file does not exist.`) process.exit(1); } + const envCurrent = fs.readFileSync(`${paths.data.old}/.env`).toString(); + // Move files & directories for (const value of Object.values(paths)) { if (fs.existsSync(value.old)) { @@ -154,15 +147,13 @@ const main = async () => { // Update environment file console.log('Update environment configuration'); - let configEnv = fs.readFileSync(`${paths.config.new}/.env`).toString(); - configEnv = configEnv.replace('ARK_', 'CORE_'); - fs.writeFileSync(`${paths.config.new}/.env`, configEnv); - - // Update plugins file - console.log('Update plugins configuration'); - let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`).toString(); - configPlugins = configPlugins.replace('ARK_', 'CORE_'); - fs.writeFileSync(`${paths.config.new}/plugins.js`, configEnv); + fs.writeFileSync(`${paths.config.new}/.env`, envCurrent.replace('ARK_', 'CORE_')); + + // // Update plugins file + // console.log('Update plugins configuration'); + // let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`).toString(); + // configPlugins = configPlugins.replace('ARK_', 'CORE_'); + // fs.writeFileSync(`${paths.config.new}/plugins.js`, configPlugins); // TODO: turn plugins.js into plugins.json From 4057b52279fd014fecccd241cd96133a7cf7be3e Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:55:35 +0200 Subject: [PATCH 35/47] fix: copy genesisBlock.json --- scripts/upgrade/upgrade.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 5d65df446c..6dcbd3b971 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -123,6 +123,9 @@ const main = async () => { }, { copy: `${paths.config.new}/plugins.js`, original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/plugins.js`, + }, { + copy: `${paths.config.new}/genesisBlock.js`, + original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/genesisBlock.js`, } ]; From 0301fde9ed8a96ed05919f9166a9ad10051ea29c Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:56:15 +0200 Subject: [PATCH 36/47] fix: json not js --- scripts/upgrade/upgrade.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 6dcbd3b971..f96b1ba181 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -124,8 +124,8 @@ const main = async () => { copy: `${paths.config.new}/plugins.js`, original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/plugins.js`, }, { - copy: `${paths.config.new}/genesisBlock.js`, - original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/genesisBlock.js`, + copy: `${paths.config.new}/genesisBlock.json`, + original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/genesisBlock.json`, } ]; From 531c0bbc33047d439f8504bb3e5717b2e6b9271f Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:57:51 +0200 Subject: [PATCH 37/47] fix: remove env check --- scripts/upgrade/upgrade.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index f96b1ba181..8733d68327 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -112,9 +112,6 @@ const main = async () => { // Ensure that all files core needs exist const requiredFiles = [ { - copy: `${paths.config.new}/.env`, - original: null, // NOTE: this should never happen - }, { copy: `${paths.config.new}/delegates.json`, original: `${paths.core.new}/packages/core/src/config/${coreNetwork}/delegates.json`, }, { From ab5b55b7386509d181207f8f9b35e99e4b3da726 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 14:58:53 +0200 Subject: [PATCH 38/47] chore: add a script to create dummy files and folders --- scripts/upgrade/test.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 scripts/upgrade/test.sh diff --git a/scripts/upgrade/test.sh b/scripts/upgrade/test.sh new file mode 100644 index 0000000000..c4063a6f4b --- /dev/null +++ b/scripts/upgrade/test.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +rm -rf /home/ark/ark-core +git clone https://github.com/ArkEcosystem/core -b upgrade /home/ark/ark-core + +mkdir /home/ark/.ark +touch /home/ark/.ark/.env + +mkdir /home/ark/.ark/config + +mkdir /home/ark/.ark/database +touch /home/ark/.ark/database/json-rpc.sqlite +touch /home/ark/.ark/database/transaction-pool.sqlite +touch /home/ark/.ark/database/webhooks.sqlite + +mkdir /home/ark/.ark/logs +mkdir /home/ark/.ark/logs/mainnet +touch /home/ark/.ark/logs/mainnet/test.log From b804bc7faea8c49e821bd54bd5f5d3dc28fe1174 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 15:27:13 +0200 Subject: [PATCH 39/47] fix: use the network name in the pool name --- scripts/upgrade/upgrade.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 8733d68327..2adce99c53 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -95,8 +95,8 @@ const main = async () => { fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/json-rpc.sqlite`); } - if (fs.existsSync(`${paths.cache.new}/transaction-pool.sqlite`)) { - fs.moveSync(`${paths.cache.new}/transaction-pool.sqlite`, `${paths.data.new}/transaction-pool.sqlite`); + if (fs.existsSync(`${paths.cache.new}/transaction-pool-${coreNetwork}.sqlite`)) { + fs.moveSync(`${paths.cache.new}/transaction-pool-${coreNetwork}.sqlite`, `${paths.data.new}/transaction-pool.sqlite`); } if (fs.existsSync(`${paths.cache.new}/webhooks.sqlite`)) { From c54943434ba4f3cd313f99b458f320b4c3dc1c33 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Tue, 22 Jan 2019 19:13:10 +0200 Subject: [PATCH 40/47] misc: remove 2.2 task --- scripts/upgrade/upgrade.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 2adce99c53..a478feaa1d 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -149,14 +149,6 @@ const main = async () => { console.log('Update environment configuration'); fs.writeFileSync(`${paths.config.new}/.env`, envCurrent.replace('ARK_', 'CORE_')); - // // Update plugins file - // console.log('Update plugins configuration'); - // let configPlugins = fs.readFileSync(`${paths.config.new}/plugins.js`).toString(); - // configPlugins = configPlugins.replace('ARK_', 'CORE_'); - // fs.writeFileSync(`${paths.config.new}/plugins.js`, configPlugins); - - // TODO: turn plugins.js into plugins.json - // Validate configuration files console.log('Validating configuration'); const { error } = Joi.validate({ From b1d835a789fe5baad50705c70e792c349aba0138 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 08:25:12 +0200 Subject: [PATCH 41/47] fix: move log files up from sub directory --- scripts/upgrade/upgrade.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index a478feaa1d..23dc123ce0 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -90,7 +90,7 @@ const main = async () => { } } - // Move database files + // Move files if (fs.existsSync(`${paths.cache.new}/json-rpc.sqlite`)) { fs.moveSync(`${paths.cache.new}/json-rpc.sqlite`, `${paths.data.new}/json-rpc.sqlite`); } @@ -103,6 +103,10 @@ const main = async () => { fs.moveSync(`${paths.cache.new}/webhooks.sqlite`, `${paths.data.new}/webhooks.sqlite`); } + if (fs.existsSync(`${corePaths.log}/core/${coreNetwork}`)) { + fs.moveSync(`${corePaths.log}/core/${coreNetwork}`, `${paths.log.new}/${coreNetwork}`); + } + // Remove old or temp files fs.removeSync(`${paths.config.old}/peers_backup.json`); fs.removeSync(`${paths.config.old}/network.json`); From 6698a3a9e61f65492666f5fb74212ab9a3f2722e Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 09:01:47 +0200 Subject: [PATCH 42/47] feat: update the commander configuration if it exists --- scripts/upgrade/upgrade.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 23dc123ce0..5c97d67459 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -22,9 +22,10 @@ const main = async () => { message: 'Where is the configuration located at?', validate: value => fs.existsSync(value) ? true : `${value} does not exist.` }, { - type: 'text', + type: 'select', name: 'coreNetwork', message: 'What network are you on?', + validate: value => ['mainnet', 'devnet', 'testnet'].includes(value) ? true : `${value} is not a valid network.`, choices: [ { title: 'mainnet', value: 'mainnet' }, { title: 'devnet', value: 'devnet' }, @@ -64,6 +65,33 @@ const main = async () => { }, }; + // update commander file if present + const commanderEnv = expandHomeDir('~/.commander') + + if (fs.existsSync(commanderEnv)) { + const commanderContents = fs.readFileSync(commanderEnv).toString(); + + if (!commanderContents.includes('CORE_PATH_DATA')) { + fs.appendFileSync(commanderEnv, `CORE_PATH_DATA=${paths.data.new}\r\n`); + } + + if (!commanderContents.includes('CORE_PATH_CONFIG')) { + fs.appendFileSync(commanderEnv, `CORE_PATH_CONFIG=${paths.config.new}\r\n`); + } + + if (!commanderContents.includes('CORE_PATH_CACHE')) { + fs.appendFileSync(commanderEnv, `CORE_PATH_CACHE=${paths.cache.new}\r\n`); + } + + if (!commanderContents.includes('CORE_PATH_LOG')) { + fs.appendFileSync(commanderEnv, `CORE_PATH_LOG=${paths.log.new}\r\n`); + } + + if (!commanderContents.includes('CORE_PATH_TEMP')) { + fs.appendFileSync(commanderEnv, `CORE_PATH_TEMP=${paths.temp.new}\r\n`); + } + } + // Create directories for (const value of Object.values(paths)) { fs.ensureDirSync(value.new); From 2b7b0df2f7d9ea84cccb431fea32f14fc16b9478 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 10:46:47 +0200 Subject: [PATCH 43/47] fix: update CORE_DIR variable in commander env --- scripts/upgrade/upgrade.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 5c97d67459..3dc7733a28 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -90,6 +90,16 @@ const main = async () => { if (!commanderContents.includes('CORE_PATH_TEMP')) { fs.appendFileSync(commanderEnv, `CORE_PATH_TEMP=${paths.temp.new}\r\n`); } + + const env = require("envfile").parseFileSync(commanderEnv); + env.CORE_DIR = env.CORE_DIR.replace('ark-core', 'core'); + + let envOutput = ''; + for(const [key, value] of Object.entries(env)) { + envOutput += `${key}="${value}"\r\n`; + } + + fs.writeFileSync(commanderEnv, envOutput); } // Create directories From 76fdfa7f1ee91ff08f1007c37ea57eabe4e4e615 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 10:55:52 +0200 Subject: [PATCH 44/47] fix: run yarn setup after the upgrade --- scripts/upgrade.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/upgrade.sh b/scripts/upgrade.sh index 02004cc0d3..b1fa3730fe 100755 --- a/scripts/upgrade.sh +++ b/scripts/upgrade.sh @@ -9,3 +9,5 @@ pm2 stop core-relay > /dev/null 2>&1 pm2 stop core-forger > /dev/null 2>&1 node ./scripts/upgrade/upgrade.js + +yarn setup From 51b37dbe4889ec106744857cf810fb7173aad6a3 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 11:48:54 +0200 Subject: [PATCH 45/47] fix: use platform specific line break --- scripts/upgrade/upgrade.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/scripts/upgrade/upgrade.js b/scripts/upgrade/upgrade.js index 3dc7733a28..df37c63847 100644 --- a/scripts/upgrade/upgrade.js +++ b/scripts/upgrade/upgrade.js @@ -3,6 +3,7 @@ const expandHomeDir = require('expand-home-dir'); const fs = require('fs-extra'); const Joi = require('joi'); const prompts = require('prompts'); +const { EOL } = require('os'); const main = async () => { const { @@ -72,23 +73,23 @@ const main = async () => { const commanderContents = fs.readFileSync(commanderEnv).toString(); if (!commanderContents.includes('CORE_PATH_DATA')) { - fs.appendFileSync(commanderEnv, `CORE_PATH_DATA=${paths.data.new}\r\n`); + fs.appendFileSync(commanderEnv, `CORE_PATH_DATA=${paths.data.new}${EOL}`); } if (!commanderContents.includes('CORE_PATH_CONFIG')) { - fs.appendFileSync(commanderEnv, `CORE_PATH_CONFIG=${paths.config.new}\r\n`); + fs.appendFileSync(commanderEnv, `CORE_PATH_CONFIG=${paths.config.new}${EOL}`); } if (!commanderContents.includes('CORE_PATH_CACHE')) { - fs.appendFileSync(commanderEnv, `CORE_PATH_CACHE=${paths.cache.new}\r\n`); + fs.appendFileSync(commanderEnv, `CORE_PATH_CACHE=${paths.cache.new}${EOL}`); } if (!commanderContents.includes('CORE_PATH_LOG')) { - fs.appendFileSync(commanderEnv, `CORE_PATH_LOG=${paths.log.new}\r\n`); + fs.appendFileSync(commanderEnv, `CORE_PATH_LOG=${paths.log.new}${EOL}`); } if (!commanderContents.includes('CORE_PATH_TEMP')) { - fs.appendFileSync(commanderEnv, `CORE_PATH_TEMP=${paths.temp.new}\r\n`); + fs.appendFileSync(commanderEnv, `CORE_PATH_TEMP=${paths.temp.new}${EOL}`); } const env = require("envfile").parseFileSync(commanderEnv); @@ -96,7 +97,7 @@ const main = async () => { let envOutput = ''; for(const [key, value] of Object.entries(env)) { - envOutput += `${key}="${value}"\r\n`; + envOutput += `${key}=${value}${EOL}`; } fs.writeFileSync(commanderEnv, envOutput); From 8583201f49f656d3d3ef89ac629b14898d02aecf Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 11:55:59 +0200 Subject: [PATCH 46/47] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e968df1594..52c50538c9 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "version": "cross-env-shell ./scripts/version.sh", "release": "cross-env-shell ./scripts/release.sh", "updates": "yarn lerna run updates", - "docker": "node ./scripts/docker/generate-docker.js" + "docker": "node ./scripts/docker/generate-docker.js", "bench": "node benchmark/index.js" }, "devDependencies": { From f4419f2a93018620d3443a140cb615ec9b00d9ae Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Wed, 23 Jan 2019 12:13:19 +0200 Subject: [PATCH 47/47] docs: update paths in upgrade.md --- UPGRADE.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 2ef3cb2603..ab9915a2e2 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,6 +1,6 @@ -# Upgrading Instructions for Core 2.0 +# Upgrading Instructions for Core 2.\* -This file contains the upgrade notes for Core 2.0. These notes highlight changes that +This file contains the upgrade notes for Core 2.\*. These notes highlight changes that could break your application when you upgrade Core from one version to another. Even though we try to ensure backwards compatibility (BC) as much as possible, sometimes it is not possible or very complicated to avoid it and still create a good solution to @@ -11,7 +11,7 @@ running `git pull` inside the installation directory. In a big application howev be more things to consider, which are explained in the following. > Note: This document assumes you have Core installed inside the `~/core` directory -> with your configuration being located at `~/.core/config`. If you are using different locations +> with your configuration being located at `~/.config/ark-core/`. If you are using different locations > you will need to adjust those inside the examples which can be found below. > Tip: Upgrading a complex software project always comes at the risk of breaking something, so make sure you have a backup **(you should be doing this anyway)**. @@ -43,7 +43,7 @@ Another way to upgrade is to change to a specific version, for example to versio cd ~/core git reset --hard git fetch && git pull - git checkout tags/2.0.10 + git checkout tags/2.1.0 yarn setup ### Notes @@ -64,13 +64,13 @@ See the following notes on which changes to consider when upgrading from one ver ### Upgrade from Core 2.0.\* to 2.1.0 -- Remove `"@arkecosystem/core-config": {},` from the `~/.core/config/plugins.js` file. +- Run `yarn run upgrade` from the root of the repository. -- Rename `@arkecosystem/core-transaction-pool-mem` to `@arkecosystem/core-transaction-pool` in the `~/.core/config/plugins.js` file. +- Remove `"@arkecosystem/core-config": {},` from the `~/.config/ark-core//plugins.js` file. -- Remove the `~/.core/config/network.json` file. +- Rename `@arkecosystem/core-transaction-pool-mem` to `@arkecosystem/core-transaction-pool` in the `~/.config/ark-core//plugins.js` file. -- If you have been using custom dynamic fees open the `~/.core/config/plugins.js` file and locate the `@arkecosystem/core-transaction-pool` plugin. Add below code to it and enter your desired values. +- If you have been using custom dynamic fees open the `~/.config/ark-core//plugins.js` file and locate the `@arkecosystem/core-transaction-pool` plugin. Add below code to it and enter your desired values. ```js dynamicFees: {