refactor(@embark/cmd_controller): make console command work with new APIs

This commit is contained in:
Pascal Precht 2019-08-16 10:38:25 +02:00 committed by Iuri Matias
parent 98721034fe
commit d169b92f50

View File

@ -214,15 +214,9 @@ class EmbarkController {
console.dir("-- before timeout - file changed") console.dir("-- before timeout - file changed")
if (fileType === 'contract' || fileType === 'config') { if (fileType === 'contract' || fileType === 'config') {
let contractsFiles = await engine.events.request2("config:contractsFiles");
let compiledContracts = await engine.events.request2("compiler:contracts:compile", contractsFiles);
let _contractsConfig = await engine.events.request2("config:contractsConfig");
let contractsConfig = cloneDeep(_contractsConfig);
let [contractsList, contractDependencies] = await engine.events.request2("contracts:build", contractsConfig, compiledContracts);
try { try {
await engine.events.request2("deployment:contracts:deploy", contractsList, contractDependencies); await compileAndDeploySmartContracts(engine);
} } catch (err) {
catch (err) {
engine.logger.error(err); engine.logger.error(err);
} }
} else if (fileType === 'asset') { } else if (fileType === 'asset') {
@ -474,13 +468,11 @@ class EmbarkController {
}); });
engine.startEngine(async () => { engine.startEngine(async () => {
let contractsFiles = await engine.events.request2("config:contractsFiles"); try {
let compiledContracts = await engine.events.request2("compiler:contracts:compile", contractsFiles); await compileAndDeploySmartContracts(engine);
let _contractsConfig = await engine.events.request2("config:contractsConfig"); } catch (e) {
let contractsConfig = cloneDeep(_contractsConfig); return callback(e);
let [contractsList, contractDependencies] = await engine.events.request2("contracts:build", contractsConfig, compiledContracts); }
await engine.events.request2("deployment:contracts:deploy", contractsList, contractDependencies);
callback(); callback();
}); });
}, },
@ -529,58 +521,75 @@ class EmbarkController {
const isSecondaryProcess = (engine) => {return engine.ipc.connected && engine.ipc.isClient();}; const isSecondaryProcess = (engine) => {return engine.ipc.connected && engine.ipc.isClient();};
async.waterfall([ async.waterfall([
function initEngine(callback) { callback => {
engine.init({}, callback); engine.init({}, callback);
}, },
function startServices(callback) { callback => {
let pluginList = engine.plugins.listPlugins(); let pluginList = engine.plugins.listPlugins();
if (pluginList.length > 0) { if (pluginList.length > 0) {
engine.logger.info(__("loaded plugins") + ": " + pluginList.join(", ")); engine.logger.info(__("loaded plugins") + ": " + pluginList.join(", "));
} }
engine.startService("web3"); engine.registerModuleGroup("coreComponents");
engine.startService("deployment"); engine.registerModuleGroup("stackComponents");
engine.startService("codeGenerator");
engine.startService("codeRunner");
engine.startService("console");
engine.registerModuleGroup("blockchain");
engine.registerModuleGroup("compiler");
engine.registerModuleGroup("contracts");
engine.registerModuleGroup("pipeline");
engine.registerModuleGroup("filewatcher");
engine.registerModuleGroup("storage");
engine.registerModuleGroup("communication");
engine.registerModulePackage('embark-deploy-tracker', {plugins: engine.plugins});
engine.registerModulePackage('embark-plugin-cmd', {embarkConfigFile: engine.embarkConfig, embarkConfig: engine.config.embarkConfig, packageFile: 'package.json'});
callback();
},
callback => {
if (isSecondaryProcess(engine)) { if (isSecondaryProcess(engine)) {
return callback(); return callback();
} }
engine.startService("embarkListener");
engine.startService("processManager");
engine.startService("coreProcess");
engine.startService("serviceMonitor");
engine.startService("libraryManager");
engine.startService("pipeline");
engine.startService("storage");
engine.startService("cockpit");
engine.startService("pluginCommand");
engine.events.request('blockchain:ready', callback); let plugin = engine.plugins.createPlugin('cmdcontrollerplugin', {});
},
function ipcConnect(callback) { plugin.registerActionForEvent("embark:engine:started", async (_params, cb) => {
return callback(); await engine.events.request2("blockchain:node:start", engine.config.blockchainConfig);
}, try {
function deploy(callback) { await Promise.all([
// Skip if we are connected to a websocket, the server will do it engine.events.request2("storage:node:start", engine.config.storageConfig),
if (isSecondaryProcess(engine)) { engine.events.request2("communication:node:start", engine.config.communicationConfig)
return callback(); ]);
} } catch (e) {
engine.config.reloadConfig(); return cb(e);
engine.events.request('deploy:contracts', function (err) { }
callback(err); cb();
}); });
},
function waitForWriteFinish(callback) { engine.events.on('outputDone', function () {
// Skip if we are connected to a websocket, the server will do it engine.logger.info((__("Looking for documentation? You can find it at") + " ").cyan + "http://embark.status.im/docs/".green.underline + ".".cyan);
if (isSecondaryProcess(engine)) { engine.logger.info(__("Ready").underline);
return callback(); engine.events.emit("status", __("Ready").green);
} });
engine.logger.info("Finished deploying".underline);
engine.events.once('outputDone', (err) => { engine.events.on('file-event', async ({ fileType, path }) => {
engine.logger.info(__("finished building").underline); if (fileType === 'contract' || fileType === 'config') {
callback(err); try {
await compileAndDeploySmartContracts(engine);
} catch (e) {
engine.logger.error(e);
}
} else if (fileType === 'asset') {
engine.events.request('pipeline:generateAll', () => engine.events.emit('outputDone'));
}
});
engine.startEngine(async () => {
try {
await compileAndDeploySmartContracts(engine);
} catch (e) {
return callback(e);
}
engine.events.request2("watcher:start")
callback();
}); });
}, },
function startREPL(callback) { function startREPL(callback) {
@ -596,6 +605,7 @@ class EmbarkController {
if (err) { if (err) {
engine.logger.error(err.message); engine.logger.error(err.message);
engine.logger.info(err.stack); engine.logger.info(err.stack);
process.exit(1);
} else { } else {
engine.events.emit('firstDeploymentDone'); engine.events.emit('firstDeploymentDone');
} }
@ -1033,3 +1043,12 @@ class EmbarkController {
} }
module.exports = EmbarkController; module.exports = EmbarkController;
async function compileAndDeploySmartContracts(engine) {
let contractsFiles = await engine.events.request2("config:contractsFiles");
let compiledContracts = await engine.events.request2("compiler:contracts:compile", contractsFiles);
let _contractsConfig = await engine.events.request2("config:contractsConfig");
let contractsConfig = cloneDeep(_contractsConfig);
let [contractsList, contractDependencies] = await engine.events.request2("contracts:build", contractsConfig, compiledContracts);
return await engine.events.request2("deployment:contracts:deploy", contractsList, contractDependencies);
}