Use flipper-server if running, otherwise initiate one
Summary: Provided that GK passes: - If a flipper-server instance is running, use and connect. - If not, start flipper-server and connect. Reviewed By: passy Differential Revision: D37034960 fbshipit-source-id: ff79e56e80e74415373f84b78305b4fc3e31f7d0
This commit is contained in:
committed by
Facebook GitHub Bot
parent
184372c271
commit
4b396e1ef3
@@ -15,6 +15,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"flipper-common": "0.0.0",
|
"flipper-common": "0.0.0",
|
||||||
|
"flipper-server-companion": "0.0.0",
|
||||||
"flipper-server-core": "0.0.0",
|
"flipper-server-core": "0.0.0",
|
||||||
"flipper-frontend-core": "0.0.0",
|
"flipper-frontend-core": "0.0.0",
|
||||||
"flipper-ui-core": "0.0.0",
|
"flipper-ui-core": "0.0.0",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
} from 'flipper-plugin';
|
} from 'flipper-plugin';
|
||||||
import {createFlipperServer, FlipperServerState} from 'flipper-frontend-core';
|
import {createFlipperServer, FlipperServerState} from 'flipper-frontend-core';
|
||||||
import {
|
import {
|
||||||
|
attachSocketServer,
|
||||||
FlipperServerImpl,
|
FlipperServerImpl,
|
||||||
getEnvironmentInfo,
|
getEnvironmentInfo,
|
||||||
getGatekeepers,
|
getGatekeepers,
|
||||||
@@ -23,6 +24,8 @@ import {
|
|||||||
loadProcessConfig,
|
loadProcessConfig,
|
||||||
loadSettings,
|
loadSettings,
|
||||||
setupPrefetcher,
|
setupPrefetcher,
|
||||||
|
startFlipperServer,
|
||||||
|
startServer,
|
||||||
Tail,
|
Tail,
|
||||||
} from 'flipper-server-core';
|
} from 'flipper-server-core';
|
||||||
import {
|
import {
|
||||||
@@ -40,25 +43,13 @@ import {initializeElectron} from './electron/initializeElectron';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs-extra';
|
import fs from 'fs-extra';
|
||||||
import {ElectronIpcClientRenderer} from './electronIpc';
|
import {ElectronIpcClientRenderer} from './electronIpc';
|
||||||
|
import {checkSocketInUse, makeSocketPath} from 'flipper-server-core';
|
||||||
|
import {KeytarModule} from 'flipper-server-core/src/utils/keytar';
|
||||||
|
import {initCompanionEnv} from 'flipper-server-companion';
|
||||||
|
|
||||||
enableMapSet();
|
enableMapSet();
|
||||||
|
|
||||||
async function getEmbeddedFlipperServer(
|
async function getKeytarModule(staticPath: string): Promise<KeytarModule> {
|
||||||
logger: Logger,
|
|
||||||
electronIpcClient: ElectronIpcClientRenderer,
|
|
||||||
): Promise<FlipperServer> {
|
|
||||||
const execPath =
|
|
||||||
process.execPath || (await electronIpcClient.send('getProcess')).execPath;
|
|
||||||
const appPath = await electronIpcClient.send('getPath', 'app');
|
|
||||||
const staticPath = getStaticDir(appPath);
|
|
||||||
const isProduction = !/node_modules[\\/]electron[\\/]/.test(execPath);
|
|
||||||
const env = process.env;
|
|
||||||
const environmentInfo = await getEnvironmentInfo(
|
|
||||||
staticPath,
|
|
||||||
isProduction,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
let keytar: any = undefined;
|
let keytar: any = undefined;
|
||||||
try {
|
try {
|
||||||
if (!isTest()) {
|
if (!isTest()) {
|
||||||
@@ -77,13 +68,68 @@ async function getEmbeddedFlipperServer(
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Failed to load keytar:', e);
|
console.error('Failed to load keytar:', e);
|
||||||
}
|
}
|
||||||
|
return keytar;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getFlipperServer(
|
||||||
|
logger: Logger,
|
||||||
|
electronIpcClient: ElectronIpcClientRenderer,
|
||||||
|
): Promise<FlipperServer> {
|
||||||
|
const execPath =
|
||||||
|
process.execPath || (await electronIpcClient.send('getProcess')).execPath;
|
||||||
|
const appPath = await electronIpcClient.send('getPath', 'app');
|
||||||
|
const staticPath = getStaticDir(appPath);
|
||||||
|
const isProduction = !/node_modules[\\/]electron[\\/]/.test(execPath);
|
||||||
|
const env = process.env;
|
||||||
|
const environmentInfo = await getEnvironmentInfo(
|
||||||
|
staticPath,
|
||||||
|
isProduction,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
const keytar: KeytarModule = await getKeytarModule(staticPath);
|
||||||
|
const gatekeepers = getGatekeepers(environmentInfo.os.unixname);
|
||||||
|
if (gatekeepers['flipper_desktop_use_server']) {
|
||||||
|
const socketPath = await makeSocketPath();
|
||||||
|
if (!(await checkSocketInUse(socketPath))) {
|
||||||
|
console.info('flipper-server: not running/listening, start');
|
||||||
|
|
||||||
|
const {socket} = await startServer({
|
||||||
|
port: 52342,
|
||||||
|
staticDir: staticPath,
|
||||||
|
entry: 'index.web.dev.html',
|
||||||
|
});
|
||||||
|
|
||||||
|
const flipperServer = await startFlipperServer(
|
||||||
|
appPath,
|
||||||
|
staticPath,
|
||||||
|
'',
|
||||||
|
false,
|
||||||
|
keytar,
|
||||||
|
);
|
||||||
|
|
||||||
|
const companionEnv = await initCompanionEnv(flipperServer);
|
||||||
|
await flipperServer.connect();
|
||||||
|
|
||||||
|
attachSocketServer(flipperServer, socket, companionEnv);
|
||||||
|
} else {
|
||||||
|
console.info('flipper-server: already running');
|
||||||
|
const loggerOutputFile = 'flipper-server-log.out';
|
||||||
|
tailServerLogs(path.join(staticPath, loggerOutputFile));
|
||||||
|
}
|
||||||
|
|
||||||
|
const flipperServer = await createFlipperServer(
|
||||||
|
'localhost',
|
||||||
|
52342,
|
||||||
|
(_state: FlipperServerState) => {},
|
||||||
|
);
|
||||||
|
return flipperServer;
|
||||||
|
} else {
|
||||||
const flipperServer = new FlipperServerImpl(
|
const flipperServer = new FlipperServerImpl(
|
||||||
{
|
{
|
||||||
environmentInfo,
|
environmentInfo,
|
||||||
env: parseEnvironmentVariables(env),
|
env: parseEnvironmentVariables(env),
|
||||||
// TODO: make userame parameterizable
|
// TODO: make username parameterizable
|
||||||
gatekeepers: getGatekeepers(environmentInfo.os.unixname),
|
gatekeepers: gatekeepers,
|
||||||
paths: {
|
paths: {
|
||||||
appPath,
|
appPath,
|
||||||
homePath: await electronIpcClient.send('getPath', 'home'),
|
homePath: await electronIpcClient.send('getPath', 'home'),
|
||||||
@@ -95,32 +141,15 @@ async function getEmbeddedFlipperServer(
|
|||||||
launcherSettings: await loadLauncherSettings(),
|
launcherSettings: await loadLauncherSettings(),
|
||||||
processConfig: loadProcessConfig(env),
|
processConfig: loadProcessConfig(env),
|
||||||
settings: await loadSettings(),
|
settings: await loadSettings(),
|
||||||
validWebSocketOrigins: constants.VALID_WEB_SOCKET_REQUEST_ORIGIN_PREFIXES,
|
validWebSocketOrigins:
|
||||||
|
constants.VALID_WEB_SOCKET_REQUEST_ORIGIN_PREFIXES,
|
||||||
},
|
},
|
||||||
logger,
|
logger,
|
||||||
keytar,
|
keytar,
|
||||||
);
|
);
|
||||||
|
|
||||||
return flipperServer;
|
return flipperServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
||||||
async function getFlipperServer(
|
|
||||||
_logger: Logger,
|
|
||||||
electronIpcClient: ElectronIpcClientRenderer,
|
|
||||||
): Promise<FlipperServer> {
|
|
||||||
const appPath = await electronIpcClient.send('getPath', 'app');
|
|
||||||
const staticPath = getStaticDir(appPath);
|
|
||||||
|
|
||||||
const loggerOutputFile = 'flipper-server-log.out';
|
|
||||||
tailServerLogs(path.join(staticPath, loggerOutputFile));
|
|
||||||
|
|
||||||
const flipperServer = await createFlipperServer(
|
|
||||||
'localhost',
|
|
||||||
52342,
|
|
||||||
(_state: FlipperServerState) => {},
|
|
||||||
);
|
|
||||||
return flipperServer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function start() {
|
async function start() {
|
||||||
@@ -129,7 +158,7 @@ async function start() {
|
|||||||
|
|
||||||
const electronIpcClient = new ElectronIpcClientRenderer();
|
const electronIpcClient = new ElectronIpcClientRenderer();
|
||||||
|
|
||||||
const flipperServer: FlipperServer = await getEmbeddedFlipperServer(
|
const flipperServer: FlipperServer = await getFlipperServer(
|
||||||
logger,
|
logger,
|
||||||
electronIpcClient,
|
electronIpcClient,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
{
|
{
|
||||||
"path": "../flipper-frontend-core"
|
"path": "../flipper-frontend-core"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "../flipper-server-companion"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "../flipper-server-core"
|
"path": "../flipper-server-core"
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user