From fb560cf796c0b9ff6ffabf80411207e1309605ef Mon Sep 17 00:00:00 2001 From: spalger Date: Thu, 13 Aug 2015 15:35:45 -0700 Subject: [PATCH] [plugin/install] plugins need to have their own deps (support no internet installs) --- src/cli/plugin/__tests__/npmInstall.js | 69 -------------------------- src/cli/plugin/npmInstall.js | 35 ------------- src/cli/plugin/pluginDownloader.js | 17 +++---- src/cli/plugin/pluginInstaller.js | 4 -- 4 files changed, 7 insertions(+), 118 deletions(-) delete mode 100644 src/cli/plugin/__tests__/npmInstall.js delete mode 100644 src/cli/plugin/npmInstall.js diff --git a/src/cli/plugin/__tests__/npmInstall.js b/src/cli/plugin/__tests__/npmInstall.js deleted file mode 100644 index 7a8ee7596b31..000000000000 --- a/src/cli/plugin/__tests__/npmInstall.js +++ /dev/null @@ -1,69 +0,0 @@ -var expect = require('expect.js'); -var nock = require('nock'); -var glob = require('glob'); -var rimraf = require('rimraf'); -var fs = require('fs'); -var { join } = require('path'); -var sinon = require('sinon'); - -var pluginLogger = require('../pluginLogger'); -var npmInstall = require('../npmInstall'); - -describe('kibana cli', function () { - - describe('plugin installer', function () { - - describe('npmInstall', function () { - - var testWorkingPath = join(__dirname, '.test.data'); - var logger; - var statSyncStub; - - beforeEach(function () { - statSyncStub = undefined; - logger = pluginLogger(false); - rimraf.sync(testWorkingPath); - sinon.stub(logger, 'log'); - sinon.stub(logger, 'error'); - }); - - afterEach(function () { - logger.log.restore(); - logger.error.restore(); - rimraf.sync(testWorkingPath); - if (statSyncStub) statSyncStub.restore(); - }); - - it('should throw an error if there is no package.json file in the archive', function () { - fs.mkdirSync(testWorkingPath); - - var errorStub = sinon.stub(); - return npmInstall(testWorkingPath, logger) - .catch(errorStub) - .then(function (data) { - expect(errorStub.called).to.be(true); - expect(errorStub.lastCall.args[0].message).to.match(/package.json/); - }); - }); - - it('should rethrow any errors other than "ENOENT" from fs.statSync', function () { - fs.mkdirSync(testWorkingPath); - - statSyncStub = sinon.stub(fs, 'statSync', function () { - throw new Error('This is unexpected.'); - }); - - var errorStub = sinon.stub(); - return npmInstall(testWorkingPath, logger) - .catch(errorStub) - .then(function (data) { - expect(errorStub.called).to.be(true); - expect(errorStub.lastCall.args[0].message).to.match(/This is unexpected./); - }); - }); - - }); - - }); - -}); diff --git a/src/cli/plugin/npmInstall.js b/src/cli/plugin/npmInstall.js deleted file mode 100644 index a8e1ee34c5de..000000000000 --- a/src/cli/plugin/npmInstall.js +++ /dev/null @@ -1,35 +0,0 @@ -var Promise = require('bluebird'); -var fs = require('fs'); -var path = require('path'); -var exec = require('child_process').exec; - -module.exports = function (dest, logger) { - return new Promise(function (resolve, reject) { - //throw an exception if package.json does not exist - try { - var packageFile = path.join(dest, 'package.json'); - fs.statSync(packageFile); - } catch (e) { - if (e.code !== 'ENOENT') throw e; - - return reject(new Error('Plugin does not contain package.json file')); - } - - var cmd = '"' + path.resolve(path.dirname(process.execPath), 'npm').replace(/\\/g, '/') + '" install --production'; - - var child = exec(cmd, { cwd: dest }); - child.on('error', function (err) { - reject(err); - }); - child.on('exit', function (code, signal) { - if (code === 0) { - resolve(); - } else { - reject(new Error('npm install failed with code ' + code)); - } - }); - - logger.error(child.stderr); - logger.log(child.stdout); - }); -}; diff --git a/src/cli/plugin/pluginDownloader.js b/src/cli/plugin/pluginDownloader.js index 8cbe5581ec40..15884a604a5a 100644 --- a/src/cli/plugin/pluginDownloader.js +++ b/src/cli/plugin/pluginDownloader.js @@ -1,7 +1,7 @@ var _ = require('lodash'); var zlib = require('zlib'); var Promise = require('bluebird'); -var request = require('request'); +var wreck = require('wreck'); var tar = require('tar'); var progressReporter = require('./progressReporter'); @@ -48,12 +48,7 @@ module.exports = function (settings, logger) { var gunzip = zlib.createGunzip(); var tarExtract = new tar.Extract({ path: dest, strip: 1 }); - var requestOptions = { url: source }; - if (timeout !== 0) { - requestOptions.timeout = timeout; - } - - return wrappedRequest(requestOptions) + return wrappedRequest(source, timeout) .then(function (req) { var reporter = progressReporter(logger, req); @@ -71,9 +66,11 @@ module.exports = function (settings, logger) { }); } - function wrappedRequest(requestOptions) { - return Promise.try(function () { - return request.get(requestOptions); + function wrappedRequest(url, timeout) { + if (timeout) timeout = false; + + return Promise.fromNode(cb => { + return wreck.defaults({ timeout }).request('GET', url, null, cb); }) .catch(function (err) { if (err.message.match(/invalid uri/i)) { diff --git a/src/cli/plugin/pluginInstaller.js b/src/cli/plugin/pluginInstaller.js index aedfc50dfb75..fae2d150d45e 100644 --- a/src/cli/plugin/pluginInstaller.js +++ b/src/cli/plugin/pluginInstaller.js @@ -1,6 +1,5 @@ var pluginDownloader = require('./pluginDownloader'); var pluginCleaner = require('./pluginCleaner'); -var npmInstall = require('./npmInstall'); var fs = require('fs'); module.exports = { @@ -26,9 +25,6 @@ function install(settings, logger) { .then(function () { return downloader.download(); }) - .then(function () { - return npmInstall(settings.workingPath, logger); - }) .then(function (curious) { fs.renameSync(settings.workingPath, settings.pluginPath); logger.log('Plugin installation complete');