embark/lib/index.js

471 lines
15 KiB
JavaScript
Raw Normal View History

let async = require('async');
const constants = require('./constants');
WIP to merge in other swarm changes Adding swarm to embarkjs. WIP. Add 'auto' setting for geth CORS and websockets origin * 'auto' now supported for `rpcCorsDomain` and `wsOrigins` in the blockchain config. * 'auto' set to the default value in blockchain config for test and demo apps. test add config and contract and add test addFileToPipeline test and registerBeforeDeploy with new arg add more registers but generation one fails in run WIP commit Undo changes to test config. Merge pull request #381 from embark-framework/features/cors-auto Add 'auto' setting for geth CORS and websockets origin fix a bug where upload cmd used plugin name don't error if it's an empty dapp with no contracts yet Merge pull request #383 from embark-framework/no_contracts don't error if it's an empty dapp with no contracts yet remove duplicated entry force zepplein version for travis Merge pull request #384 from embark-framework/chores/test-allpligin-apis Small fixes for plugin APIs intercept logs in the app itself - stopgap fix Merge pull request #385 from embark-framework/console_logs_fix intercept logs in the app itself - stopgap fix * removed unneeded provider property. * add 'swarm' as a provider in the storage.config * update method for swarm service check Merge branch 'develop' into features/add-swarm-to-embarkjs More work to add swarm to embarkjs * added eth-lib to parse result of swarm text * changed "currentStorage" and "currentMessages" to "currentProvider" for consistency. * added protocol to storage config * selectively starts storage service depending on which one is configured in the storage config * run service check for ipfs/swarm prior to uploaded * added swarm methods for embarkjs Updated code based on code review check if testrpc is installed and warn if not Merge pull request #386 from embark-framework/bug_fix/test-rpc-not-installed check if testrpc is installed and warn if not Removed timeout Removed spacer Merge pull request #382 from embark-framework/react-demo Updating embark demo to use react instead of jquery fix on contract add Merge pull request #387 from embark-framework/bug_fix/new-contract-in-empty-dapp Fix adding a contract redeploy with right config on config change fix tests reset watchers after build to make sure files remain watch Merge pull request #389 from embark-framework/bug_fix/file-changes-not-watched Fix files not being watched Merge pull request #388 from embark-framework/bug_fix/changing-contract-config Redeploy with right config on config change Added swarm support in embarkjs and isAvailable for messages/storage * reverted currentProvider back to currentStorage and currentMessages * added `EmbarkJS.Storage.isAvailable` and `EmbarkJS.Messages.isAvailable()` and underlying provider functions for Whisper, Orbit, IPFS, and Swarm * Finished swarm implementation in embarkjs plus cleanup * updated test app storage config to swarm to show swarm config option Merge branch 'develop' into features/add-swarm-to-embarkjs
2018-04-30 05:56:43 +00:00
const _ = require('underscore');
2018-05-24 15:52:16 +00:00
const StorageProcessesLauncher = require('./processes/storageProcesses/storageProcessesLauncher');
2017-03-12 15:21:19 +00:00
// require("./utils/debug_util.js")(__filename, async);
2017-12-05 23:14:46 +00:00
require('colors');
2016-08-14 12:04:34 +00:00
2018-04-09 20:14:07 +00:00
// Override process.chdir so that we have a partial-implementation PWD for Windows
const realChdir = process.chdir;
process.chdir = (...args) => {
if (!process.env.PWD) {
process.env.PWD = process.cwd();
}
realChdir(...args);
};
2017-03-30 13:16:46 +00:00
let Engine = require('./core/engine.js');
let version = require('../package.json').version;
2017-03-31 11:34:43 +00:00
class Embark {
2017-03-30 13:16:46 +00:00
constructor (options) {
this.version = version;
this.options = options || {};
}
2017-03-30 11:12:39 +00:00
2017-03-30 13:16:46 +00:00
initConfig(env, options) {
let Events = require('./core/events.js');
let Logger = require('./core/logger.js');
let Config = require('./core/config.js');
2017-03-30 11:12:39 +00:00
2017-03-30 13:16:46 +00:00
this.events = new Events();
2018-03-15 21:18:20 +00:00
this.logger = new Logger({logLevel: 'debug', events: this.events});
2017-03-30 13:16:46 +00:00
this.config = new Config({env: env, logger: this.logger, events: this.events, context: this.context});
2017-03-30 11:12:39 +00:00
this.config.loadConfigFiles(options);
this.plugins = this.config.plugins;
2017-03-30 13:16:46 +00:00
}
2017-03-30 11:12:39 +00:00
isDev(env) {
if (this.config && this.config.blockchainConfig && this.config.blockchainConfig.isDev) {
return true;
} else if (this.config && this.config.blockchainConfig && this.config.blockchainConfig.isDev === false) {
return false;
}
return (env === 'development');
}
2017-03-30 13:16:46 +00:00
blockchain(env, client) {
this.context = [constants.contexts.blockchain];
return require('./cmds/blockchain/blockchain.js')(this.config.blockchainConfig, client, env, this.isDev(env)).run();
2017-03-30 13:16:46 +00:00
}
2017-02-25 03:49:34 +00:00
2017-03-30 13:16:46 +00:00
simulator(options) {
this.context = options.context || [constants.contexts.simulator, constants.contexts.blockchain];
2017-03-30 13:16:46 +00:00
let Simulator = require('./cmds/simulator.js');
let simulator = new Simulator({blockchainConfig: this.config.blockchainConfig, logger: this.logger});
2017-03-30 13:16:46 +00:00
simulator.run(options);
}
generateTemplate(templateName, destinationFolder, name) {
this.context = [constants.contexts.templateGeneration];
2017-03-30 13:16:46 +00:00
let TemplateGenerator = require('./cmds/template_generator.js');
let templateGenerator = new TemplateGenerator(templateName);
templateGenerator.generate(destinationFolder, name);
}
2017-02-25 03:49:34 +00:00
2018-05-24 15:52:16 +00:00
_checkStorageEndpoint(engine, platform, callback) {
let checkFn;
_.find(engine.servicesMonitor.checkList, (value, key) => {
if(key.toLowerCase() === platform.toLowerCase()){
checkFn = value;
return true;
}
});
if (!checkFn || typeof checkFn.fn !== 'function') {
return callback();
}
checkFn.fn(function (serviceCheckResult) {
if (!serviceCheckResult.status || serviceCheckResult.status === 'off') {
return callback('No node');
}
callback();
});
}
_startStorageNode(engine, platform, callback) {
const storageProcessesLauncher = new StorageProcessesLauncher({
logger: engine.logger,
events: engine.events,
storageConfig: engine.config.storageConfig,
webServerConfig: engine.config.webServerConfig
2018-05-24 15:52:16 +00:00
});
return storageProcessesLauncher.launchProcess(platform.toLowerCase(), (err) => {
if (err) {
engine.logger.error(err);
return callback(err);
}
callback();
});
}
2017-03-30 13:16:46 +00:00
run(options) {
2017-03-31 11:34:43 +00:00
let self = this;
self.context = options.context || [constants.contexts.run, constants.contexts.build];
2017-03-30 13:16:46 +00:00
let Dashboard = require('./dashboard/dashboard.js');
2017-12-19 20:14:09 +00:00
let windowSize = require('window-size');
2017-03-30 13:16:46 +00:00
let engine = new Engine({
env: options.env,
client: options.client,
locale: options.locale,
isDev: this.isDev(options.env),
2017-03-31 11:34:43 +00:00
version: this.version,
embarkConfig: options.embarkConfig || 'embark.json',
logFile: options.logFile,
logLevel: options.logLevel,
context: self.context
2017-03-30 13:16:46 +00:00
});
engine.init();
if (!options.useDashboard) {
engine.logger.info('========================'.bold.green);
2018-05-08 21:49:46 +00:00
engine.logger.info((__('Welcome to Embark') + ' ' + this.version).yellow.bold);
engine.logger.info('========================'.bold.green);
2017-03-30 13:16:46 +00:00
}
async.parallel([
function startDashboard(callback) {
if (!options.useDashboard) {
return callback();
}
let dashboard = new Dashboard({
2017-12-17 23:34:41 +00:00
events: engine.events,
2017-03-30 13:16:46 +00:00
logger: engine.logger,
plugins: engine.plugins,
2017-03-31 11:34:43 +00:00
version: self.version,
2017-07-06 23:50:36 +00:00
env: engine.env,
contractsConfig: engine.config.contractsConfig
2017-03-30 13:16:46 +00:00
});
dashboard.start(function () {
2018-05-08 21:49:46 +00:00
engine.logger.info(__('dashboard start'));
callback();
2017-03-30 13:16:46 +00:00
});
},
function (callback) {
let pluginList = engine.plugins.listPlugins();
if (pluginList.length > 0) {
2018-05-08 21:49:46 +00:00
engine.logger.info(__("loaded plugins") + ": " + pluginList.join(", "));
2017-03-30 11:12:39 +00:00
}
2017-03-30 13:16:46 +00:00
engine.startMonitor();
engine.startService("libraryManager");
2018-05-23 15:16:56 +00:00
engine.startService("codeRunner");
2017-03-30 13:16:46 +00:00
engine.startService("web3");
engine.startService("pipeline");
engine.startService("deployment");
engine.startService('storage');
2018-05-23 15:16:13 +00:00
engine.startService("codeGenerator");
engine.startService("namingSystem");
2017-03-30 13:16:46 +00:00
engine.events.on('check:backOnline:Ethereum', function () {
2018-05-08 21:49:46 +00:00
engine.logger.info(__('Ethereum node detected') + '..');
2017-03-30 13:16:46 +00:00
engine.config.reloadConfig();
engine.events.request('deploy:contracts', function() {
2018-05-08 21:49:46 +00:00
engine.logger.info(__('Deployment Done'));
2017-03-30 13:16:46 +00:00
});
2016-11-28 20:14:39 +00:00
});
2017-03-30 13:16:46 +00:00
2018-05-24 15:52:16 +00:00
// Check storage
const platform = engine.config.storageConfig.provider;
self._checkStorageEndpoint(engine, platform, (err) => {
2018-05-30 17:23:18 +00:00
if (!err) {
return;
2018-05-24 15:52:16 +00:00
}
2018-05-30 17:23:18 +00:00
self._startStorageNode(engine, platform, (err) => {
if (err) {
engine.logger.error('Error while starting a storage process for ' + platform);
engine.logger.error(err);
}
});
2018-05-24 15:52:16 +00:00
});
engine.events.on('outputDone', function () {
2018-05-08 21:49:46 +00:00
engine.logger.info((__("Looking for documentation? You can find it at") + " ").cyan + "http://embark.status.im/docs/".green.underline + ".".cyan);
engine.logger.info(__("Ready").underline);
engine.events.emit("status", __("Ready").green);
});
if (options.runWebserver) {
engine.startService("webServer", {
host: options.serverHost,
port: options.serverPort
});
}
engine.startService("fileWatcher");
callback();
2017-03-30 13:16:46 +00:00
}
2017-12-05 23:14:46 +00:00
], function (err, _result) {
2017-03-30 13:16:46 +00:00
if (err) {
engine.logger.error(err.message);
engine.logger.info(err.stack);
2016-10-31 02:04:25 +00:00
} else {
2017-12-19 20:14:09 +00:00
engine.events.emit('firstDeploymentDone');
let size = windowSize.get();
if (size.height < 40 || size.width < 118) {
2018-05-08 21:49:46 +00:00
engine.logger.warn(__("tip: you can resize the terminal or disable the dashboard with") + " embark run --nodashboard".bold.underline);
2017-12-19 20:14:09 +00:00
}
2016-10-31 02:04:25 +00:00
}
2017-03-30 13:16:46 +00:00
});
}
build(options) {
this.context = options.context || [constants.contexts.build];
let engine = new Engine({
env: options.env,
2018-05-22 19:46:02 +00:00
client: options.client,
locale: options.locale,
isDev: this.isDev(options.env),
version: this.version,
embarkConfig: 'embark.json',
interceptLogs: false,
logFile: options.logFile,
logLevel: options.logLevel,
events: options.events,
logger: options.logger,
config: options.config,
plugins: options.plugins,
context: this.context
});
engine.init();
2016-10-02 21:26:57 +00:00
2017-03-30 13:16:46 +00:00
async.waterfall([
function startServices(callback) {
let pluginList = engine.plugins.listPlugins();
if (pluginList.length > 0) {
2018-05-08 21:49:46 +00:00
engine.logger.info(__("loaded plugins") + ": " + pluginList.join(", "));
2017-03-30 13:16:46 +00:00
}
engine.startService("libraryManager");
2018-05-23 15:16:56 +00:00
engine.startService("codeRunner");
2017-03-30 13:16:46 +00:00
engine.startService("web3");
engine.startService("pipeline");
engine.startService("deployment", {onlyCompile: options.onlyCompile});
engine.startService("storage");
2018-05-23 15:16:13 +00:00
engine.startService("codeGenerator");
2017-03-30 13:16:46 +00:00
callback();
},
function deploy(callback) {
engine.events.request('deploy:contracts', function(err) {
2018-05-23 14:06:12 +00:00
callback(err);
2017-03-30 13:16:46 +00:00
});
}
2017-12-05 23:14:46 +00:00
], function (err, _result) {
2017-03-30 13:16:46 +00:00
if (err) {
engine.logger.error(err.message);
engine.logger.debug(err.stack);
} else {
2018-05-08 21:49:46 +00:00
engine.logger.info(__("finished building").underline);
2017-03-30 13:16:46 +00:00
}
// needed due to child processes
process.exit();
2017-03-30 13:16:46 +00:00
});
}
initTests(options) {
this.context = options.context || [constants.contexts.test];
let Test = require('./tests/test.js');
options.context = this.context;
2017-03-30 13:16:46 +00:00
return new Test(options);
}
graph(options) {
this.context = options.context || [constants.contexts.graph];
options.onlyCompile = true;
let engine = new Engine({
env: options.env,
isDev: this.isDev(options.env),
version: this.version,
embarkConfig: options.embarkConfig || 'embark.json',
logFile: options.logFile,
context: this.context
});
engine.init();
async.parallel([
2018-05-08 21:49:46 +00:00
function (callback) {
let pluginList = engine.plugins.listPlugins();
if (pluginList.length > 0) {
2018-05-08 21:49:46 +00:00
engine.logger.info(__("loaded plugins") + ": " + pluginList.join(", "));
}
engine.startMonitor();
engine.startService("libraryManager");
engine.startService("pipeline");
engine.startService("deployment", {onlyCompile: true});
2018-05-23 15:16:13 +00:00
engine.startService("codeGenerator");
engine.events.request('deploy:contracts', function(err) {
callback(err);
});
}
], (err, _result) => {
if (err) {
engine.logger.error(err.message);
engine.logger.info(err.stack);
} else {
const GraphGenerator = require('./cmds/graph.js');
let graphGen = new GraphGenerator(engine);
graphGen.generate(options);
2018-05-08 21:49:46 +00:00
engine.logger.info(__("Done. %s generated", "./diagram.svg").underline);
}
2018-05-23 15:13:51 +00:00
process.exit();
});
}
2018-01-11 14:22:58 +00:00
reset() {
this.context = [constants.contexts.reset];
2018-01-11 14:22:58 +00:00
let resetCmd = require('./cmds/reset.js');
resetCmd();
}
upload(options) {
2018-05-24 15:52:16 +00:00
const self = this;
this.context = options.context || [constants.contexts.upload, constants.contexts.build];
let engine = new Engine({
env: options.env,
2018-05-22 19:46:58 +00:00
client: options.client,
locale: options.locale,
isDev: this.isDev(options.env),
version: this.version,
embarkConfig: 'embark.json',
interceptLogs: false,
logFile: options.logFile,
logLevel: options.logLevel,
events: options.events,
logger: options.logger,
config: options.config,
plugins: options.plugins
});
engine.init();
let platform = engine.config.storageConfig.upload.provider;
2017-12-27 00:55:42 +00:00
let cmdPlugin;
async.waterfall([
2018-05-08 21:49:46 +00:00
function startServices(callback) {
2018-05-08 21:49:46 +00:00
engine.startService("libraryManager");
2018-05-23 15:16:56 +00:00
engine.startService("codeRunner");
engine.startService("web3");
engine.startService("pipeline");
engine.startService("deployment");
engine.startService('storage');
2018-05-23 15:16:13 +00:00
engine.startService("codeGenerator");
WIP to merge in other swarm changes Adding swarm to embarkjs. WIP. Add 'auto' setting for geth CORS and websockets origin * 'auto' now supported for `rpcCorsDomain` and `wsOrigins` in the blockchain config. * 'auto' set to the default value in blockchain config for test and demo apps. test add config and contract and add test addFileToPipeline test and registerBeforeDeploy with new arg add more registers but generation one fails in run WIP commit Undo changes to test config. Merge pull request #381 from embark-framework/features/cors-auto Add 'auto' setting for geth CORS and websockets origin fix a bug where upload cmd used plugin name don't error if it's an empty dapp with no contracts yet Merge pull request #383 from embark-framework/no_contracts don't error if it's an empty dapp with no contracts yet remove duplicated entry force zepplein version for travis Merge pull request #384 from embark-framework/chores/test-allpligin-apis Small fixes for plugin APIs intercept logs in the app itself - stopgap fix Merge pull request #385 from embark-framework/console_logs_fix intercept logs in the app itself - stopgap fix * removed unneeded provider property. * add 'swarm' as a provider in the storage.config * update method for swarm service check Merge branch 'develop' into features/add-swarm-to-embarkjs More work to add swarm to embarkjs * added eth-lib to parse result of swarm text * changed "currentStorage" and "currentMessages" to "currentProvider" for consistency. * added protocol to storage config * selectively starts storage service depending on which one is configured in the storage config * run service check for ipfs/swarm prior to uploaded * added swarm methods for embarkjs Updated code based on code review check if testrpc is installed and warn if not Merge pull request #386 from embark-framework/bug_fix/test-rpc-not-installed check if testrpc is installed and warn if not Removed timeout Removed spacer Merge pull request #382 from embark-framework/react-demo Updating embark demo to use react instead of jquery fix on contract add Merge pull request #387 from embark-framework/bug_fix/new-contract-in-empty-dapp Fix adding a contract redeploy with right config on config change fix tests reset watchers after build to make sure files remain watch Merge pull request #389 from embark-framework/bug_fix/file-changes-not-watched Fix files not being watched Merge pull request #388 from embark-framework/bug_fix/changing-contract-config Redeploy with right config on config change Added swarm support in embarkjs and isAvailable for messages/storage * reverted currentProvider back to currentStorage and currentMessages * added `EmbarkJS.Storage.isAvailable` and `EmbarkJS.Messages.isAvailable()` and underlying provider functions for Whisper, Orbit, IPFS, and Swarm * Finished swarm implementation in embarkjs plus cleanup * updated test app storage config to swarm to show swarm config option Merge branch 'develop' into features/add-swarm-to-embarkjs
2018-04-30 05:56:43 +00:00
engine.startMonitor();
callback();
},
WIP to merge in other swarm changes Adding swarm to embarkjs. WIP. Add 'auto' setting for geth CORS and websockets origin * 'auto' now supported for `rpcCorsDomain` and `wsOrigins` in the blockchain config. * 'auto' set to the default value in blockchain config for test and demo apps. test add config and contract and add test addFileToPipeline test and registerBeforeDeploy with new arg add more registers but generation one fails in run WIP commit Undo changes to test config. Merge pull request #381 from embark-framework/features/cors-auto Add 'auto' setting for geth CORS and websockets origin fix a bug where upload cmd used plugin name don't error if it's an empty dapp with no contracts yet Merge pull request #383 from embark-framework/no_contracts don't error if it's an empty dapp with no contracts yet remove duplicated entry force zepplein version for travis Merge pull request #384 from embark-framework/chores/test-allpligin-apis Small fixes for plugin APIs intercept logs in the app itself - stopgap fix Merge pull request #385 from embark-framework/console_logs_fix intercept logs in the app itself - stopgap fix * removed unneeded provider property. * add 'swarm' as a provider in the storage.config * update method for swarm service check Merge branch 'develop' into features/add-swarm-to-embarkjs More work to add swarm to embarkjs * added eth-lib to parse result of swarm text * changed "currentStorage" and "currentMessages" to "currentProvider" for consistency. * added protocol to storage config * selectively starts storage service depending on which one is configured in the storage config * run service check for ipfs/swarm prior to uploaded * added swarm methods for embarkjs Updated code based on code review check if testrpc is installed and warn if not Merge pull request #386 from embark-framework/bug_fix/test-rpc-not-installed check if testrpc is installed and warn if not Removed timeout Removed spacer Merge pull request #382 from embark-framework/react-demo Updating embark demo to use react instead of jquery fix on contract add Merge pull request #387 from embark-framework/bug_fix/new-contract-in-empty-dapp Fix adding a contract redeploy with right config on config change fix tests reset watchers after build to make sure files remain watch Merge pull request #389 from embark-framework/bug_fix/file-changes-not-watched Fix files not being watched Merge pull request #388 from embark-framework/bug_fix/changing-contract-config Redeploy with right config on config change Added swarm support in embarkjs and isAvailable for messages/storage * reverted currentProvider back to currentStorage and currentMessages * added `EmbarkJS.Storage.isAvailable` and `EmbarkJS.Messages.isAvailable()` and underlying provider functions for Whisper, Orbit, IPFS, and Swarm * Finished swarm implementation in embarkjs plus cleanup * updated test app storage config to swarm to show swarm config option Merge branch 'develop' into features/add-swarm-to-embarkjs
2018-04-30 05:56:43 +00:00
function checkStorageService(callback){
2018-05-28 15:51:38 +00:00
2018-05-24 15:52:16 +00:00
const errorObj = {message: __('Cannot upload: {{platform}} node is not running on {{protocol}}://{{host}}:{{port}}.', {platform: platform, protocol: engine.config.storageConfig.protocol, host: engine.config.storageConfig.host, port: engine.config.storageConfig.port})};
2018-05-28 15:51:38 +00:00
2018-05-24 15:52:16 +00:00
self._checkStorageEndpoint(engine, platform, function (err) {
2018-05-30 17:23:18 +00:00
if (!err) {
return callback();
}
self._startStorageNode(engine, platform, (err) => {
if (err) {
engine.logger.error(err);
return callback(errorObj);
}
// Check endpoint again to see if really did start
self._checkStorageEndpoint(engine, platform, (err) => {
if (err) {
2018-05-24 15:52:16 +00:00
return callback(errorObj);
2018-05-28 15:48:27 +00:00
}
2018-05-30 17:23:18 +00:00
callback();
2018-05-28 15:48:27 +00:00
});
2018-05-30 17:23:18 +00:00
});
2018-05-01 13:38:13 +00:00
});
if (!checkFn || typeof checkFn.fn !== 'function') {
return callback();
}
checkFn.fn(function (serviceCheckResult) {
if (!serviceCheckResult.status || serviceCheckResult.status === 'off') {
let config = engine.config.storageConfig.upload;
return callback({message: __('Cannot upload: {{platform}} node is not running on {{protocol}}://{{host}}:{{port}}.', {platform: platform, protocol: config.protocol, host: config.host, port: config.port})});
}
callback();
});
WIP to merge in other swarm changes Adding swarm to embarkjs. WIP. Add 'auto' setting for geth CORS and websockets origin * 'auto' now supported for `rpcCorsDomain` and `wsOrigins` in the blockchain config. * 'auto' set to the default value in blockchain config for test and demo apps. test add config and contract and add test addFileToPipeline test and registerBeforeDeploy with new arg add more registers but generation one fails in run WIP commit Undo changes to test config. Merge pull request #381 from embark-framework/features/cors-auto Add 'auto' setting for geth CORS and websockets origin fix a bug where upload cmd used plugin name don't error if it's an empty dapp with no contracts yet Merge pull request #383 from embark-framework/no_contracts don't error if it's an empty dapp with no contracts yet remove duplicated entry force zepplein version for travis Merge pull request #384 from embark-framework/chores/test-allpligin-apis Small fixes for plugin APIs intercept logs in the app itself - stopgap fix Merge pull request #385 from embark-framework/console_logs_fix intercept logs in the app itself - stopgap fix * removed unneeded provider property. * add 'swarm' as a provider in the storage.config * update method for swarm service check Merge branch 'develop' into features/add-swarm-to-embarkjs More work to add swarm to embarkjs * added eth-lib to parse result of swarm text * changed "currentStorage" and "currentMessages" to "currentProvider" for consistency. * added protocol to storage config * selectively starts storage service depending on which one is configured in the storage config * run service check for ipfs/swarm prior to uploaded * added swarm methods for embarkjs Updated code based on code review check if testrpc is installed and warn if not Merge pull request #386 from embark-framework/bug_fix/test-rpc-not-installed check if testrpc is installed and warn if not Removed timeout Removed spacer Merge pull request #382 from embark-framework/react-demo Updating embark demo to use react instead of jquery fix on contract add Merge pull request #387 from embark-framework/bug_fix/new-contract-in-empty-dapp Fix adding a contract redeploy with right config on config change fix tests reset watchers after build to make sure files remain watch Merge pull request #389 from embark-framework/bug_fix/file-changes-not-watched Fix files not being watched Merge pull request #388 from embark-framework/bug_fix/changing-contract-config Redeploy with right config on config change Added swarm support in embarkjs and isAvailable for messages/storage * reverted currentProvider back to currentStorage and currentMessages * added `EmbarkJS.Storage.isAvailable` and `EmbarkJS.Messages.isAvailable()` and underlying provider functions for Whisper, Orbit, IPFS, and Swarm * Finished swarm implementation in embarkjs plus cleanup * updated test app storage config to swarm to show swarm config option Merge branch 'develop' into features/add-swarm-to-embarkjs
2018-04-30 05:56:43 +00:00
},
function setupStoragePlugin(callback){
let pluginList = engine.plugins.listPlugins();
if (pluginList.length > 0) {
2018-05-08 21:49:46 +00:00
engine.logger.info(__("loaded plugins") + ": " + pluginList.join(", "));
}
2018-05-08 21:49:46 +00:00
// check use has input existing storage plugin
let cmdPlugins = engine.plugins.getPluginsFor('uploadCmds');
2018-05-08 21:49:46 +00:00
if (cmdPlugins.length > 0) {
cmdPlugin = cmdPlugins.find((pluginCmd) => {
return pluginCmd.uploadCmds.some(uploadCmd => {
return uploadCmd.cmd === platform;
});
});
}
if (!cmdPlugin) {
return callback({message: __('platform "{{platform}}" is specified as the upload provider, however no plugins have registered an upload command for "{{platform}}".', {platform: platform})});
}
2018-05-01 13:38:13 +00:00
callback();
},
function deploy(callback) {
engine.events.on('outputDone', function () {
cmdPlugin.uploadCmds[0].cb()
.then((success) => {
callback(null, success);
})
.catch(callback);
});
2018-05-22 19:46:58 +00:00
engine.events.request('deploy:contracts', function(err) {
2018-05-23 14:06:12 +00:00
engine.logger.info(__("finished deploying").underline);
if(err){
callback(err);
}
});
}
], function (err, _result) {
if (err) {
engine.logger.error(err.message);
engine.logger.debug(err.stack);
} else {
2018-05-08 21:49:46 +00:00
engine.logger.info((__("finished building DApp and deploying to") + " " + platform).underline);
}
// needed due to child processes
process.exit();
});
}
runTests(file) {
this.context = [constants.contexts.test];
let RunTests = require('./tests/run_tests.js');
RunTests.run(file);
}
2017-03-30 13:16:46 +00:00
}
2017-06-26 13:01:54 +00:00
// temporary until next refactor
Embark.initTests = function(options) {
let Test = require('./tests/test.js');
options.context = [constants.contexts.test];
2017-06-26 13:01:54 +00:00
return new Test(options);
2017-06-26 13:02:58 +00:00
};
2017-06-26 13:01:54 +00:00
2016-08-18 00:29:41 +00:00
module.exports = Embark;