mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[build/downloadNode] async/await
This commit is contained in:
parent
fb560cf796
commit
ee83c4103c
3 changed files with 87 additions and 67 deletions
|
@ -26,8 +26,13 @@ module.exports = function (grunt) {
|
|||
}
|
||||
}()),
|
||||
|
||||
nodeVersion: '0.10.35',
|
||||
platforms: ['darwin-x64', 'linux-x64', 'linux-x86', 'windows'],
|
||||
nodeVersion: '2.5.0',
|
||||
platforms: [
|
||||
'darwin-x64',
|
||||
'linux-x64',
|
||||
'linux-x86',
|
||||
'windows'
|
||||
],
|
||||
services: [
|
||||
['launchd', '10.9'],
|
||||
['upstart', '1.5'],
|
||||
|
|
80
tasks/downloadNodeBins.js
Normal file
80
tasks/downloadNodeBins.js
Normal file
|
@ -0,0 +1,80 @@
|
|||
module.exports = function (grunt) {
|
||||
grunt.registerTask('downloadNodeBins', function () {
|
||||
let { map, fromNode, promisify } = require('bluebird');
|
||||
let { resolve } = require('path');
|
||||
let { createWriteStream } = require('fs');
|
||||
let { createGunzip } = require('zlib');
|
||||
let { Extract } = require('tar');
|
||||
|
||||
let mkdirp = promisify(require('mkdirp'));
|
||||
let rename = promisify(require('fs').rename);
|
||||
let get = (uri) => fromNode(cb => require('wreck').request('GET', uri, null, cb));
|
||||
|
||||
let exists = (path) => fromNode(cb => {
|
||||
require('fs').stat(path, err => cb(null, !err));
|
||||
});
|
||||
|
||||
let platforms = grunt.config.get('platforms');
|
||||
let nodeVersion = grunt.config.get('nodeVersion');
|
||||
|
||||
let nodeDir = require('requirefrom')('src/utils')('fromRoot')(`.node_binaries/${nodeVersion}`);
|
||||
let baseUri = `https://iojs.org/dist/v${nodeVersion}`;
|
||||
|
||||
let writeTar = async (to, from) => {
|
||||
await fromNode(cb => {
|
||||
from
|
||||
.pipe(createGunzip())
|
||||
.on('error', cb)
|
||||
.pipe(new Extract({ path: to, strip: 1 }))
|
||||
.on('error', cb)
|
||||
.on('end', cb);
|
||||
});
|
||||
};
|
||||
|
||||
let writeExe = async (to, from) => {
|
||||
let winBinDir = resolve(to, 'bin');
|
||||
await mkdirp(winBinDir);
|
||||
await fromNode(cb => {
|
||||
from
|
||||
.pipe(createWriteStream(resolve(winBinDir, 'node.exe')))
|
||||
.on('error', cb)
|
||||
.on('finish', cb);
|
||||
});
|
||||
};
|
||||
|
||||
mkdirp(nodeDir)
|
||||
.then(function () {
|
||||
grunt.log.ok(`downloading node binaries for ${platforms.join(', ')}`);
|
||||
return platforms;
|
||||
})
|
||||
.map(async function (platform) {
|
||||
let finalDir = resolve(nodeDir, `${platform}`);
|
||||
let downloadDir = `${finalDir}.temp`;
|
||||
|
||||
if (await exists(finalDir)) {
|
||||
grunt.log.ok(`${platform} download exists`);
|
||||
return;
|
||||
}
|
||||
|
||||
let uri;
|
||||
if (platform === 'windows') {
|
||||
uri = `${baseUri}/win-x64/iojs.exe`;
|
||||
} else {
|
||||
uri = `${baseUri}/iojs-v${nodeVersion}-${platform}.tar.gz`;
|
||||
}
|
||||
|
||||
let resp = await get('GET', uri);
|
||||
if (resp.statusCode !== 200) {
|
||||
throw new Error(uri + ' failed with a ' + resp.statusCode);
|
||||
}
|
||||
|
||||
let write = platform === 'windows' ? writeExe : writeTar;
|
||||
await write(downloadDir, resp);
|
||||
await rename(downloadDir, finalDir);
|
||||
|
||||
grunt.log.ok(`${platform} download complete`);
|
||||
})
|
||||
.nodeify(this.async());
|
||||
});
|
||||
};
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
var _ = require('lodash');
|
||||
var zlib = require('zlib');
|
||||
var tar = require('tar');
|
||||
var request = require('request');
|
||||
var mkdirp = require('mkdirp');
|
||||
var fs = require('fs');
|
||||
var { join } = require('path');
|
||||
var filesPatern = _.template('node-v<%- version %>-<%- platform %>.tar.gz');
|
||||
var urlPattern = _.template('http://nodejs.org/dist/v<%- version %>/<%- file %>');
|
||||
var Promise = require('bluebird');
|
||||
|
||||
module.exports = function (grunt) {
|
||||
grunt.registerTask('download_node_binaries', 'Download the node.js binaries', function () {
|
||||
var platforms = _.without(grunt.config.get('platforms'), 'windows');
|
||||
var rootPath = grunt.config.get('root');
|
||||
var version = grunt.config.get('nodeVersion');
|
||||
|
||||
var handle404 = function (response) {
|
||||
if (response.statusCode !== 200) {
|
||||
throw new Error(response.request.href + ' failed with a ' + response.statusCode);
|
||||
}
|
||||
};
|
||||
|
||||
var downloadWindows = function (cb) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var dest = join(rootPath, '.node_binaries', 'windows');
|
||||
fs.stat(dest, function (err) {
|
||||
if (!err) return resolve(); // skip downloading if we already have them
|
||||
var url = urlPattern({ version: version, file: 'node.exe'});
|
||||
mkdirp(dest, function (err) {
|
||||
if (err) return reject(err);
|
||||
var out = fs.createWriteStream(join(dest, 'node.exe'));
|
||||
out.on('close', resolve).on('error', reject);
|
||||
var req = request.get(url);
|
||||
req.on('response', handle404);
|
||||
req.pipe(out);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var download = function (platform) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var dest = join(rootPath, '.node_binaries', platform);
|
||||
fs.stat(dest, function (err) {
|
||||
if (!err) return resolve(); // skip downloading if we already have them
|
||||
var file = filesPatern({ version: version, platform: platform });
|
||||
var url = urlPattern({ version: version, file: file });
|
||||
mkdirp(dest, function (err) {
|
||||
if (err) return reject(err);
|
||||
var unzip = zlib.createGunzip();
|
||||
var out = new tar.Extract({ path: dest, strip: 1 });
|
||||
out.on('close', resolve).on('error', reject);
|
||||
var req = request.get(url);
|
||||
req.on('response', handle404);
|
||||
req.pipe(unzip).pipe(out);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
return Promise.map(platforms, download).then(downloadWindows).nodeify(this.async());
|
||||
});
|
||||
};
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue