From d258d24b13993b6f3e3665455ad31d77cd1bff2f Mon Sep 17 00:00:00 2001 From: Joe Fleming Date: Fri, 23 Dec 2016 10:48:06 -0700 Subject: [PATCH] Allow custom build target via --build-destination flag (elastic/kibana-plugin-helpers#30) * pass buildTarget into createBuild allow override from options * add cli option to override build destination --build-destination * fix tests * resolve build destination from plugin.root this allows both relative and absolute paths to be used * add short option * update the help Original commit: elastic/kibana-plugin-helpers@6c9fb3464e64f0e9daec859faf3e7e5f8412a847 --- packages/kbn-plugin-helpers/bin/plugin-helpers.js | 2 ++ packages/kbn-plugin-helpers/tasks/build/README.md | 10 ++++++++++ .../kbn-plugin-helpers/tasks/build/build_action.js | 8 ++++++-- .../tasks/build/build_action.spec.js | 6 +++--- .../kbn-plugin-helpers/tasks/build/create_build.js | 3 +-- 5 files changed, 22 insertions(+), 7 deletions(-) diff --git a/packages/kbn-plugin-helpers/bin/plugin-helpers.js b/packages/kbn-plugin-helpers/bin/plugin-helpers.js index 5c36edf3d779..851dd735c4cb 100755 --- a/packages/kbn-plugin-helpers/bin/plugin-helpers.js +++ b/packages/kbn-plugin-helpers/bin/plugin-helpers.js @@ -34,10 +34,12 @@ program .command('build [files...]') .description('Build a distributable archive') .on('--help', docs('build')) + .option('-d, --build-destination ', 'Target path for the build output, absolute or relative to the plugin root') .option('-b, --build-version ', 'Version for the build output') .option('-k, --kibana-version ', 'Kibana version for the build output') .action(taskRunner(function (command, files) { run('build', { + buildDestination: command.buildDestination, buildVersion: command.buildVersion, kibanaVersion: command.kibanaVersion, files: files, diff --git a/packages/kbn-plugin-helpers/tasks/build/README.md b/packages/kbn-plugin-helpers/tasks/build/README.md index 0ee582d6b533..2906525c872b 100644 --- a/packages/kbn-plugin-helpers/tasks/build/README.md +++ b/packages/kbn-plugin-helpers/tasks/build/README.md @@ -7,3 +7,13 @@ be found at: ``` build/{pkg.name}-{pkg.version}.zip ``` + +If you use the `--build-destination` flag, the resulting build will be found +in that directory. + +``` +plugin-helpers build --build-destination build/some/child/path + +# This will place the resulting build at: +build/some/child/path/{pkg.name}-{pkg.version}.zip +``` \ No newline at end of file diff --git a/packages/kbn-plugin-helpers/tasks/build/build_action.js b/packages/kbn-plugin-helpers/tasks/build/build_action.js index ab0b503c929e..d62429e247ea 100644 --- a/packages/kbn-plugin-helpers/tasks/build/build_action.js +++ b/packages/kbn-plugin-helpers/tasks/build/build_action.js @@ -1,3 +1,5 @@ +var join = require('path').join; +var resolve = require('path').resolve; var inquirer = require('inquirer'); var createBuild = require('./create_build'); @@ -7,6 +9,7 @@ module.exports = function (plugin, run, options) { var buildVersion = plugin.version; var kibanaVersion = (plugin.pkg.kibana && plugin.pkg.kibana.version) || plugin.pkg.version; var buildFiles = plugin.buildSourcePatterns; + var buildTarget = join(plugin.root, 'build'); // allow source files to be overridden if (options.files && options.files.length) { @@ -14,15 +17,16 @@ module.exports = function (plugin, run, options) { } // allow options to override plugin info + if (options.buildDestination) buildTarget = resolve(plugin.root, options.buildDestination); if (options.buildVersion) buildVersion = options.buildVersion; if (options.kibanaVersion) kibanaVersion = options.kibanaVersion; if (kibanaVersion === 'kibana') { return askForKibanaVersion().then(function (customKibanaVersion) { - return createBuild(plugin, buildVersion, customKibanaVersion, buildFiles); + return createBuild(plugin, buildTarget, buildVersion, customKibanaVersion, buildFiles); }); } else { - return createBuild(plugin, buildVersion, kibanaVersion, buildFiles); + return createBuild(plugin, buildTarget, buildVersion, kibanaVersion, buildFiles); } }; diff --git a/packages/kbn-plugin-helpers/tasks/build/build_action.spec.js b/packages/kbn-plugin-helpers/tasks/build/build_action.spec.js index bbbf8dab28a5..3f51136ad156 100644 --- a/packages/kbn-plugin-helpers/tasks/build/build_action.spec.js +++ b/packages/kbn-plugin-helpers/tasks/build/build_action.spec.js @@ -44,7 +44,7 @@ describe('build_action', () => { return buildAction(PLUGIN, noop, options).then(() => { expect(mockBuild.mock.calls).toHaveLength(1); - const [ plugin, buildVersion, kibanaVersion, files ] = mockBuild.mock.calls[0]; + const [ plugin, buildTarget, buildVersion, kibanaVersion, files ] = mockBuild.mock.calls[0]; expect(buildVersion).toBe('1.2.3'); expect(kibanaVersion).toBe('4.5.6'); }); @@ -53,7 +53,7 @@ describe('build_action', () => { it('uses default file list without files option', function () { return buildAction(PLUGIN).then(() => { expect(mockBuild.mock.calls).toHaveLength(1); - const [ plugin, buildVersion, kibanaVersion, files ] = mockBuild.mock.calls[0]; + const [ plugin, buildTarget, buildVersion, kibanaVersion, files ] = mockBuild.mock.calls[0]; PLUGIN.buildSourcePatterns.forEach(file => expect(files).toContain(file)); }); }); @@ -70,7 +70,7 @@ describe('build_action', () => { return buildAction(PLUGIN, noop, options).then(() => { expect(mockBuild.mock.calls).toHaveLength(1); - const [ plugin, buildVersion, kibanaVersion, files ] = mockBuild.mock.calls[0]; + const [ plugin, buildTarget, buildVersion, kibanaVersion, files ] = mockBuild.mock.calls[0]; options.files.forEach(file => expect(files).toContain(file)); }); }); diff --git a/packages/kbn-plugin-helpers/tasks/build/create_build.js b/packages/kbn-plugin-helpers/tasks/build/create_build.js index e53d0777686d..489a75c83a6a 100644 --- a/packages/kbn-plugin-helpers/tasks/build/create_build.js +++ b/packages/kbn-plugin-helpers/tasks/build/create_build.js @@ -5,10 +5,9 @@ var zip = require('gulp-zip'); var map = require('through2-map').obj; var rename = require('gulp-rename'); -module.exports = function createBuild(plugin, buildVersion, kibanaVersion, files) { +module.exports = function createBuild(plugin, buildTarget, buildVersion, kibanaVersion, files) { var buildId = `${plugin.id}-${buildVersion}`; var buildSource = plugin.root; - var buildTarget = join(plugin.root, 'build'); return new Promise(function (resolve) { vfs