diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index b8bfb10815e..f61463885d1 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -16,10 +16,7 @@ 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'); @@ -27,6 +24,9 @@ const nlsDev = require('vscode-nls-dev'); const root = path.dirname(__dirname); const build = path.join(root, '.build'); const commit = util.getVersion(root); +const packageJson = require('../package.json'); +const product = require('../product.json'); +const shrinkwrap = require('../npm-shrinkwrap.json'); const dependencies = Object.keys(shrinkwrap.dependencies); const baseModules = Object.keys(process.binding('natives')).filter(n => !/^_|\//.test(n)); @@ -91,7 +91,6 @@ 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 -const product = require('../product.json'); const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8')); const config = { @@ -234,132 +233,6 @@ function packageTask(platform, arch, opts) { }; } -function getDebPackageArch(arch) { - return { x64: 'amd64', ia32: 'i386' }[arch]; -} - -const linuxPackageRevision = Math.floor(new Date().getTime() / 1000); - -function prepareDebPackage(arch) { - const binaryDir = '../VSCode-linux-' + arch; - const debArch = getDebPackageArch(arch); - const destination = '.build/linux/deb/' + debArch + '/' + product.applicationName + '-' + debArch; - - return function () { - 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')); - - const icon = gulp.src('resources/linux/code.png', { base: '.' }) - .pipe(rename('usr/share/pixmaps/' + product.applicationName + '.png')); - - const code = gulp.src(binaryDir + '/**/*', { base: binaryDir }) - .pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; })); - - let size = 0; - const control = code.pipe(es.through( - function (f) { size += f.isDirectory() ? 4096 : f.contents.length; }, - function () { - const that = this; - gulp.src('resources/linux/debian/control.template', { base: '.' }) - .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision)) - .pipe(replace('@@ARCHITECTURE@@', debArch)) - .pipe(replace('@@INSTALLEDSIZE@@', Math.ceil(size / 1024))) - .pipe(rename('DEBIAN/control')) - .pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); })); - })); - - const prerm = gulp.src('resources/linux/debian/prerm.template', { base: '.' }) - .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(rename('DEBIAN/prerm')) - - const postrm = gulp.src('resources/linux/debian/postrm.template', { base: '.' }) - .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(rename('DEBIAN/postrm')) - - 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')) - - const all = es.merge(control, postinst, postrm, prerm, desktop, icon, code); - - return all.pipe(symdest(destination)); - }; -} - -function buildDebPackage(arch) { - const debArch = getDebPackageArch(arch); - return shell.task([ - 'chmod 755 ' + product.applicationName + '-' + debArch + '/DEBIAN/postinst ' + product.applicationName + '-' + debArch + '/DEBIAN/prerm', - 'mkdir -p deb', - 'fakeroot dpkg-deb -b ' + product.applicationName + '-' + debArch + ' deb', - 'dpkg-scanpackages deb /dev/null > Packages' - ], { cwd: '.build/linux/deb/' + debArch}); -} - -function getRpmBuildPath(rpmArch) { - return '.build/linux/rpm/' + rpmArch + '/rpmbuild'; -} - -function getRpmPackageArch(arch) { - return { x64: 'x86_64', ia32: 'i386' }[arch]; -} - -function prepareRpmPackage(arch) { - const binaryDir = '../VSCode-linux-' + arch; - const rpmArch = getRpmPackageArch(arch); - - return function () { - 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')); - - const icon = gulp.src('resources/linux/code.png', { base: '.' }) - .pipe(rename('BUILD/usr/share/pixmaps/' + product.applicationName + '.png')); - - const code = gulp.src(binaryDir + '/**/*', { base: binaryDir }) - .pipe(rename(function (p) { p.dirname = 'BUILD/usr/share/' + product.applicationName + '/' + p.dirname; })); - - 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)) - .pipe(replace('@@RELEASE@@', linuxPackageRevision)) - .pipe(replace('@@ARCHITECTURE@@', rpmArch)) - .pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@')) - .pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@')) - .pipe(rename('SPECS/' + product.applicationName + '.spec')); - - const specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' }) - .pipe(rename('SOURCES/' + product.applicationName + '.xpm')); - - const all = es.merge(code, desktop, icon, spec, specIcon); - - return all.pipe(symdest(getRpmBuildPath(rpmArch))); - } -} - -function buildRpmPackage(arch) { - 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, - 'cp "' + rpmOut + '/$(ls ' + rpmOut + ')" ' + destination + '/', - 'createrepo ' + destination - ]); -} - const buildRoot = path.dirname(root); gulp.task('clean-vscode-win32', util.rimraf(path.join(buildRoot, 'VSCode-win32'))); @@ -367,10 +240,6 @@ 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')); -gulp.task('clean-vscode-linux-x64-rpm', util.rimraf('.build/linux/rpm/x86_64')); gulp.task('vscode-win32', ['optimize-vscode', 'clean-vscode-win32'], packageTask('win32')); gulp.task('vscode-darwin', ['optimize-vscode', 'clean-vscode-darwin'], packageTask('darwin')); @@ -384,16 +253,6 @@ gulp.task('vscode-linux-ia32-min', ['minify-vscode', 'clean-vscode-linux-ia32'], gulp.task('vscode-linux-x64-min', ['minify-vscode', 'clean-vscode-linux-x64'], packageTask('linux', 'x64', { minified: true })); gulp.task('vscode-linux-arm-min', ['minify-vscode', 'clean-vscode-linux-arm'], packageTask('linux', 'arm', { minified: true })); -gulp.task('vscode-linux-ia32-prepare-deb', ['clean-vscode-linux-ia32-deb', 'vscode-linux-ia32-min'], prepareDebPackage('ia32')); -gulp.task('vscode-linux-x64-prepare-deb', ['clean-vscode-linux-x64-deb', 'vscode-linux-x64-min'], prepareDebPackage('x64')); -gulp.task('vscode-linux-ia32-build-deb', ['vscode-linux-ia32-prepare-deb'], buildDebPackage('ia32')); -gulp.task('vscode-linux-x64-build-deb', ['vscode-linux-x64-prepare-deb'], buildDebPackage('x64')); - -gulp.task('vscode-linux-ia32-prepare-rpm', ['clean-vscode-linux-ia32-rpm', 'vscode-linux-ia32-min'], prepareRpmPackage('ia32')); -gulp.task('vscode-linux-x64-prepare-rpm', ['clean-vscode-linux-x64-rpm', 'vscode-linux-x64-min'], prepareRpmPackage('x64')); -gulp.task('vscode-linux-ia32-build-rpm', ['vscode-linux-ia32-prepare-rpm'], buildRpmPackage('ia32')); -gulp.task('vscode-linux-x64-build-rpm', ['vscode-linux-x64-prepare-rpm'], buildRpmPackage('x64')); - // Sourcemaps gulp.task('upload-vscode-sourcemaps', ['minify-vscode'], function () { diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js new file mode 100644 index 00000000000..23d1a3d6f72 --- /dev/null +++ b/build/gulpfile.vscode.linux.js @@ -0,0 +1,157 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +const gulp = require('gulp'); +const replace = require('gulp-replace'); +const rename = require('gulp-rename'); +const shell = require('gulp-shell'); +const es = require('event-stream'); +const symdest = require('gulp-symdest'); +const util = require('./lib/util'); +const packageJson = require('../package.json'); +const product = require('../product.json'); + +function getDebPackageArch(arch) { + return { x64: 'amd64', ia32: 'i386' }[arch]; +} + +const linuxPackageRevision = Math.floor(new Date().getTime() / 1000); + +function prepareDebPackage(arch) { + const binaryDir = '../VSCode-linux-' + arch; + const debArch = getDebPackageArch(arch); + const destination = '.build/linux/deb/' + debArch + '/' + product.applicationName + '-' + debArch; + + return function () { + 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')); + + const icon = gulp.src('resources/linux/code.png', { base: '.' }) + .pipe(rename('usr/share/pixmaps/' + product.applicationName + '.png')); + + const code = gulp.src(binaryDir + '/**/*', { base: binaryDir }) + .pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; })); + + let size = 0; + const control = code.pipe(es.through( + function (f) { size += f.isDirectory() ? 4096 : f.contents.length; }, + function () { + const that = this; + gulp.src('resources/linux/debian/control.template', { base: '.' }) + .pipe(replace('@@NAME@@', product.applicationName)) + .pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision)) + .pipe(replace('@@ARCHITECTURE@@', debArch)) + .pipe(replace('@@INSTALLEDSIZE@@', Math.ceil(size / 1024))) + .pipe(rename('DEBIAN/control')) + .pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); })); + })); + + const prerm = gulp.src('resources/linux/debian/prerm.template', { base: '.' }) + .pipe(replace('@@NAME@@', product.applicationName)) + .pipe(rename('DEBIAN/prerm')) + + const postrm = gulp.src('resources/linux/debian/postrm.template', { base: '.' }) + .pipe(replace('@@NAME@@', product.applicationName)) + .pipe(rename('DEBIAN/postrm')) + + 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')) + + const all = es.merge(control, postinst, postrm, prerm, desktop, icon, code); + + return all.pipe(symdest(destination)); + }; +} + +function buildDebPackage(arch) { + const debArch = getDebPackageArch(arch); + return shell.task([ + 'chmod 755 ' + product.applicationName + '-' + debArch + '/DEBIAN/postinst ' + product.applicationName + '-' + debArch + '/DEBIAN/prerm', + 'mkdir -p deb', + 'fakeroot dpkg-deb -b ' + product.applicationName + '-' + debArch + ' deb', + 'dpkg-scanpackages deb /dev/null > Packages' + ], { cwd: '.build/linux/deb/' + debArch}); +} + +function getRpmBuildPath(rpmArch) { + return '.build/linux/rpm/' + rpmArch + '/rpmbuild'; +} + +function getRpmPackageArch(arch) { + return { x64: 'x86_64', ia32: 'i386' }[arch]; +} + +function prepareRpmPackage(arch) { + const binaryDir = '../VSCode-linux-' + arch; + const rpmArch = getRpmPackageArch(arch); + + return function () { + 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')); + + const icon = gulp.src('resources/linux/code.png', { base: '.' }) + .pipe(rename('BUILD/usr/share/pixmaps/' + product.applicationName + '.png')); + + const code = gulp.src(binaryDir + '/**/*', { base: binaryDir }) + .pipe(rename(function (p) { p.dirname = 'BUILD/usr/share/' + product.applicationName + '/' + p.dirname; })); + + 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)) + .pipe(replace('@@RELEASE@@', linuxPackageRevision)) + .pipe(replace('@@ARCHITECTURE@@', rpmArch)) + .pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@')) + .pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@')) + .pipe(rename('SPECS/' + product.applicationName + '.spec')); + + const specIcon = gulp.src('resources/linux/rpm/code.xpm', { base: '.' }) + .pipe(rename('SOURCES/' + product.applicationName + '.xpm')); + + const all = es.merge(code, desktop, icon, spec, specIcon); + + return all.pipe(symdest(getRpmBuildPath(rpmArch))); + } +} + +function buildRpmPackage(arch) { + 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, + 'cp "' + rpmOut + '/$(ls ' + rpmOut + ')" ' + destination + '/', + 'createrepo ' + destination + ]); +} + +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')); +gulp.task('clean-vscode-linux-x64-rpm', util.rimraf('.build/linux/rpm/x86_64')); + +gulp.task('vscode-linux-ia32-prepare-deb', ['clean-vscode-linux-ia32-deb', 'vscode-linux-ia32-min'], prepareDebPackage('ia32')); +gulp.task('vscode-linux-x64-prepare-deb', ['clean-vscode-linux-x64-deb', 'vscode-linux-x64-min'], prepareDebPackage('x64')); +gulp.task('vscode-linux-ia32-build-deb', ['vscode-linux-ia32-prepare-deb'], buildDebPackage('ia32')); +gulp.task('vscode-linux-x64-build-deb', ['vscode-linux-x64-prepare-deb'], buildDebPackage('x64')); + +gulp.task('vscode-linux-ia32-prepare-rpm', ['clean-vscode-linux-ia32-rpm', 'vscode-linux-ia32-min'], prepareRpmPackage('ia32')); +gulp.task('vscode-linux-x64-prepare-rpm', ['clean-vscode-linux-x64-rpm', 'vscode-linux-x64-min'], prepareRpmPackage('x64')); +gulp.task('vscode-linux-ia32-build-rpm', ['vscode-linux-ia32-prepare-rpm'], buildRpmPackage('ia32')); +gulp.task('vscode-linux-x64-build-rpm', ['vscode-linux-x64-prepare-rpm'], buildRpmPackage('x64'));