eae5d8c807
These conflicts will be resolved in the following commits. We do it this way so that PR review is possible.
122 lines
5.9 KiB
TypeScript
122 lines
5.9 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
'use strict';
|
|
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import * as vfs from 'vinyl-fs';
|
|
import * as filter from 'gulp-filter';
|
|
import * as _ from 'underscore';
|
|
import * as util from './util';
|
|
|
|
const root = path.dirname(path.dirname(__dirname));
|
|
const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));
|
|
const commit = util.getVersion(root);
|
|
|
|
const darwinCreditsTemplate = product.darwinCredits && _.template(fs.readFileSync(path.join(root, product.darwinCredits), 'utf8'));
|
|
|
|
function darwinBundleDocumentType(extensions: string[], icon: string) {
|
|
return {
|
|
name: product.nameLong + ' document',
|
|
role: 'Editor',
|
|
ostypes: ['TEXT', 'utxt', 'TUTX', '****'],
|
|
extensions: extensions,
|
|
iconFile: icon
|
|
};
|
|
}
|
|
|
|
export const config = {
|
|
version: util.getElectronVersion(),
|
|
productAppName: product.nameLong,
|
|
companyName: 'Microsoft Corporation',
|
|
copyright: 'Copyright (C) 2019 Microsoft. All rights reserved',
|
|
darwinIcon: 'resources/darwin/code.icns',
|
|
darwinBundleIdentifier: product.darwinBundleIdentifier,
|
|
darwinApplicationCategoryType: 'public.app-category.developer-tools',
|
|
darwinHelpBookFolder: 'VS Code HelpBook',
|
|
darwinHelpBookName: 'VS Code HelpBook',
|
|
darwinBundleDocumentTypes: [
|
|
darwinBundleDocumentType(['bat', 'cmd'], 'resources/darwin/bat.icns'),
|
|
darwinBundleDocumentType(['bowerrc'], 'resources/darwin/bower.icns'),
|
|
darwinBundleDocumentType(['c', 'h'], 'resources/darwin/c.icns'),
|
|
darwinBundleDocumentType(['config', 'editorconfig', 'gitattributes', 'gitconfig', 'gitignore', 'ini'], 'resources/darwin/config.icns'),
|
|
darwinBundleDocumentType(['cc', 'cpp', 'cxx', 'c++', 'hh', 'hpp', 'hxx', 'h++'], 'resources/darwin/cpp.icns'),
|
|
darwinBundleDocumentType(['cs', 'csx'], 'resources/darwin/csharp.icns'),
|
|
darwinBundleDocumentType(['css'], 'resources/darwin/css.icns'),
|
|
darwinBundleDocumentType(['go'], 'resources/darwin/go.icns'),
|
|
darwinBundleDocumentType(['asp', 'aspx', 'cshtml', 'htm', 'html', 'jshtm', 'jsp', 'phtml', 'shtml'], 'resources/darwin/html.icns'),
|
|
darwinBundleDocumentType(['jade'], 'resources/darwin/jade.icns'),
|
|
darwinBundleDocumentType(['jav', 'java'], 'resources/darwin/java.icns'),
|
|
darwinBundleDocumentType(['js', 'jscsrc', 'jshintrc', 'mjs', 'cjs'], 'resources/darwin/javascript.icns'),
|
|
darwinBundleDocumentType(['json'], 'resources/darwin/json.icns'),
|
|
darwinBundleDocumentType(['less'], 'resources/darwin/less.icns'),
|
|
darwinBundleDocumentType(['markdown', 'md', 'mdoc', 'mdown', 'mdtext', 'mdtxt', 'mdwn', 'mkd', 'mkdn'], 'resources/darwin/markdown.icns'),
|
|
darwinBundleDocumentType(['php'], 'resources/darwin/php.icns'),
|
|
darwinBundleDocumentType(['ps1', 'psd1', 'psm1'], 'resources/darwin/powershell.icns'),
|
|
darwinBundleDocumentType(['py'], 'resources/darwin/python.icns'),
|
|
darwinBundleDocumentType(['gemspec', 'rb'], 'resources/darwin/ruby.icns'),
|
|
darwinBundleDocumentType(['scss'], 'resources/darwin/sass.icns'),
|
|
darwinBundleDocumentType(['bash', 'bash_login', 'bash_logout', 'bash_profile', 'bashrc', 'profile', 'rhistory', 'rprofile', 'sh', 'zlogin', 'zlogout', 'zprofile', 'zsh', 'zshenv', 'zshrc'], 'resources/darwin/shell.icns'),
|
|
darwinBundleDocumentType(['sql'], 'resources/darwin/sql.icns'),
|
|
darwinBundleDocumentType(['ts'], 'resources/darwin/typescript.icns'),
|
|
darwinBundleDocumentType(['tsx', 'jsx'], 'resources/darwin/react.icns'),
|
|
darwinBundleDocumentType(['vue'], 'resources/darwin/vue.icns'),
|
|
darwinBundleDocumentType(['ascx', 'csproj', 'dtd', 'wxi', 'wxl', 'wxs', 'xml', 'xaml'], 'resources/darwin/xml.icns'),
|
|
darwinBundleDocumentType(['eyaml', 'eyml', 'yaml', 'yml'], 'resources/darwin/yaml.icns'),
|
|
darwinBundleDocumentType(['clj', 'cljs', 'cljx', 'clojure', 'code-workspace', 'coffee', 'containerfile', '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')
|
|
],
|
|
darwinBundleURLTypes: [{
|
|
role: 'Viewer',
|
|
name: product.nameLong,
|
|
urlSchemes: [product.urlProtocol]
|
|
}],
|
|
darwinForceDarkModeSupport: true,
|
|
darwinCredits: darwinCreditsTemplate ? Buffer.from(darwinCreditsTemplate({ commit: commit, date: new Date().toISOString() })) : undefined,
|
|
linuxExecutableName: product.applicationName,
|
|
winIcon: 'resources/win32/code.ico',
|
|
token: process.env['VSCODE_MIXIN_PASSWORD'] || process.env['GITHUB_TOKEN'] || undefined,
|
|
repo: product.electronRepository || undefined
|
|
};
|
|
|
|
function getElectron(arch: string): () => NodeJS.ReadWriteStream {
|
|
return () => {
|
|
const electron = require('gulp-atom-electron');
|
|
const json = require('gulp-json-editor') as typeof import('gulp-json-editor');
|
|
|
|
const electronOpts = _.extend({}, config, {
|
|
platform: process.platform,
|
|
arch: arch === 'armhf' ? 'arm' : arch,
|
|
ffmpegChromium: true,
|
|
keepDefaultApp: true
|
|
});
|
|
|
|
return vfs.src('package.json')
|
|
.pipe(json({ name: product.nameShort }))
|
|
.pipe(electron(electronOpts))
|
|
.pipe(filter(['**', '!**/app/package.json']))
|
|
.pipe(vfs.dest('.build/electron'));
|
|
};
|
|
}
|
|
|
|
async function main(arch = process.arch): Promise<void> {
|
|
const version = util.getElectronVersion();
|
|
const electronPath = path.join(root, '.build', 'electron');
|
|
const versionFile = path.join(electronPath, 'version');
|
|
const isUpToDate = fs.existsSync(versionFile) && fs.readFileSync(versionFile, 'utf8') === `${version}`;
|
|
|
|
if (!isUpToDate) {
|
|
await util.rimraf(electronPath)();
|
|
await util.streamToPromise(getElectron(arch)());
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main(process.argv[2]).catch(err => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|
|
}
|