Skip to content

Commit 5048816

Browse files
committed
extract yarn electron
1 parent be68a4e commit 5048816

10 files changed

Lines changed: 291 additions & 140 deletions

File tree

build/gulpfile.vscode.js

Lines changed: 1 addition & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const product = require('../product.json');
3030
const crypto = require('crypto');
3131
const i18n = require('./lib/i18n');
3232
const deps = require('./dependencies');
33-
const getElectronVersion = require('./lib/electron').getElectronVersion;
33+
const { getElectron, config } = require('./lib/electron');
3434
const createAsar = require('./lib/asar').createAsar;
3535
const minimist = require('minimist');
3636
const { compileBuildTask } = require('./gulpfile.compile');
@@ -115,91 +115,6 @@ gulp.task(minifyVSCodeTask);
115115

116116
// Package
117117

118-
// @ts-ignore JSON checking: darwinCredits is optional
119-
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
120-
121-
function darwinBundleDocumentType(extensions, icon) {
122-
return {
123-
name: product.nameLong + ' document',
124-
role: 'Editor',
125-
ostypes: ["TEXT", "utxt", "TUTX", "****"],
126-
extensions: extensions,
127-
iconFile: icon
128-
};
129-
}
130-
131-
const config = {
132-
version: getElectronVersion(),
133-
productAppName: product.nameLong,
134-
companyName: 'Microsoft Corporation',
135-
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
136-
darwinIcon: 'resources/darwin/code.icns',
137-
darwinBundleIdentifier: product.darwinBundleIdentifier,
138-
darwinApplicationCategoryType: 'public.app-category.developer-tools',
139-
darwinHelpBookFolder: 'VS Code HelpBook',
140-
darwinHelpBookName: 'VS Code HelpBook',
141-
darwinBundleDocumentTypes: [
142-
darwinBundleDocumentType(["bat", "cmd"], 'resources/darwin/bat.icns'),
143-
darwinBundleDocumentType(["bowerrc"], 'resources/darwin/bower.icns'),
144-
darwinBundleDocumentType(["c", "h"], 'resources/darwin/c.icns'),
145-
darwinBundleDocumentType(["config", "editorconfig", "gitattributes", "gitconfig", "gitignore", "ini"], 'resources/darwin/config.icns'),
146-
darwinBundleDocumentType(["cc", "cpp", "cxx", "hh", "hpp", "hxx"], 'resources/darwin/cpp.icns'),
147-
darwinBundleDocumentType(["cs", "csx"], 'resources/darwin/csharp.icns'),
148-
darwinBundleDocumentType(["css"], 'resources/darwin/css.icns'),
149-
darwinBundleDocumentType(["go"], 'resources/darwin/go.icns'),
150-
darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'),
151-
darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'),
152-
darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'),
153-
darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'),
154-
darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'),
155-
darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'),
156-
darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'),
157-
darwinBundleDocumentType(["php"], 'resources/darwin/php.icns'),
158-
darwinBundleDocumentType(["ps1", "psd1", "psm1"], 'resources/darwin/powershell.icns'),
159-
darwinBundleDocumentType(["py"], 'resources/darwin/python.icns'),
160-
darwinBundleDocumentType(["gemspec", "rb"], 'resources/darwin/ruby.icns'),
161-
darwinBundleDocumentType(["scss"], 'resources/darwin/sass.icns'),
162-
darwinBundleDocumentType(["bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "profile", "rhistory", "rprofile", "sh", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], 'resources/darwin/shell.icns'),
163-
darwinBundleDocumentType(["sql"], 'resources/darwin/sql.icns'),
164-
darwinBundleDocumentType(["ts"], 'resources/darwin/typescript.icns'),
165-
darwinBundleDocumentType(["tsx", "jsx"], 'resources/darwin/react.icns'),
166-
darwinBundleDocumentType(["vue"], 'resources/darwin/vue.icns'),
167-
darwinBundleDocumentType(["ascx", "csproj", "dtd", "wxi", "wxl", "wxs", "xml", "xaml"], 'resources/darwin/xml.icns'),
168-
darwinBundleDocumentType(["eyaml", "eyml", "yaml", "yml"], 'resources/darwin/yaml.icns'),
169-
darwinBundleDocumentType(["clj", "cljs", "cljx", "clojure", "code-workspace", "coffee", "ctp", "dockerfile", "dot", "edn", "fs", "fsi", "fsscript", "fsx", "handlebars", "hbs", "lua", "m", "makefile", "ml", "mli", "pl", "pl6", "pm", "pm6", "pod", "pp", "properties", "psgi", "pug", "r", "rs", "rt", "svg", "svgz", "t", "txt", "vb", "xcodeproj", "xcworkspace"], 'resources/darwin/default.icns')
170-
],
171-
darwinBundleURLTypes: [{
172-
role: 'Viewer',
173-
name: product.nameLong,
174-
urlSchemes: [product.urlProtocol]
175-
}],
176-
darwinForceDarkModeSupport: true,
177-
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
178-
linuxExecutableName: product.applicationName,
179-
winIcon: 'resources/win32/code.ico',
180-
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
181-
182-
// @ts-ignore JSON checking: electronRepository is optional
183-
repo: product.electronRepository || undefined
184-
};
185-
186-
function getElectron(arch) {
187-
return () => {
188-
const electronOpts = _.extend({}, config, {
189-
platform: process.platform,
190-
arch,
191-
ffmpegChromium: true,
192-
keepDefaultApp: true
193-
});
194-
195-
return gulp.src('package.json')
196-
.pipe(json({ name: product.nameShort }))
197-
.pipe(electron(electronOpts))
198-
.pipe(filter(['**', '!**/app/package.json']))
199-
.pipe(vfs.dest('.build/electron'));
200-
};
201-
}
202-
203118
gulp.task(task.define('electron', task.series(util.rimraf('.build/electron'), getElectron(process.arch))));
204119
gulp.task(task.define('electron-ia32', task.series(util.rimraf('.build/electron'), getElectron('ia32'))));
205120
gulp.task(task.define('electron-x64', task.series(util.rimraf('.build/electron'), getElectron('x64'))));

build/lib/electron.js

Lines changed: 107 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,116 @@
22
* Copyright (c) Microsoft Corporation. All rights reserved.
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
5-
65
'use strict';
7-
8-
const fs = require('fs');
9-
const path = require('path');
6+
Object.defineProperty(exports, "__esModule", { value: true });
7+
const fs = require("fs");
8+
const path = require("path");
9+
const vfs = require("vinyl-fs");
10+
const filter = require("gulp-filter");
11+
const json = require("gulp-json-editor");
12+
const _ = require("underscore");
13+
const util = require("./util");
14+
const electron = require('gulp-atom-electron');
1015
const root = path.dirname(path.dirname(__dirname));
11-
16+
const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));
17+
const commit = util.getVersion(root);
1218
function getElectronVersion() {
13-
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
14-
// @ts-ignore
15-
const target = /^target "(.*)"$/m.exec(yarnrc)[1];
16-
17-
return target;
19+
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
20+
const target = /^target "(.*)"$/m.exec(yarnrc)[1];
21+
return target;
22+
}
23+
exports.getElectronVersion = getElectronVersion;
24+
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
25+
function darwinBundleDocumentType(extensions, icon) {
26+
return {
27+
name: product.nameLong + ' document',
28+
role: 'Editor',
29+
ostypes: ["TEXT", "utxt", "TUTX", "****"],
30+
extensions: extensions,
31+
iconFile: icon
32+
};
33+
}
34+
exports.config = {
35+
version: getElectronVersion(),
36+
productAppName: product.nameLong,
37+
companyName: 'Microsoft Corporation',
38+
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
39+
darwinIcon: 'resources/darwin/code.icns',
40+
darwinBundleIdentifier: product.darwinBundleIdentifier,
41+
darwinApplicationCategoryType: 'public.app-category.developer-tools',
42+
darwinHelpBookFolder: 'VS Code HelpBook',
43+
darwinHelpBookName: 'VS Code HelpBook',
44+
darwinBundleDocumentTypes: [
45+
darwinBundleDocumentType(["bat", "cmd"], 'resources/darwin/bat.icns'),
46+
darwinBundleDocumentType(["bowerrc"], 'resources/darwin/bower.icns'),
47+
darwinBundleDocumentType(["c", "h"], 'resources/darwin/c.icns'),
48+
darwinBundleDocumentType(["config", "editorconfig", "gitattributes", "gitconfig", "gitignore", "ini"], 'resources/darwin/config.icns'),
49+
darwinBundleDocumentType(["cc", "cpp", "cxx", "hh", "hpp", "hxx"], 'resources/darwin/cpp.icns'),
50+
darwinBundleDocumentType(["cs", "csx"], 'resources/darwin/csharp.icns'),
51+
darwinBundleDocumentType(["css"], 'resources/darwin/css.icns'),
52+
darwinBundleDocumentType(["go"], 'resources/darwin/go.icns'),
53+
darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'),
54+
darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'),
55+
darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'),
56+
darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'),
57+
darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'),
58+
darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'),
59+
darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'),
60+
darwinBundleDocumentType(["php"], 'resources/darwin/php.icns'),
61+
darwinBundleDocumentType(["ps1", "psd1", "psm1"], 'resources/darwin/powershell.icns'),
62+
darwinBundleDocumentType(["py"], 'resources/darwin/python.icns'),
63+
darwinBundleDocumentType(["gemspec", "rb"], 'resources/darwin/ruby.icns'),
64+
darwinBundleDocumentType(["scss"], 'resources/darwin/sass.icns'),
65+
darwinBundleDocumentType(["bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "profile", "rhistory", "rprofile", "sh", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], 'resources/darwin/shell.icns'),
66+
darwinBundleDocumentType(["sql"], 'resources/darwin/sql.icns'),
67+
darwinBundleDocumentType(["ts"], 'resources/darwin/typescript.icns'),
68+
darwinBundleDocumentType(["tsx", "jsx"], 'resources/darwin/react.icns'),
69+
darwinBundleDocumentType(["vue"], 'resources/darwin/vue.icns'),
70+
darwinBundleDocumentType(["ascx", "csproj", "dtd", "wxi", "wxl", "wxs", "xml", "xaml"], 'resources/darwin/xml.icns'),
71+
darwinBundleDocumentType(["eyaml", "eyml", "yaml", "yml"], 'resources/darwin/yaml.icns'),
72+
darwinBundleDocumentType(["clj", "cljs", "cljx", "clojure", "code-workspace", "coffee", "ctp", "dockerfile", "dot", "edn", "fs", "fsi", "fsscript", "fsx", "handlebars", "hbs", "lua", "m", "makefile", "ml", "mli", "pl", "pl6", "pm", "pm6", "pod", "pp", "properties", "psgi", "pug", "r", "rs", "rt", "svg", "svgz", "t", "txt", "vb", "xcodeproj", "xcworkspace"], 'resources/darwin/default.icns')
73+
],
74+
darwinBundleURLTypes: [{
75+
role: 'Viewer',
76+
name: product.nameLong,
77+
urlSchemes: [product.urlProtocol]
78+
}],
79+
darwinForceDarkModeSupport: true,
80+
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
81+
linuxExecutableName: product.applicationName,
82+
winIcon: 'resources/win32/code.ico',
83+
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
84+
repo: product.electronRepository || undefined
85+
};
86+
function getElectron(arch) {
87+
return () => {
88+
const electronOpts = _.extend({}, exports.config, {
89+
platform: process.platform,
90+
arch,
91+
ffmpegChromium: true,
92+
keepDefaultApp: true
93+
});
94+
return vfs.src('package.json')
95+
.pipe(json({ name: product.nameShort }))
96+
.pipe(electron(electronOpts))
97+
.pipe(filter(['**', '!**/app/package.json']))
98+
.pipe(vfs.dest('.build/electron'));
99+
};
100+
}
101+
exports.getElectron = getElectron;
102+
async function main() {
103+
const version = getElectronVersion();
104+
const electronPath = path.join(root, '.build', 'electron');
105+
const versionFile = path.join(electronPath, 'version');
106+
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
107+
if (!isUpToDate) {
108+
await util.rimraf(electronPath)();
109+
await util.streamToPromise(getElectron(process.arch)());
110+
}
18111
}
19-
20-
module.exports.getElectronVersion = getElectronVersion;
21-
22-
// returns 0 if the right version of electron is in .build/electron
23-
// @ts-ignore
24112
if (require.main === module) {
25-
const version = getElectronVersion();
26-
const versionFile = path.join(root, '.build', 'electron', 'version');
27-
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
28-
29-
process.exit(isUpToDate ? 0 : 1);
113+
main().catch(err => {
114+
console.error(err);
115+
process.exit(1);
116+
});
30117
}

build/lib/electron.ts

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
'use strict';
7+
8+
import * as fs from 'fs';
9+
import * as path from 'path';
10+
import * as vfs from 'vinyl-fs';
11+
import * as filter from 'gulp-filter';
12+
import * as json from 'gulp-json-editor';
13+
import * as _ from 'underscore';
14+
import * as util from './util';
15+
16+
const electron = require('gulp-atom-electron');
17+
18+
const root = path.dirname(path.dirname(__dirname));
19+
const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));
20+
const commit = util.getVersion(root);
21+
22+
export function getElectronVersion(): string {
23+
const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
24+
const target = /^target "(.*)"$/m.exec(yarnrc)![1];
25+
return target;
26+
}
27+
28+
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
29+
30+
function darwinBundleDocumentType(extensions: string[], icon: string) {
31+
return {
32+
name: product.nameLong + ' document',
33+
role: 'Editor',
34+
ostypes: ["TEXT", "utxt", "TUTX", "****"],
35+
extensions: extensions,
36+
iconFile: icon
37+
};
38+
}
39+
40+
export const config = {
41+
version: getElectronVersion(),
42+
productAppName: product.nameLong,
43+
companyName: 'Microsoft Corporation',
44+
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
45+
darwinIcon: 'resources/darwin/code.icns',
46+
darwinBundleIdentifier: product.darwinBundleIdentifier,
47+
darwinApplicationCategoryType: 'public.app-category.developer-tools',
48+
darwinHelpBookFolder: 'VS Code HelpBook',
49+
darwinHelpBookName: 'VS Code HelpBook',
50+
darwinBundleDocumentTypes: [
51+
darwinBundleDocumentType(["bat", "cmd"], 'resources/darwin/bat.icns'),
52+
darwinBundleDocumentType(["bowerrc"], 'resources/darwin/bower.icns'),
53+
darwinBundleDocumentType(["c", "h"], 'resources/darwin/c.icns'),
54+
darwinBundleDocumentType(["config", "editorconfig", "gitattributes", "gitconfig", "gitignore", "ini"], 'resources/darwin/config.icns'),
55+
darwinBundleDocumentType(["cc", "cpp", "cxx", "hh", "hpp", "hxx"], 'resources/darwin/cpp.icns'),
56+
darwinBundleDocumentType(["cs", "csx"], 'resources/darwin/csharp.icns'),
57+
darwinBundleDocumentType(["css"], 'resources/darwin/css.icns'),
58+
darwinBundleDocumentType(["go"], 'resources/darwin/go.icns'),
59+
darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'),
60+
darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'),
61+
darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'),
62+
darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'),
63+
darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'),
64+
darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'),
65+
darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'),
66+
darwinBundleDocumentType(["php"], 'resources/darwin/php.icns'),
67+
darwinBundleDocumentType(["ps1", "psd1", "psm1"], 'resources/darwin/powershell.icns'),
68+
darwinBundleDocumentType(["py"], 'resources/darwin/python.icns'),
69+
darwinBundleDocumentType(["gemspec", "rb"], 'resources/darwin/ruby.icns'),
70+
darwinBundleDocumentType(["scss"], 'resources/darwin/sass.icns'),
71+
darwinBundleDocumentType(["bash", "bash_login", "bash_logout", "bash_profile", "bashrc", "profile", "rhistory", "rprofile", "sh", "zlogin", "zlogout", "zprofile", "zsh", "zshenv", "zshrc"], 'resources/darwin/shell.icns'),
72+
darwinBundleDocumentType(["sql"], 'resources/darwin/sql.icns'),
73+
darwinBundleDocumentType(["ts"], 'resources/darwin/typescript.icns'),
74+
darwinBundleDocumentType(["tsx", "jsx"], 'resources/darwin/react.icns'),
75+
darwinBundleDocumentType(["vue"], 'resources/darwin/vue.icns'),
76+
darwinBundleDocumentType(["ascx", "csproj", "dtd", "wxi", "wxl", "wxs", "xml", "xaml"], 'resources/darwin/xml.icns'),
77+
darwinBundleDocumentType(["eyaml", "eyml", "yaml", "yml"], 'resources/darwin/yaml.icns'),
78+
darwinBundleDocumentType(["clj", "cljs", "cljx", "clojure", "code-workspace", "coffee", "ctp", "dockerfile", "dot", "edn", "fs", "fsi", "fsscript", "fsx", "handlebars", "hbs", "lua", "m", "makefile", "ml", "mli", "pl", "pl6", "pm", "pm6", "pod", "pp", "properties", "psgi", "pug", "r", "rs", "rt", "svg", "svgz", "t", "txt", "vb", "xcodeproj", "xcworkspace"], 'resources/darwin/default.icns')
79+
],
80+
darwinBundleURLTypes: [{
81+
role: 'Viewer',
82+
name: product.nameLong,
83+
urlSchemes: [product.urlProtocol]
84+
}],
85+
darwinForceDarkModeSupport: true,
86+
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
87+
linuxExecutableName: product.applicationName,
88+
winIcon: 'resources/win32/code.ico',
89+
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
90+
repo: product.electronRepository || undefined
91+
};
92+
93+
export function getElectron(arch: string): () => NodeJS.ReadWriteStream {
94+
return () => {
95+
const electronOpts = _.extend({}, config, {
96+
platform: process.platform,
97+
arch,
98+
ffmpegChromium: true,
99+
keepDefaultApp: true
100+
});
101+
102+
return vfs.src('package.json')
103+
.pipe(json({ name: product.nameShort }))
104+
.pipe(electron(electronOpts))
105+
.pipe(filter(['**', '!**/app/package.json']))
106+
.pipe(vfs.dest('.build/electron'));
107+
};
108+
}
109+
110+
async function main(): Promise<void> {
111+
const version = getElectronVersion();
112+
const electronPath = path.join(root, '.build', 'electron');
113+
const versionFile = path.join(electronPath, 'version');
114+
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
115+
116+
if (!isUpToDate) {
117+
await util.rimraf(electronPath)();
118+
await util.streamToPromise(getElectron(process.arch)());
119+
}
120+
}
121+
122+
if (require.main === module) {
123+
main().catch(err => {
124+
console.error(err);
125+
process.exit(1);
126+
});
127+
}

0 commit comments

Comments
 (0)