提交 407259bd 编写于 作者: J Joao Moreno

es6ify gulpfile.vscode.js

上级 64f4fd73
......@@ -3,38 +3,40 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
var gulp = require('gulp');
var fs = require('fs');
var path = require('path');
var es = require('event-stream');
var azure = require('gulp-azure-storage');
var electron = require('gulp-atom-electron');
var symdest = require('gulp-symdest');
var rename = require('gulp-rename');
var replace = require('gulp-replace');
var filter = require('gulp-filter');
var json = require('gulp-json-editor');
var remote = require('gulp-remote-src');
var shell = require("gulp-shell");
var _ = require('underscore');
var packageJson = require('../package.json');
var shrinkwrap = require('../npm-shrinkwrap.json');
var util = require('./lib/util');
var buildfile = require('../src/buildfile');
var common = require('./gulpfile.common');
var nlsDev = require('vscode-nls-dev');
var root = path.dirname(__dirname);
var build = path.join(root, '.build');
var commit = util.getVersion(root);
var dependencies = Object.keys(shrinkwrap.dependencies);
var baseModules = Object.keys(process.binding('natives')).filter(function (n) { return !/^_|\//.test(n); });
var nodeModules = ['electron'].concat(dependencies).concat(baseModules);
nodeModules.push('original-fs'); // provided by electron to have original fs functionality without ASAR support
'use strict';
const gulp = require('gulp');
const fs = require('fs');
const path = require('path');
const es = require('event-stream');
const azure = require('gulp-azure-storage');
const electron = require('gulp-atom-electron');
const symdest = require('gulp-symdest');
const rename = require('gulp-rename');
const replace = require('gulp-replace');
const filter = require('gulp-filter');
const json = require('gulp-json-editor');
const shell = require("gulp-shell");
const _ = require('underscore');
const packageJson = require('../package.json');
const shrinkwrap = require('../npm-shrinkwrap.json');
const util = require('./lib/util');
const buildfile = require('../src/buildfile');
const common = require('./gulpfile.common');
const nlsDev = require('vscode-nls-dev');
const root = path.dirname(__dirname);
const build = path.join(root, '.build');
const commit = util.getVersion(root);
const dependencies = Object.keys(shrinkwrap.dependencies);
const baseModules = Object.keys(process.binding('natives')).filter(n => !/^_|\//.test(n));
const nodeModules = ['electron', 'original-fs']
.concat(dependencies)
.concat(baseModules);
// Build
var vscodeEntryPoints = _.flatten([
const vscodeEntryPoints = _.flatten([
buildfile.entrypoint('vs/workbench/workbench.main'),
buildfile.base,
buildfile.editor,
......@@ -43,7 +45,7 @@ var vscodeEntryPoints = _.flatten([
buildfile.code
]);
var vscodeResources = [
const vscodeResources = [
'out-build/main.js',
'out-build/cli.js',
'out-build/bootstrap.js',
......@@ -69,7 +71,7 @@ var vscodeResources = [
'!**/test/**'
];
var BUNDLED_FILE_HEADER = [
const BUNDLED_FILE_HEADER = [
'/*!--------------------------------------------------------',
' * Copyright (C) Microsoft Corporation. All rights reserved.',
' *--------------------------------------------------------*/'
......@@ -89,11 +91,10 @@ gulp.task('clean-minified-vscode', util.rimraf('out-vscode-min'));
gulp.task('minify-vscode', ['clean-minified-vscode', 'optimize-vscode'], common.minifyTask('out-vscode', true));
// Package
var product = require('../product.json');
var darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
var linuxPackageRevision = getEpochTime();
const product = require('../product.json');
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
var config = {
const config = {
version: packageJson.electronVersion,
productAppName: product.nameLong,
companyName: 'Microsoft Corporation',
......@@ -114,52 +115,29 @@ var config = {
token: process.env['GITHUB_TOKEN'] || void 0
};
gulp.task('electron', function () {
gulp.task('electron', () => {
// Force windows to use ia32
var arch = process.env.VSCODE_ELECTRON_PLATFORM || (process.platform === 'win32' ? 'ia32' : process.arch);
const arch = process.env.VSCODE_ELECTRON_PLATFORM || (process.platform === 'win32' ? 'ia32' : process.arch);
return electron.dest(path.join(build, 'electron'), _.extend({}, config, { arch: arch, ffmpegChromium: true }));
});
function mixinProduct() {
var product;
var url = process.env['PRODUCT_JSON_URL'];
if (url) {
var opts = { base: '' };
var username = process.env['PRODUCT_JSON_USERNAME'];
var password = process.env['PRODUCT_JSON_PASSWORD'];
if (username || password) {
opts.auth = { username: username || '', password: password || '' };
}
product = remote(url, opts);
} else {
product = gulp.src(['product.json'], { base: '.' });
}
return product.pipe(json({
commit: commit,
date: new Date().toISOString()
}));
}
var languages = ['chs', 'cht', 'jpn', 'kor', 'deu', 'fra', 'esn', 'rus', 'ita'];
const languages = ['chs', 'cht', 'jpn', 'kor', 'deu', 'fra', 'esn', 'rus', 'ita'];
function packageTask(platform, arch, opts) {
opts = opts || {};
var destination = path.join(path.dirname(root), 'VSCode') + (platform ? '-' + platform : '') + (arch ? '-' + arch : '');
const destination = path.join(path.dirname(root), 'VSCode') + (platform ? '-' + platform : '') + (arch ? '-' + arch : '');
platform = platform || process.platform;
arch = platform === 'win32' ? 'ia32' : arch;
return function () {
var out = opts.minified ? 'out-vscode-min' : 'out-vscode';
return () => {
const out = opts.minified ? 'out-vscode-min' : 'out-vscode';
var src = gulp.src(out + '/**', { base: '.' })
const src = gulp.src(out + '/**', { base: '.' })
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }))
.pipe(util.setExecutableBit(['**/*.sh']));
var extensions = gulp.src([
const extensions = gulp.src([
'extensions/**',
'!extensions/*/src/**',
'!extensions/*/out/**/test/**',
......@@ -175,41 +153,46 @@ function packageTask(platform, arch, opts) {
'!extensions/vscode-colorize-tests/**'
], { base: '.' });
var sources = es.merge(src, extensions)
const sources = es.merge(src, extensions)
.pipe(nlsDev.createAdditionalLanguageFiles(languages, path.join(__dirname, '..', 'i18n')))
.pipe(filter(['**', '!**/*.js.map']))
.pipe(util.handleAzureJson({ platform: platform }));
var version = packageJson.version;
var quality = product.quality;
let version = packageJson.version;
const quality = product.quality;
if (quality && quality !== 'stable') {
version += '-' + quality;
}
var packageJsonStream = gulp.src(['package.json'], { base: '.' }).pipe(json({
name: product.nameShort,
version: version
}));
const name = product.nameShort;
const packageJsonStream = gulp.src(['package.json'], { base: '.' })
.pipe(json({ name, version }));
const date = new Date().toISOString();
const productJsonStream = gulp.src(['product.json'], { base: '.' })
.pipe(json({ commit, date }));
var license = gulp.src(['Credits_*', 'LICENSE.txt', 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.' });
var api = gulp.src('src/vs/vscode.d.ts').pipe(rename('out/vs/vscode.d.ts'));
const license = gulp.src(['Credits_*', 'LICENSE.txt', 'ThirdPartyNotices.txt', 'licenses/**'], { base: '.' });
var depsSrc = _.flatten(dependencies
// TODO the API should be copied to `out` during compile, not here
const api = gulp.src('src/vs/vscode.d.ts').pipe(rename('out/vs/vscode.d.ts'));
const depsSrc = _.flatten(dependencies
.map(function (d) { return ['node_modules/' + d + '/**', '!node_modules/' + d + '/**/{test,tests}/**']; }));
var deps = gulp.src(depsSrc, { base: '.', dot: true })
const deps = gulp.src(depsSrc, { base: '.', dot: true })
.pipe(util.cleanNodeModule('fsevents', ['binding.gyp', 'fsevents.cc', 'build/**', 'src/**', 'test/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('oniguruma', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('windows-mutex', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('native-keymap', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('pty.js', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['build/Release/**']));
var all = es.merge(
api,
let all = es.merge(
packageJsonStream,
mixinProduct(),
productJsonStream,
license,
api,
sources,
deps
);
......@@ -219,13 +202,13 @@ function packageTask(platform, arch, opts) {
} else if (platform === 'linux') {
all = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' }));
} else if (platform === 'darwin') {
var shortcut = gulp.src('resources/darwin/bin/code.sh')
const shortcut = gulp.src('resources/darwin/bin/code.sh')
.pipe(rename('bin/code'));
all = es.merge(all, shortcut);
}
var result = all
let result = all
.pipe(util.skipDirectories())
.pipe(util.fixWin32DirectoryPermissions())
.pipe(electron(_.extend({}, config, { platform: platform, arch: arch, ffmpegChromium: true })))
......@@ -255,33 +238,31 @@ function getDebPackageArch(arch) {
return { x64: 'amd64', ia32: 'i386' }[arch];
}
function getEpochTime() {
return Math.floor(new Date().getTime() / 1000);
}
const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
function prepareDebPackage(arch) {
var binaryDir = '../VSCode-linux-' + arch;
var debArch = getDebPackageArch(arch);
var destination = '.build/linux/deb/' + debArch + '/' + product.applicationName + '-' + debArch;
const binaryDir = '../VSCode-linux-' + arch;
const debArch = getDebPackageArch(arch);
const destination = '.build/linux/deb/' + debArch + '/' + product.applicationName + '-' + debArch;
return function () {
var desktop = gulp.src('resources/linux/code.desktop', { base: '.' })
const desktop = gulp.src('resources/linux/code.desktop', { base: '.' })
.pipe(replace('@@NAME_LONG@@', product.nameLong))
.pipe(replace('@@NAME_SHORT@@', product.nameShort))
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(rename('usr/share/applications/' + product.applicationName + '.desktop'));
var icon = gulp.src('resources/linux/code.png', { base: '.' })
const icon = gulp.src('resources/linux/code.png', { base: '.' })
.pipe(rename('usr/share/pixmaps/' + product.applicationName + '.png'));
var code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
const code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
.pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; }));
var size = 0;
var control = code.pipe(es.through(
let size = 0;
const control = code.pipe(es.through(
function (f) { size += f.isDirectory() ? 4096 : f.contents.length; },
function () {
var that = this;
const that = this;
gulp.src('resources/linux/debian/control.template', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision))
......@@ -291,29 +272,29 @@ function prepareDebPackage(arch) {
.pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); }));
}));
var prerm = gulp.src('resources/linux/debian/prerm.template', { base: '.' })
const prerm = gulp.src('resources/linux/debian/prerm.template', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(rename('DEBIAN/prerm'))
var postrm = gulp.src('resources/linux/debian/postrm.template', { base: '.' })
const postrm = gulp.src('resources/linux/debian/postrm.template', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(rename('DEBIAN/postrm'))
var postinst = gulp.src('resources/linux/debian/postinst.template', { base: '.' })
const postinst = gulp.src('resources/linux/debian/postinst.template', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@ARCHITECTURE@@', debArch))
.pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@'))
.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))
.pipe(rename('DEBIAN/postinst'))
var all = es.merge(control, postinst, postrm, prerm, desktop, icon, code);
const all = es.merge(control, postinst, postrm, prerm, desktop, icon, code);
return all.pipe(symdest(destination));
};
}
function buildDebPackage(arch) {
var debArch = getDebPackageArch(arch);
const debArch = getDebPackageArch(arch);
return shell.task([
'chmod 755 ' + product.applicationName + '-' + debArch + '/DEBIAN/postinst ' + product.applicationName + '-' + debArch + '/DEBIAN/prerm',
'mkdir -p deb',
......@@ -331,23 +312,23 @@ function getRpmPackageArch(arch) {
}
function prepareRpmPackage(arch) {
var binaryDir = '../VSCode-linux-' + arch;
var rpmArch = getRpmPackageArch(arch);
const binaryDir = '../VSCode-linux-' + arch;
const rpmArch = getRpmPackageArch(arch);
return function () {
var desktop = gulp.src('resources/linux/code.desktop', { base: '.' })
const desktop = gulp.src('resources/linux/code.desktop', { base: '.' })
.pipe(replace('@@NAME_LONG@@', product.nameLong))
.pipe(replace('@@NAME_SHORT@@', product.nameShort))
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(rename('BUILD/usr/share/applications/' + product.applicationName + '.desktop'));
var icon = gulp.src('resources/linux/code.png', { base: '.' })
const icon = gulp.src('resources/linux/code.png', { base: '.' })
.pipe(rename('BUILD/usr/share/pixmaps/' + product.applicationName + '.png'));
var code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
const code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
.pipe(rename(function (p) { p.dirname = 'BUILD/usr/share/' + product.applicationName + '/' + p.dirname; }));
var spec = gulp.src('resources/linux/rpm/code.spec.template', { base: '.' })
const spec = gulp.src('resources/linux/rpm/code.spec.template', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
.pipe(replace('@@NAME_LONG@@', product.nameLong))
.pipe(replace('@@VERSION@@', packageJson.version))
......@@ -357,20 +338,20 @@ function prepareRpmPackage(arch) {
.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))
.pipe(rename('SPECS/' + product.applicationName + '.spec'));
var specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' })
const specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' })
.pipe(rename('SOURCES/' + product.applicationName + '.xpm'));
var all = es.merge(code, desktop, icon, spec, specIcon);
const all = es.merge(code, desktop, icon, spec, specIcon);
return all.pipe(symdest(getRpmBuildPath(rpmArch)));
}
}
function buildRpmPackage(arch) {
var rpmArch = getRpmPackageArch(arch);
var rpmBuildPath = getRpmBuildPath(rpmArch);
var rpmOut = rpmBuildPath + '/RPMS/' + rpmArch;
var destination = '.build/linux/rpm/' + rpmArch;
const rpmArch = getRpmPackageArch(arch);
const rpmBuildPath = getRpmBuildPath(rpmArch);
const rpmOut = rpmBuildPath + '/RPMS/' + rpmArch;
const destination = '.build/linux/rpm/' + rpmArch;
return shell.task([
'mkdir -p ' + destination,
'HOME="$(pwd)/' + destination + '" fakeroot rpmbuild -bb ' + rpmBuildPath + '/SPECS/' + product.applicationName + '.spec --target=' + rpmArch,
......@@ -379,11 +360,13 @@ function buildRpmPackage(arch) {
]);
}
gulp.task('clean-vscode-win32', util.rimraf(path.join(path.dirname(root), 'VSCode-win32')));
gulp.task('clean-vscode-darwin', util.rimraf(path.join(path.dirname(root), 'VSCode-darwin')));
gulp.task('clean-vscode-linux-ia32', util.rimraf(path.join(path.dirname(root), 'VSCode-linux-ia32')));
gulp.task('clean-vscode-linux-x64', util.rimraf(path.join(path.dirname(root), 'VSCode-linux-x64')));
gulp.task('clean-vscode-linux-arm', util.rimraf(path.join(path.dirname(root), 'VSCode-linux-arm')));
const buildRoot = path.dirname(root);
gulp.task('clean-vscode-win32', util.rimraf(path.join(buildRoot, 'VSCode-win32')));
gulp.task('clean-vscode-darwin', util.rimraf(path.join(buildRoot, 'VSCode-darwin')));
gulp.task('clean-vscode-linux-ia32', util.rimraf(path.join(buildRoot, 'VSCode-linux-ia32')));
gulp.task('clean-vscode-linux-x64', util.rimraf(path.join(buildRoot, 'VSCode-linux-x64')));
gulp.task('clean-vscode-linux-arm', util.rimraf(path.join(buildRoot, 'VSCode-linux-arm')));
gulp.task('clean-vscode-linux-ia32-deb', util.rimraf('.build/linux/deb/i386'));
gulp.task('clean-vscode-linux-x64-deb', util.rimraf('.build/linux/deb/amd64'));
gulp.task('clean-vscode-linux-ia32-rpm', util.rimraf('.build/linux/rpm/i386'));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册