mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-12-27 02:23:28 +08:00
Remove lerna, revert postinstall script to Nov 2016 version
This commit is contained in:
parent
79b3d58f90
commit
555b4136b8
13 changed files with 84 additions and 155 deletions
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"lerna": "2.0.0-beta.38",
|
||||
"version": "0.0.1"
|
||||
}
|
|
@ -33,7 +33,6 @@
|
|||
"grunt-contrib-less": "0.8.x",
|
||||
"grunt-lesslint": "0.13.x",
|
||||
"jasmine": "2.x.x",
|
||||
"lerna": "emorikawa/lerna#v2.0.0-beta.38.forked",
|
||||
"load-grunt-parent-tasks": "0.1.1",
|
||||
"mkdirp": "^0.5.1",
|
||||
"pm2": "2.4.0",
|
||||
|
@ -59,8 +58,8 @@
|
|||
"stop": "npm run stop-cloud",
|
||||
"stop-cloud": "pm2 stop all; pm2 delete all;",
|
||||
"build-cloud": "docker build .",
|
||||
"postinstall": "babel-node scripts/postinstall.es6",
|
||||
"daily": "babel-node scripts/daily.js"
|
||||
"postinstall": "node scripts/postinstall.js",
|
||||
"daily": "node scripts/daily.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
# Monorepo Packages
|
||||
|
||||
Each folder here is designed to act as its own repository. For development
|
||||
convenience, they are all included here in one monorepo. This allows us to grep
|
||||
across multiple codebases, not use submodules, and keep a unified commit
|
||||
history.
|
||||
|
||||
We use [Lerna](https://github.com/lerna/lerna) to manage the monorepo and tie
|
||||
them all together with the main `nylas-mail-all/scripts/postinstall.es6` script,
|
||||
which in turn, calls `lerna bootstrap`
|
|
@ -1,137 +0,0 @@
|
|||
import fs from 'fs-plus'
|
||||
import path from 'path'
|
||||
import childProcess from 'child_process'
|
||||
|
||||
const TARGET_ALL = 'all'
|
||||
const TARGET_CLOUD = 'cloud'
|
||||
const TARGET_CLIENT = 'client'
|
||||
|
||||
async function spawn(cmd, args, opts = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = Object.assign({stdio: 'inherit'}, opts);
|
||||
const proc = childProcess.spawn(cmd, args, options)
|
||||
proc.on("error", reject)
|
||||
proc.on("exit", resolve)
|
||||
})
|
||||
}
|
||||
|
||||
function unlinkIfExistsSync(p) {
|
||||
try {
|
||||
if (fs.lstatSync(p)) {
|
||||
fs.removeSync(p);
|
||||
}
|
||||
} catch (err) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
function copyErrorLoggerExtensions(privateDir) {
|
||||
const from = path.join(privateDir, 'src')
|
||||
const to = path.resolve(path.join('packages', 'client-app', 'src'))
|
||||
unlinkIfExistsSync(path.join(to, 'error-logger-extensions'));
|
||||
fs.copySync(from, to);
|
||||
}
|
||||
|
||||
function installPrivateResources() {
|
||||
console.log("\n---> Linking private plugins")
|
||||
const privateDir = path.resolve(path.join('packages', 'client-private-plugins'))
|
||||
if (!fs.existsSync(privateDir)) {
|
||||
console.log("\n---> No client app to link. Moving on")
|
||||
return;
|
||||
}
|
||||
|
||||
copyErrorLoggerExtensions(privateDir)
|
||||
|
||||
// link private plugins
|
||||
for (const plugin of fs.readdirSync(path.join(privateDir, 'packages'))) {
|
||||
const from = path.resolve(path.join(privateDir, 'packages', plugin));
|
||||
const to = path.resolve(path.join('packages', 'client-app', 'internal_packages', plugin));
|
||||
unlinkIfExistsSync(to);
|
||||
fs.symlinkSync(from, to, 'dir');
|
||||
}
|
||||
}
|
||||
|
||||
async function lernaBootstrap(installTarget) {
|
||||
console.log("\n---> Installing packages");
|
||||
const lernaCmd = process.platform === 'win32' ? 'lerna.cmd' : 'lerna';
|
||||
const args = ["bootstrap"]
|
||||
switch (installTarget) {
|
||||
case TARGET_CLIENT:
|
||||
args.push(`--ignore='cloud-*'`)
|
||||
break
|
||||
case TARGET_CLOUD:
|
||||
args.push(`--ignore='client-*'`)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
await spawn(path.join('node_modules', '.bin', lernaCmd), args)
|
||||
}
|
||||
|
||||
const npmEnvs = {
|
||||
system: process.env,
|
||||
electron: Object.assign({}, process.env, {
|
||||
NPM_CONFIG_TARGET: '1.7.3',
|
||||
NPM_CONFIG_ARCH: process.arch,
|
||||
NPM_CONFIG_TARGET_ARCH: process.arch,
|
||||
NPM_CONFIG_DISTURL: 'https://atom.io/download/electron',
|
||||
NPM_CONFIG_RUNTIME: 'electron',
|
||||
NPM_CONFIG_BUILD_FROM_SOURCE: true,
|
||||
}),
|
||||
};
|
||||
|
||||
async function npm(cmd, options) {
|
||||
const {cwd, env} = Object.assign({cwd: '.', env: 'system'}, options);
|
||||
const npmCmd = process.platform === 'win32' ? 'npm.cmd' : 'npm'
|
||||
await spawn(npmCmd, [cmd], {
|
||||
cwd: path.resolve(__dirname, '..', cwd),
|
||||
env: npmEnvs[env],
|
||||
})
|
||||
}
|
||||
|
||||
async function electronRebuild() {
|
||||
await npm('rebuild', {
|
||||
cwd: path.join('packages', 'client-app'),
|
||||
env: 'electron',
|
||||
})
|
||||
}
|
||||
|
||||
function getInstallTarget() {
|
||||
const {INSTALL_TARGET} = process.env
|
||||
if (!INSTALL_TARGET) {
|
||||
return TARGET_ALL
|
||||
}
|
||||
if (![TARGET_ALL, TARGET_CLIENT, TARGET_CLOUD].includes(INSTALL_TARGET)) {
|
||||
throw new Error(`postinstall: INSTALL_TARGET must be one of client, cloud, or all. It was set to ${INSTALL_TARGET}`)
|
||||
}
|
||||
return INSTALL_TARGET
|
||||
}
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
const installTarget = getInstallTarget()
|
||||
console.log(`\n---> Installing for target ${installTarget}`);
|
||||
|
||||
if ([TARGET_ALL, TARGET_CLIENT].includes(installTarget)) {
|
||||
installPrivateResources()
|
||||
}
|
||||
|
||||
await lernaBootstrap(installTarget);
|
||||
|
||||
if ([TARGET_ALL, TARGET_CLIENT].includes(installTarget)) {
|
||||
if (process.platform === "darwin") {
|
||||
// Given that `lerna bootstrap` does not install optional dependencies, we
|
||||
// need to manually run `npm install` inside `client-app` so
|
||||
// `node-mac-notifier` get's correctly installed and included in the build
|
||||
// See https://github.com/lerna/lerna/issues/121
|
||||
console.log("\n---> Reinstalling client-app dependencies to include optional dependencies");
|
||||
await npm('install', {cwd: 'packages/client-app', env: 'electron'})
|
||||
}
|
||||
await electronRebuild();
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
main()
|
35
scripts/postinstall.js
Normal file
35
scripts/postinstall.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/env node
|
||||
/* eslint global-require: 0 */
|
||||
/* eslint quote-props: 0 */
|
||||
const path = require('path');
|
||||
const safeExec = require('./utils/child-process-wrapper.js').safeExec;
|
||||
|
||||
const npmEnvs = {
|
||||
system: process.env,
|
||||
electron: Object.assign({}, process.env, {
|
||||
'npm_config_target': require('../packages/client-app/package.json').dependencies.electron,
|
||||
'npm_config_arch': process.arch,
|
||||
'npm_config_target_arch': process.arch,
|
||||
'npm_config_disturl': 'https://atom.io/download/atom-shell',
|
||||
'npm_config_runtime': 'electron',
|
||||
'npm_config_build_from_source': true,
|
||||
}),
|
||||
};
|
||||
|
||||
function npm(cmd, options) {
|
||||
const {cwd, env} = Object.assign({cwd: '.', env: 'system'}, options);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
console.log(`\n-- Running npm ${cmd} in ./${cwd} with ${env} config --`)
|
||||
|
||||
safeExec(`npm ${cmd}`, {
|
||||
cwd: path.resolve(__dirname, '..', cwd),
|
||||
env: npmEnvs[env],
|
||||
}, (err) => {
|
||||
return err ? reject(err) : resolve(null);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
npm('install', {cwd: './packages/client-app', env: 'electron'})
|
||||
.then(() => npm('dedupe', {cwd: './packages/client-app', env: 'electron'}))
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env babel-node
|
||||
#!/usr/bin/env node
|
||||
const childProcess = require('child_process')
|
||||
const path = require('path')
|
||||
const mkdirp = require('mkdirp')
|
46
scripts/utils/child-process-wrapper.js
Normal file
46
scripts/utils/child-process-wrapper.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
var childProcess = require('child_process');
|
||||
|
||||
// Exit the process if the command failed and only call the callback if the
|
||||
// command succeed, output of the command would also be piped.
|
||||
exports.safeExec = function(command, options, callback) {
|
||||
if (!callback) {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
if (!options)
|
||||
options = {};
|
||||
|
||||
// This needed to be increased for `apm test` runs that generate many failures
|
||||
// The default is 200KB.
|
||||
options.maxBuffer = 1024 * 1024;
|
||||
|
||||
options.stdio = "inherit"
|
||||
var child = childProcess.exec(command, options, function(error, stdout, stderr) {
|
||||
if (error && !options.ignoreStderr)
|
||||
process.exit(error.code || 1);
|
||||
else
|
||||
callback(null);
|
||||
});
|
||||
child.stderr.pipe(process.stderr);
|
||||
if (!options.ignoreStdout)
|
||||
child.stdout.pipe(process.stdout);
|
||||
}
|
||||
|
||||
// Same with safeExec but call child_process.spawn instead.
|
||||
exports.safeSpawn = function(command, args, options, callback) {
|
||||
if (!callback) {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
options.stdio = "inherit"
|
||||
var child = childProcess.spawn(command, args, options);
|
||||
child.on('error', function(error) {
|
||||
console.error('Command \'' + command + '\' failed: ' + error.message);
|
||||
});
|
||||
child.on('exit', function(code) {
|
||||
if (code != 0)
|
||||
process.exit(code);
|
||||
else
|
||||
callback(null);
|
||||
});
|
||||
}
|
Loading…
Reference in a new issue