Skip to content

Commit

Permalink
Chore: Script to start Rocket.Chat in HA mode during development (#22398
Browse files Browse the repository at this point in the history
)
  • Loading branch information
d-gubert committed Aug 23, 2021
1 parent 0c75472 commit 2915d1e
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
95 changes: 95 additions & 0 deletions .scripts/run-ha.ts
@@ -0,0 +1,95 @@
import { spawn, SpawnOptions } from 'child_process';
import * as path from 'path';

enum ModeParam {
MAIN = 'main',
INSTANCE = 'instance',
}

interface IConfig extends SpawnOptions {
customEnv: typeof process.env;
parentEnv: typeof process.env;
}

function isMode(value: any): value is ModeParam {
return Object.values(ModeParam).includes(value);
}

function buildConfig(cwd: string): IConfig {
const customEnv: IConfig['customEnv'] = {
INSTANCE_IP: '127.0.0.1',
MONGO_URL: 'mongodb://localhost:3001/meteor',
MONGO_OPLOG_URL: 'mongodb://localhost:3001/local',
};

return {
cwd,
stdio: 'inherit',
shell: true,
customEnv,
parentEnv: process.env,
env: {
...customEnv,
...process.env,
},
};
}

async function runMain(config: IConfig): Promise<void> {
const { customEnv: { INSTANCE_IP }, parentEnv, ...mainConfig } = config;

const spawnConfig = {
...mainConfig,
env: {
INSTANCE_IP,
...parentEnv,
},
};

spawn('meteor', spawnConfig);
}

async function runInstance(config: IConfig): Promise<void> {
// Desctructuring the unused variables allows us to omit them in the `mainConfig`
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { customEnv, parentEnv, ...mainConfig } = config;

const env = {
PORT: '3030',
ROOT_URL: '',
...mainConfig.env,
};

env.ROOT_URL = `http://localhost:${ env.PORT }`;

const spawnConfig = {
...mainConfig,
env,
};

spawn('node', ['.meteor/local/build/main.js'], spawnConfig);
}

async function main(mode: any): Promise<void> {
if (!isMode(mode)) {
mode = 'main';
}

const config = buildConfig(
path.resolve(__dirname, '..'),
);

switch (mode) {
case ModeParam.MAIN:
runMain(config);
break;
case ModeParam.INSTANCE:
runInstance(config);
break;
}
}

// First two parameters are the executable and the path to this script
const [, , mode] = process.argv;

main(mode);
3 changes: 3 additions & 0 deletions package.json
Expand Up @@ -14,6 +14,9 @@
"scripts": {
"prepare": "husky install",
"start": "meteor",
"ha": "meteor npm run ha:start",
"ha:start": "ts-node .scripts/run-ha.ts main",
"ha:add": "ts-node .scripts/run-ha.ts instance",
"debug": "meteor run --inspect",
"debug-brk": "meteor run --inspect-brk",
"lint": "meteor npm run stylelint && meteor npm run eslint",
Expand Down

0 comments on commit 2915d1e

Please sign in to comment.