start.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const colors = require('colors');
  2. const docker = require('docker-compose');
  3. const path = require('path');
  4. const ProjectEnvironment = require('../classes/ProjectEnvironment');
  5. const log = require('../inc/log');
  6. const runServiceStart = (service, projectEnv) => {
  7. const env = projectEnv.getEnv();
  8. const scripts = [
  9. 'start.before',
  10. `start.before.${env}`,
  11. 'start',
  12. `start.${env}`,
  13. 'start.after',
  14. `start.after.${env}`,
  15. ];
  16. let chain = Promise.resolve();
  17. scripts.forEach(script => {
  18. chain = chain.then(() => {
  19. return new Promise(resolve => {
  20. try {
  21. const start = require(path.join(projectEnv.getCwd(), service, script));
  22. log.log(`\nExecuting %s script for %s...`, colors.bold(script), colors.bold(service));
  23. Promise
  24. .all([start({
  25. exec: (command, options) => {
  26. const opts = { ...projectEnv.getDockerOptions(), ...options };
  27. return docker.exec(service, command, opts);
  28. },
  29. log: (message) => {
  30. log.log('%s - %s', colors.bold(service), message);
  31. },
  32. env: projectEnv.getEnv()
  33. })])
  34. .then(() => {
  35. resolve();
  36. })
  37. .catch(() => {});
  38. } catch (ex) {
  39. resolve();
  40. }
  41. });
  42. });
  43. });
  44. return chain.then(() => {});
  45. };
  46. const runServices = async (projectEnv) => {
  47. let promises = [];
  48. console.log(projectEnv.getDockerOptions());
  49. await docker.buildAll(projectEnv.getDockerOptions())
  50. .then(() => {
  51. console.log("OK");
  52. })
  53. .catch((err) => {
  54. console.log(err);
  55. });
  56. console.log(projectEnv.getDockerOptions());
  57. await docker.upAll(projectEnv.getDockerOptions());
  58. const services = await projectEnv.getServices();
  59. console.log(services);
  60. services.forEach(service => {
  61. promises.push(runServiceStart(service, projectEnv));
  62. });
  63. await Promise.all(promises);
  64. };
  65. module.exports = (env) => {
  66. try {
  67. const projectEnv = new ProjectEnvironment(process.cwd(), env);
  68. log.log("Starting project (%s environment)...", colors.bold(env));
  69. // Docker up services
  70. runServices(projectEnv);
  71. } catch (ex) {
  72. console.log(ex);
  73. log.error(JSON.stringify(ex));
  74. }
  75. };