diff --git a/lib/cli.js b/lib/cli.js index 17a7b135..b362305b 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -11,15 +11,19 @@ let cli = require("commander"), path = require("path"), chokidar = require("chokidar"), traverse = require("sol-digger"), + axios = require("axios"), + semver = require("semver"), solium = require("./solium"), sum = require("lodash/sum"), version = require("../package.json").version; +require("colors"); let CWD = process.cwd(), SOLIUMRC_FILENAME = ".soliumrc.json", SOLIUMRC_FILENAME_ABSOLUTE = path.join(CWD, SOLIUMRC_FILENAME), SOLIUMIGNORE_FILENAME = ".soliumignore", SOLIUMIGNORE_FILENAME_ABSOLUTE = path.join(CWD, SOLIUMIGNORE_FILENAME), + VERSION_CHECK_CHANCE = 0.05, DEFAULT_SOLIUMIGNORE_PATH = __dirname + "/cli-utils/.default-solium-ignore", DEFAULT_SOLIUMRC_PATH = __dirname + "/cli-utils/.default-soliumrc.json"; @@ -236,7 +240,35 @@ function getErrorReporter(name) { * @param {Array} programArgs Commandline arguments */ function execute(programArgs) { + if (Math.random() < VERSION_CHECK_CHANCE) { + checkVersionAndRunSolium(programArgs); + } else { + runSolium(programArgs); + } +} + +function checkVersionAndRunSolium(programArgs) { + let soliumNpmUrl = "https://registry.npmjs.org/solium?version=latest"; + + axios.get(soliumNpmUrl) + .then(function(response) { + const latestVersion = response.data.version; + if (semver.gt(version, latestVersion)) { + process.stdout.write(`You are running a dev version ${version}, laterst version is ${latestVersion}`.yellow); + } else if (semver.lt(version, latestVersion)) { + process.stdout.write(`You are runninng an outdated version ${version}, latest version is ${latestVersion}`.yellow); + } else { + process.stdout.write(`You are runninng the latest version: ${version}`.green); + } + runSolium(programArgs); + }) + .catch(function(error) { + process.stdout.write(`Failed to get solium version: ${error}`); + runSolium(programArgs); + }); +} +function runSolium(programArgs) { let userConfig, ignore, errorReporter; createCliOptions(cli); diff --git a/package-lock.json b/package-lock.json index 8be72831..8f46468b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,6 +128,15 @@ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "1.4.1", + "is-buffer": "1.1.5" + } + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -707,6 +716,14 @@ "write": "0.2.1" } }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "requires": { + "debug": "3.1.0" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4125,8 +4142,7 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "set-blocking": { "version": "2.0.0", diff --git a/package.json b/package.json index b8385312..018a0db3 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,13 @@ "license": "MIT", "dependencies": { "ajv": "^5.2.2", + "axios": "^0.18.0", "chokidar": "^1.6.0", "colors": "^1.1.2", "commander": "^2.9.0", "js-string-escape": "^1.0.1", "lodash": "^4.14.2", + "semver": "^5.5.0", "sol-digger": "0.0.2", "sol-explore": "1.6.1", "solium-plugin-security": "0.1.1",