mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[build] move to absolute paths and improve fpm/pleaserun support
This commit is contained in:
parent
e1a04f9514
commit
bc3529ec65
17 changed files with 124 additions and 105 deletions
|
@ -4,31 +4,26 @@ module.exports = function createPackages(grunt) {
|
|||
let { execFile } = require('child_process');
|
||||
let { all, fromNode } = require('bluebird');
|
||||
|
||||
let rootDir = config.get('root');
|
||||
let buildDir = resolve(rootDir, 'build');
|
||||
|
||||
let buildPath = resolve(config.get('root'), 'build');
|
||||
let exec = async (cmd, args) => {
|
||||
grunt.log.writeln(` > ${cmd} ${args.join(' ')}`);
|
||||
await fromNode(cb => execFile(cmd, args, { cwd: buildDir }, cb));
|
||||
await fromNode(cb => execFile(cmd, args, { cwd: buildPath }, cb));
|
||||
};
|
||||
|
||||
|
||||
let archives = async (platform) => {
|
||||
let tarPath = resolve(rootDir, platform.tarPath);
|
||||
let zipPath = resolve(rootDir, platform.zipPath);
|
||||
|
||||
// kibana.tar.gz
|
||||
await exec('tar', ['-zchf', tarPath, platform.buildName]);
|
||||
await exec('tar', ['-zchf', platform.tarPath, platform.buildName]);
|
||||
|
||||
// kibana.zip
|
||||
if (/windows/.test(platform.name)) {
|
||||
await exec('zip', ['-rq', '-ll', zipPath, platform.buildName]);
|
||||
await exec('zip', ['-rq', '-ll', platform.zipPath, platform.buildName]);
|
||||
} else {
|
||||
await exec('zip', ['-rq', zipPath, platform.buildName]);
|
||||
await exec('zip', ['-rq', platform.zipPath, platform.buildName]);
|
||||
}
|
||||
};
|
||||
|
||||
grunt.registerTask('build:archives', function () {
|
||||
grunt.registerTask('_build:archives', function () {
|
||||
|
||||
all(
|
||||
grunt.config.get('platforms')
|
||||
|
|
|
@ -3,7 +3,7 @@ module.exports = function (grunt) {
|
|||
var file = 'build/kibana/src/cli/index.js';
|
||||
var blurb = `require('babel/register')(require('../optimize/babelOptions'));\n`;
|
||||
|
||||
grunt.registerTask('build:cliIndex', function () {
|
||||
grunt.registerTask('_build:cliIndex', function () {
|
||||
var before = grunt.file.read(file);
|
||||
var after = before.replace(blurb, '');
|
||||
|
||||
|
|
|
@ -13,11 +13,6 @@ module.exports = function (grunt) {
|
|||
|
||||
let start = async (platform) => {
|
||||
let finalDir = platform.nodeDir;
|
||||
if (!grunt.file.isPathAbsolute(finalDir)) {
|
||||
// since we are using fs module function we need absolute paths
|
||||
finalDir = resolve(grunt.config.get('root'), finalDir);
|
||||
}
|
||||
|
||||
let downloadDir = `${finalDir}.temp`;
|
||||
|
||||
if (grunt.file.isDir(platform.nodeDir)) {
|
||||
|
@ -75,11 +70,11 @@ module.exports = function (grunt) {
|
|||
grunt.log.ok(`downloading ${platform.name} - ${mb} mb`);
|
||||
};
|
||||
|
||||
grunt.registerTask('build:downloadNodes:start', function () {
|
||||
grunt.registerTask('_build:downloadNodes:start', function () {
|
||||
map(platforms, start).nodeify(this.async());
|
||||
});
|
||||
|
||||
grunt.registerTask('build:downloadNodes:finish', function () {
|
||||
grunt.registerTask('_build:downloadNodes:finish', function () {
|
||||
map(activeDownloads, async (platform) => {
|
||||
await platform.downloadPromise;
|
||||
grunt.log.ok(`${platform.name} download complete`);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
module.exports = function (grunt) {
|
||||
var exec = require('child_process').execSync;
|
||||
grunt.registerTask('build:getProps', function () {
|
||||
grunt.registerTask('_build:getProps', function () {
|
||||
grunt.config.set('buildSha', String(exec('git rev-parse HEAD')).trim());
|
||||
grunt.config.set('buildNum', parseFloat(String(exec('git log --format="%h" | wc -l')).trim()));
|
||||
});
|
||||
|
|
|
@ -2,29 +2,28 @@ module.exports = function (grunt) {
|
|||
let { flatten } = require('lodash');
|
||||
|
||||
grunt.registerTask('build', flatten([
|
||||
'build:getProps',
|
||||
'_build:getProps',
|
||||
'clean:build',
|
||||
'clean:target',
|
||||
'build:downloadNodes:start',
|
||||
'_build:downloadNodes:start',
|
||||
'copy:devSource',
|
||||
'babel:build',
|
||||
'build:cliIndex',
|
||||
'build:installedPlugins',
|
||||
'build:packageJson',
|
||||
'build:readme',
|
||||
'build:installNpmDeps',
|
||||
'_build:cliIndex',
|
||||
'_build:installedPlugins',
|
||||
'_build:packageJson',
|
||||
'_build:readme',
|
||||
'_build:installNpmDeps',
|
||||
'clean:testsFromModules',
|
||||
'clean:deepModules',
|
||||
'run:optimizeBuild',
|
||||
'stop:optimizeBuild',
|
||||
'build:downloadNodes:finish',
|
||||
'build:versionedLinks',
|
||||
'build:archives',
|
||||
'_build:downloadNodes:finish',
|
||||
'_build:versionedLinks',
|
||||
'_build:archives',
|
||||
!grunt.option('os-packages') ? [] : [
|
||||
'build:pleaseRun',
|
||||
'build:pleaseManageUser',
|
||||
'build:osPackages',
|
||||
'_build:pleaseRun',
|
||||
'_build:osPackages',
|
||||
],
|
||||
'build:shasums'
|
||||
'_build:shasums'
|
||||
]));
|
||||
};
|
||||
|
|
|
@ -2,7 +2,7 @@ module.exports = function (grunt) {
|
|||
var { exec } = require('child_process');
|
||||
var { resolve } = require('path');
|
||||
|
||||
grunt.registerTask('build:installNpmDeps', function () {
|
||||
grunt.registerTask('_build:installNpmDeps', function () {
|
||||
grunt.file.mkdir('build/kibana/node_modules');
|
||||
|
||||
exec('npm install --production --no-optional', {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
module.exports = function (grunt) {
|
||||
grunt.registerTask('build:installedPlugins', function () {
|
||||
grunt.registerTask('_build:installedPlugins', function () {
|
||||
grunt.file.mkdir('build/kibana/installedPlugins');
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,49 +1,47 @@
|
|||
module.exports = function (grunt) {
|
||||
let { resolve } = require('path');
|
||||
let { indexBy } = require('lodash');
|
||||
let { execFileSync } = require('child_process');
|
||||
|
||||
let { config } = grunt;
|
||||
let exec = require('../utils/exec');
|
||||
let targetDir = config.get('target');
|
||||
let version = config.get('pkg.version');
|
||||
let userScriptsDir = config.get('userScriptsDir');
|
||||
let servicesByName = indexBy(config.get('services'), 'id');
|
||||
let servicesByName = indexBy(config.get('services'), 'name');
|
||||
|
||||
grunt.registerTask('build:osPackages', function () {
|
||||
grunt.registerTask('_build:osPackages', function () {
|
||||
grunt.config.get('platforms').forEach(({ name, buildDir }) => {
|
||||
// TODO(sissel): Check if `fpm` is available
|
||||
|
||||
let arch = /x64$/.test(name) ? 'x86_64' : 'i686';
|
||||
let files = buildDir + '/=/opt/kibana';
|
||||
let fpm = args => execFileSync('fpm', args);
|
||||
let fpm = args => exec('fpm', args);
|
||||
|
||||
let args = [
|
||||
'-f',
|
||||
'-p', targetDir,
|
||||
'-s', 'dir',
|
||||
'-n', 'kibana',
|
||||
'-v', version,
|
||||
'--force',
|
||||
'--package', targetDir,
|
||||
'-s', 'dir', // input type
|
||||
'--name', 'kibana',
|
||||
'--version', version,
|
||||
'--after-install', resolve(userScriptsDir, 'installer.sh'),
|
||||
'--after-remove', resolve(userScriptsDir, 'remover.sh'),
|
||||
'--config-files', '/opt/kibana/config/kibana.yml'
|
||||
];
|
||||
|
||||
let files = buildDir + '/=/opt/kibana';
|
||||
grunt.file.mkdir(targetDir);
|
||||
|
||||
// TODO(sissel): Check if `fpm` is available
|
||||
// kibana.rpm and kibana.deb
|
||||
if (/linux-x(86|64)$/.test(name)) {
|
||||
// kibana.rpm and kibana.deb
|
||||
let sysv = servicesByName.sysv;
|
||||
let sysvInit = sysv.outputDir + '/etc/=/etc/';
|
||||
fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files, sysvInit));
|
||||
fpm(args.concat('-t', 'deb', '-a', arch, files, sysvInit));
|
||||
let sysv = servicesByName.sysv.outputDir + '/etc/=/etc/';
|
||||
fpm(args.concat('-t', 'rpm', '-a', arch, '--rpm-os', 'linux', files, sysv));
|
||||
fpm(args.concat('-t', 'deb', '-a', arch, files, sysv));
|
||||
return;
|
||||
}
|
||||
|
||||
// kibana.pkg
|
||||
if (/darwin-x(86|64)$/.test(name)) {
|
||||
// kibana.pkg
|
||||
let launchd = servicesByName.launchd;
|
||||
let launchdInit = launchd.outputDir + '/=/';
|
||||
fpm(args.concat('-t', 'osxpkg', '-a', arch, files, launchdInit));
|
||||
let launchd = servicesByName.launchd.outputDir + '/=/';
|
||||
fpm(args.concat('-t', 'osxpkg', '-a', arch, files, launchd));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ module.exports = function (grunt) {
|
|||
let pkg = grunt.config.get('pkg');
|
||||
let deepModules = grunt.config.get('deepModules');
|
||||
|
||||
grunt.registerTask('build:packageJson', function () {
|
||||
grunt.registerTask('_build:packageJson', function () {
|
||||
|
||||
grunt.file.write(
|
||||
'build/kibana/package.json',
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
module.exports = function (grunt) {
|
||||
let { execFileSync } = require('child_process');
|
||||
let { resolve } = require('path');
|
||||
let userScriptsDir = grunt.config.get('userScriptsDir');
|
||||
|
||||
grunt.registerTask('build:pleaseManageUser', function () {
|
||||
grunt.file.mkdir(userScriptsDir);
|
||||
execFileSync('please-manage-user', ['--output', userScriptsDir, 'kibana']);
|
||||
});
|
||||
};
|
|
@ -1,17 +1,19 @@
|
|||
var { resolve } = require('path');
|
||||
var { execFileSync } = require('child_process');
|
||||
|
||||
module.exports = function createServices(grunt) {
|
||||
grunt.registerTask('build:pleaserun', function () {
|
||||
var { resolve } = require('path');
|
||||
|
||||
let exec = require('../utils/exec');
|
||||
let userScriptsPath = grunt.config.get('userScriptsPath');
|
||||
|
||||
grunt.registerTask('_build:pleaseRun', function () {
|
||||
// TODO(sissel): Detect if 'pleaserun' is found, and provide a useful error
|
||||
// to the user if it is missing.
|
||||
|
||||
grunt.config.get('services').forEach(function (service) {
|
||||
grunt.file.mkdir(service.outDir);
|
||||
execFileSync('pleaserun', [
|
||||
grunt.file.mkdir(service.outputDir);
|
||||
exec('pleaserun', [
|
||||
'--install',
|
||||
'--no-install-actions',
|
||||
'--install-prefix', service.outDir,
|
||||
'--install-prefix', service.outputDir,
|
||||
'--overwrite',
|
||||
'--user', 'kibana',
|
||||
'--sysv-log-path', '/var/log/kibana/',
|
||||
|
@ -21,5 +23,8 @@ module.exports = function createServices(grunt) {
|
|||
]);
|
||||
});
|
||||
|
||||
grunt.file.mkdir(userScriptsPath);
|
||||
exec('please-manage-user', ['--output', userScriptsPath, 'kibana']);
|
||||
|
||||
});
|
||||
};
|
||||
|
|
|
@ -13,7 +13,7 @@ TextRenderer.prototype.heading = function (text, level, raw) {
|
|||
|
||||
module.exports = function (grunt) {
|
||||
|
||||
grunt.registerTask('build:readme', function () {
|
||||
grunt.registerTask('_build:readme', function () {
|
||||
let transform = function (input) {
|
||||
let output = input.replace(/<\!\-\- [^\-]+ \-\->/g, '\n');
|
||||
output = marked(output);
|
||||
|
|
|
@ -3,7 +3,7 @@ var readdir = promisify(require('fs').readdir);
|
|||
var exec = promisify(require('child_process').exec);
|
||||
|
||||
module.exports = function (grunt) {
|
||||
grunt.registerTask('build:shasums', function () {
|
||||
grunt.registerTask('_build:shasums', function () {
|
||||
var targetDir = grunt.config.get('target');
|
||||
|
||||
readdir(targetDir)
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
module.exports = function (grunt) {
|
||||
let { execFileSync } = require('child_process');
|
||||
let { basename, resolve } = require('path');
|
||||
let { forOwn } = require('lodash');
|
||||
|
||||
grunt.registerTask('build:versionedLinks', function () {
|
||||
let buildFiles = grunt.file.expand('build/kibana/{*,.*}');
|
||||
let rootDir = grunt.config.get('root');
|
||||
let exec = require('../utils/exec').silent;
|
||||
|
||||
let buildMap = buildFiles.reduce(function (map, file) {
|
||||
map[file] = basename(file);
|
||||
return map;
|
||||
}, {});
|
||||
grunt.registerTask('_build:versionedLinks', function () {
|
||||
let rootPath = grunt.config.get('root');
|
||||
|
||||
let ln = (source, link) => {
|
||||
execFileSync('ln', [
|
||||
'-s',
|
||||
resolve(rootDir, source),
|
||||
resolve(rootDir, link)
|
||||
]);
|
||||
};
|
||||
let buildFiles = grunt.file.expand('build/kibana/{*,.*}')
|
||||
.map(function (file) {
|
||||
return resolve(rootPath, file);
|
||||
});
|
||||
|
||||
console.log(buildFiles);
|
||||
|
||||
let ln = (source, link) => exec('ln', ['-s', source, link]);
|
||||
|
||||
grunt.config.get('platforms').forEach(function (platform) {
|
||||
grunt.file.mkdir(platform.buildDir);
|
||||
forOwn(buildMap, function (link, source) {
|
||||
ln(source, resolve(platform.buildDir, link));
|
||||
|
||||
// link all files at the root of the build
|
||||
buildFiles.forEach(function (source) {
|
||||
ln(source, resolve(platform.buildDir, basename(source)));
|
||||
});
|
||||
|
||||
// link the node modules
|
||||
ln(platform.nodeDir, resolve(platform.buildDir, 'node'));
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
module.exports = function (grunt) {
|
||||
let { resolve } = require('path');
|
||||
|
||||
let version = grunt.config.get('pkg.version');
|
||||
let nodeVersion = grunt.config.get('nodeVersion');
|
||||
let rootPath = grunt.config.get('root');
|
||||
let baseUri = `https://iojs.org/dist/v${nodeVersion}`;
|
||||
|
||||
return [
|
||||
|
@ -12,15 +15,23 @@ module.exports = function (grunt) {
|
|||
let win = name === 'windows';
|
||||
|
||||
let nodeUrl = win ? `${baseUri}/win-x64/iojs.exe` : `${baseUri}/iojs-v${nodeVersion}-${name}.tar.gz`;
|
||||
let nodeDir = `.node_binaries/${nodeVersion}/${name}`;
|
||||
let nodeDir = resolve(rootPath, `.node_binaries/${nodeVersion}/${name}`);
|
||||
|
||||
let buildName = `kibana-${version}-${name}`;
|
||||
let buildDir = `build/${buildName}`;
|
||||
let tarName = `${buildName}.tar.gz`;
|
||||
let tarPath = `target/${tarName}`;
|
||||
let zipName = `${buildName}.zip`;
|
||||
let zipPath = `target/${zipName}`;
|
||||
let buildDir = resolve(rootPath, `build/${buildName}`);
|
||||
|
||||
return { name, buildName, nodeUrl, tarName, tarPath, zipName, zipPath, buildDir, nodeDir };
|
||||
let tarName = `${buildName}.tar.gz`;
|
||||
let tarPath = resolve(rootPath, `target/${tarName}`);
|
||||
|
||||
let zipName = `${buildName}.zip`;
|
||||
let zipPath = resolve(rootPath, `target/${zipName}`);
|
||||
|
||||
return {
|
||||
name, win,
|
||||
nodeUrl, nodeDir,
|
||||
buildName, buildDir,
|
||||
tarName, tarPath,
|
||||
zipName, zipPath,
|
||||
};
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
module.exports = function (grunt) {
|
||||
[
|
||||
let { resolve } = require('path');
|
||||
let rootDir = grunt.config.get('root');
|
||||
|
||||
return [
|
||||
['launchd', '10.9'],
|
||||
['upstart', '1.5'],
|
||||
['systemd', 'default'],
|
||||
['sysv', 'lsb-3.1']
|
||||
]
|
||||
.map(function ([ name, version ]) {
|
||||
return {
|
||||
name,
|
||||
version,
|
||||
outputDir: `build/services/${name}` };
|
||||
return { name, version, outputDir: resolve(rootDir, `build/services/${name}`) };
|
||||
});
|
||||
};
|
||||
|
|
26
tasks/utils/exec.js
Normal file
26
tasks/utils/exec.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
let { execFileSync } = require('child_process');
|
||||
|
||||
function exec(cmd, args, opts) {
|
||||
console.log(' >', cmd, args.join(' '));
|
||||
exec.silent(cmd, args, opts);
|
||||
};
|
||||
|
||||
exec.silent = function (cmd, args, opts) {
|
||||
opts = opts || {};
|
||||
if (!opts.stdio) opts.stdio = ['ignore', 1, 2];
|
||||
try {
|
||||
execFileSync(cmd, args, opts);
|
||||
} catch (e) {
|
||||
if (opts.stdio[1] !== 1) {
|
||||
console.log(e.stdout + '');
|
||||
}
|
||||
|
||||
if (opts.stdio[2] !== 2) {
|
||||
console.log(e.stderr + '');
|
||||
}
|
||||
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = exec;
|
Loading…
Add table
Add a link
Reference in a new issue