mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
bcbf57d590
Summary: This uses a newer version of mocha in grist-core so that tests can be run in parallel. That allows more tests to be moved without slowing things down overall. Tests moved are venerable browser tests; only the ones that "just work" or worked without too much trouble to are moved, in order to keep the diff from growing too large. Will wrestle with more in follow up. Parallelism is at the file level, rather than the individual test. The newer version of mocha isn't needed for grist-saas repo; tests are parallelized in our internal CI by other means. I've chosen to allocate files to workers in a cruder way than our internal CI, based on initial characters rather than an automated process. The automated process would need some reworking to be compatible with mocha running in parallel mode. Test Plan: this diff was tested first on grist-core, then ported to grist-saas so saas repo history will correctly track history of moved files. Reviewers: jarek Reviewed By: jarek Subscribers: jarek Differential Revision: https://phab.getgrist.com/D3927
122 lines
3.8 KiB
TypeScript
122 lines
3.8 KiB
TypeScript
/**
|
|
* Main entrypoint for grist-core server.
|
|
*
|
|
* By default, starts up on port 8484.
|
|
*/
|
|
|
|
import {commonUrls} from 'app/common/gristUrls';
|
|
import {isAffirmative} from 'app/common/gutil';
|
|
import {HomeDBManager} from 'app/gen-server/lib/HomeDBManager';
|
|
import {TEAM_FREE_PLAN} from 'app/common/Features';
|
|
|
|
const debugging = isAffirmative(process.env.DEBUG) || isAffirmative(process.env.VERBOSE);
|
|
|
|
// Set log levels before importing anything.
|
|
if (!debugging) {
|
|
// Be a lot less noisy by default.
|
|
setDefaultEnv('GRIST_LOG_LEVEL', 'error');
|
|
setDefaultEnv('GRIST_LOG_SKIP_HTTP', 'true');
|
|
}
|
|
|
|
// Use a distinct cookie. Bump version to 2.
|
|
setDefaultEnv('GRIST_SESSION_COOKIE', 'grist_core2');
|
|
|
|
setDefaultEnv('GRIST_SERVE_SAME_ORIGIN', 'true');
|
|
setDefaultEnv('GRIST_SINGLE_PORT', 'true');
|
|
setDefaultEnv('GRIST_DEFAULT_PRODUCT', 'Free');
|
|
|
|
if (!process.env.GRIST_SINGLE_ORG) {
|
|
// org identifiers in domains are fiddly to configure right, so by
|
|
// default don't do that.
|
|
setDefaultEnv('GRIST_ORG_IN_PATH', 'true');
|
|
}
|
|
|
|
setDefaultEnv('GRIST_UI_FEATURES', 'helpCenter,billing,templates,multiSite,multiAccounts,sendToDrive');
|
|
setDefaultEnv('GRIST_WIDGET_LIST_URL', commonUrls.gristLabsWidgetRepository);
|
|
import {updateDb} from 'app/server/lib/dbUtils';
|
|
import {main as mergedServerMain} from 'app/server/mergedServerMain';
|
|
import * as fse from 'fs-extra';
|
|
|
|
const G = {
|
|
port: parseInt(process.env.PORT!, 10) || 8484,
|
|
};
|
|
|
|
// Set a default for an environment variable.
|
|
function setDefaultEnv(name: string, value: string) {
|
|
if (process.env[name] === undefined) {
|
|
process.env[name] = value;
|
|
}
|
|
}
|
|
|
|
// tslint:disable:no-console
|
|
export async function main() {
|
|
console.log('Welcome to Grist.');
|
|
if (!debugging) {
|
|
console.log(`In quiet mode, see http://localhost:${G.port} to use.`);
|
|
console.log('For full logs, re-run with DEBUG=1');
|
|
}
|
|
|
|
// If SAML is not configured, there's no login system, so provide a default email address.
|
|
setDefaultEnv('GRIST_DEFAULT_EMAIL', 'you@example.com');
|
|
// Set directory for uploaded documents.
|
|
setDefaultEnv('GRIST_DATA_DIR', 'docs');
|
|
await fse.mkdirp(process.env.GRIST_DATA_DIR!);
|
|
// Make a blank db if needed.
|
|
if (process.env.TEST_CLEAN_DATABASE) {
|
|
const {createInitialDb} = require('test/gen-server/seed');
|
|
await createInitialDb();
|
|
} else {
|
|
await updateDb();
|
|
}
|
|
const db = new HomeDBManager();
|
|
await db.connect();
|
|
await db.initializeSpecialIds({skipWorkspaces: true});
|
|
|
|
// If a team/organization is specified, make sure it exists.
|
|
const org = process.env.GRIST_SINGLE_ORG;
|
|
if (org && org !== 'docs') {
|
|
try {
|
|
db.unwrapQueryResult(await db.getOrg({
|
|
userId: db.getPreviewerUserId(),
|
|
includeSupport: false,
|
|
}, org));
|
|
} catch(e) {
|
|
if (!String(e).match(/organization not found/)) {
|
|
throw e;
|
|
}
|
|
const email = process.env.GRIST_DEFAULT_EMAIL;
|
|
if (!email) {
|
|
throw new Error('need GRIST_DEFAULT_EMAIL to create site');
|
|
}
|
|
const profile = {email, name: email};
|
|
const user = await db.getUserByLogin(email, {profile});
|
|
if (!user) {
|
|
// This should not happen.
|
|
throw new Error('failed to create GRIST_DEFAULT_EMAIL user');
|
|
}
|
|
db.unwrapQueryResult(await db.addOrg(user, {
|
|
name: org,
|
|
domain: org,
|
|
}, {
|
|
setUserAsOwner: false,
|
|
useNewPlan: true,
|
|
planType: TEAM_FREE_PLAN
|
|
}));
|
|
}
|
|
}
|
|
|
|
// Launch single-port, self-contained version of Grist.
|
|
const server = await mergedServerMain(G.port, ["home", "docs", "static"]);
|
|
if (process.env.GRIST_TESTING_SOCKET) {
|
|
await server.addTestingHooks();
|
|
}
|
|
if (process.env.GRIST_SERVE_PLUGINS_PORT) {
|
|
await server.startCopy('pluginServer', parseInt(process.env.GRIST_SERVE_PLUGINS_PORT, 10));
|
|
}
|
|
return server;
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main().catch((err) => console.error(err));
|
|
}
|