start.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. console.log(projectEnv);
  48. let promises = [];
  49. console.log(projectEnv.getDockerOptions());
  50. await docker.buildAll(projectEnv.getDockerOptions());
  51. console.log(projectEnv.getDockerOptions());
  52. await docker.upAll(projectEnv.getDockerOptions());
  53. const services = await projectEnv.getServices();
  54. console.log(services);
  55. services.forEach(service => {
  56. promises.push(runServiceStart(service, projectEnv));
  57. });
  58. await Promise.all(promises);
  59. };
  60. module.exports = (env) => {
  61. try {
  62. const projectEnv = new ProjectEnvironment(process.cwd(), env);
  63. log.log("Starting project (%s environment)...", colors.bold(env));
  64. // Docker up services
  65. runServices(projectEnv);
  66. } catch (ex) {
  67. console.log(ex);
  68. log.error(JSON.stringify(ex));
  69. }
  70. };