pulsar/script/build
Benjamin Gray 40175271d2
Remove electron configuration (#21354)
* remove electron configuration
2020-10-08 20:14:44 +03:00

196 lines
7.5 KiB
JavaScript
Executable File

#!/usr/bin/env node
'use strict'
const CONFIG = require('./config')
if (process.argv.includes('--no-bootstrap')) {
console.log('Skipping bootstrap')
} else {
// Bootstrap first to ensure all the dependencies used later in this script
// are installed.
const path = require('path')
const childProcess = require('child_process')
childProcess.execFileSync(process.execPath, [path.join(CONFIG.scriptRootPath, 'bootstrap')], { env: process.env, cwd: CONFIG.repositoryRootPath, stdio: 'inherit' });
}
// Required to load CS files in this build script, such as those in `donna`
require('coffee-script/register')
require('colors')
const path = require('path')
const yargs = require('yargs')
const argv = yargs
.usage('Usage: $0 [options]')
.help('help')
.describe('existing-binaries', 'Use existing Atom binaries (skip clean/transpile/cache)')
.describe('code-sign', 'Code-sign executables (macOS and Windows only)')
.describe('test-sign', 'Test-sign executables (macOS only)')
.describe('create-windows-installer', 'Create installer (Windows only)')
.describe('create-debian-package', 'Create .deb package (Linux only)')
.describe('create-rpm-package', 'Create .rpm package (Linux only)')
.describe('compress-artifacts', 'Compress Atom binaries (and symbols on macOS)')
.describe('generate-api-docs', 'Only build the API documentation')
.describe('install', 'Install Atom')
.string('install')
.describe('ci', 'Install dependencies quickly (package-lock.json files must be up to date)')
.wrap(yargs.terminalWidth())
.argv
const checkChromedriverVersion = require('./lib/check-chromedriver-version')
const cleanOutputDirectory = require('./lib/clean-output-directory')
const codeSignOnMac = require('./lib/code-sign-on-mac')
const codeSignOnWindows = require('./lib/code-sign-on-windows')
const compressArtifacts = require('./lib/compress-artifacts')
const copyAssets = require('./lib/copy-assets')
const createDebianPackage = require('./lib/create-debian-package')
const createRpmPackage = require('./lib/create-rpm-package')
const createWindowsInstaller = require('./lib/create-windows-installer')
const dumpSymbols = require('./lib/dump-symbols')
const generateAPIDocs = require('./lib/generate-api-docs')
const generateMetadata = require('./lib/generate-metadata')
const generateModuleCache = require('./lib/generate-module-cache')
const generateStartupSnapshot = require('./lib/generate-startup-snapshot')
const installApplication = require('./lib/install-application')
const notarizeOnMac = require('./lib/notarize-on-mac')
const packageApplication = require('./lib/package-application')
const prebuildLessCache = require('./lib/prebuild-less-cache')
const testSignOnMac = require('./lib/test-sign-on-mac')
process.on('unhandledRejection', function (e) {
console.error(e.stack || e)
process.exit(1)
})
process.env.ELECTRON_VERSION = CONFIG.appMetadata.electronVersion
async function transpile() {
const { spawn, Thread, Worker } = require(`${CONFIG.scriptRunnerModulesPath}/threads`)
const transpilePackagesWithCustomTranspilerPaths = await spawn(new Worker('./lib/transpile-packages-with-custom-transpiler-paths'))
const transpilePackagesWithCustomTranspilerPathsPromise = transpilePackagesWithCustomTranspilerPaths()
const transpileBabelPaths = await spawn(new Worker('./lib/transpile-babel-paths'))
const transpileBabelPathsPromise = transpileBabelPaths()
const transpileCoffeeScriptPaths = await spawn(new Worker('./lib/transpile-coffee-script-paths'))
const transpileCoffeeScriptPathsPromise = transpileCoffeeScriptPaths()
const transpileCsonPaths = await spawn(new Worker('./lib/transpile-cson-paths'))
const transpileCsonPathsPromise = transpileCsonPaths()
const transpilePegJsPaths = await spawn(new Worker('./lib/transpile-peg-js-paths'))
const transpilePegJsPathsPromise = transpilePegJsPaths()
await transpilePackagesWithCustomTranspilerPathsPromise;
await Thread.terminate(transpilePackagesWithCustomTranspilerPaths)
await transpileBabelPathsPromise;
await Thread.terminate(transpileBabelPaths)
await transpileCoffeeScriptPathsPromise;
await Thread.terminate(transpileCoffeeScriptPaths)
await transpileCsonPathsPromise;
await Thread.terminate(transpileCsonPaths)
await transpilePegJsPathsPromise;
await Thread.terminate(transpilePegJsPaths)
}
async function singAndCreateInstaller(packagedAppPath) {
switch (process.platform) {
case 'darwin': {
if (argv.codeSign) {
await codeSignOnMac(packagedAppPath)
await notarizeOnMac(packagedAppPath)
} else if (argv.testSign) {
testSignOnMac(packagedAppPath)
} else {
console.log('Skipping code-signing. Specify the --code-sign option to perform code-signing'.gray)
}
break
}
case 'win32': {
if (argv.testSign) {
console.log('Test signing is not supported on Windows, skipping.'.gray)
}
if (argv.codeSign) {
const executablesToSign = [ path.join(packagedAppPath, CONFIG.executableName) ]
if (argv.createWindowsInstaller) {
executablesToSign.push(path.join(__dirname, 'node_modules', '@atom', 'electron-winstaller', 'vendor', 'Squirrel.exe'))
}
codeSignOnWindows(executablesToSign)
} else {
console.log('Skipping code-signing. Specify the --code-sign option to perform code-signing'.gray)
}
if (argv.createWindowsInstaller) {
return createWindowsInstaller(packagedAppPath)
.then((installerPath) => {
argv.codeSign && codeSignOnWindows([installerPath])
return packagedAppPath
})
} else {
console.log('Skipping creating installer. Specify the --create-windows-installer option to create a Squirrel-based Windows installer.'.gray)
}
break
}
case 'linux': {
if (argv.createDebianPackage) {
createDebianPackage(packagedAppPath)
} else {
console.log('Skipping creating debian package. Specify the --create-debian-package option to create it.'.gray)
}
if (argv.createRpmPackage) {
createRpmPackage(packagedAppPath)
} else {
console.log('Skipping creating rpm package. Specify the --create-rpm-package option to create it.'.gray)
}
break
}
}
return Promise.resolve(packagedAppPath)
}
async function build() {
if (!argv.existingBinaries) {
checkChromedriverVersion()
await cleanOutputDirectory()
await copyAssets()
await transpile()
generateModuleCache()
prebuildLessCache()
generateMetadata()
generateAPIDocs()
if (!argv.generateApiDocs) {
await dumpSymbols()
}
}
if (!argv.generateApiDocs) {
const packagedAppPath = await packageApplication()
await generateStartupSnapshot(packagedAppPath)
await singAndCreateInstaller(packagedAppPath)
if (argv.compressArtifacts) {
compressArtifacts(packagedAppPath)
} else {
console.log('Skipping artifacts compression. Specify the --compress-artifacts option to compress Atom binaries (and symbols on macOS)'.gray)
}
if (argv.install != null) {
installApplication(packagedAppPath, argv.install)
} else {
console.log('Skipping installation. Specify the --install option to install Atom'.gray)
}
}
}
build().then(() => {process.exit(0)}).catch((e) => {throw e;})