docker-compose/index.js
Alexander Zeitler cd9df6ca19 make it work with Node 6.x
Tests still require Node.js 8 for async/await
2017-08-24 16:48:16 +02:00

145 lines
2.7 KiB
JavaScript

'use strict';
const promisify = require('es6-promisify');
const exec = promisify(require('child_process').exec, { multiArgs: true });
const logger = require('./lib/log');
const logStandards = function (standards) {
const stdout = standards.stdout || standards[0];
if (stdout && stdout.length > 0) {
logger.info(stdout);
}
const stderr = standards.stderr || standards[1];
if (stderr) {
logger.warn(stderr);
}
};
/**
* @param {object} options
* @param {boolean} options.log
* @param {cwd} options.cwd
*/
const up = function (options) {
return new Promise((resolve, reject) => {
const cwd = options.cwd;
exec('docker-compose up -d', { cwd }).then(
standards => {
if (options.log) {
logStandards(standards);
}
return resolve();
},
err => {
logger.error(err.message);
return reject(err);
}
);
});
};
/**
* @param {object} options
* @param {boolean} options.log
* @param {cwd} options.cwd
*/
const down = function (options) {
return new Promise((resolve, reject) => {
const cwd = options.cwd;
exec('docker-compose down', { cwd }).then(
standards => {
if (options.log) {
logStandards(standards);
}
return resolve();
},
err => {
logger.error(err.message);
return reject(err);
}
);
});
};
/**
* @param {object} options
* @param {boolean} options.log
* @param {cwd} options.cwd
*/
const stop = function (options) {
return new Promise((resolve, reject) => {
const cwd = options.cwd;
exec('docker-compose stop', { cwd }).then(
standards => {
if (options.log) {
logStandards(standards);
}
return resolve();
},
err => {
logger.error(err.message);
return reject(err);
}
);
});
};
/**
* @param {object} options
* @param {boolean} options.log
* @param {cwd} options.cwd
*/
const kill = function (options) {
return new Promise((resolve, reject) => {
const cwd = options.cwd;
exec('docker-compose kill', { cwd }).then(
standards => {
if (options.log) {
logStandards(standards);
}
return resolve();
},
err => {
logger.error(err.message);
return reject(err);
}
);
});
};
/**
* @param {object} options
* @param {boolean} options.log
* @param {cwd} options.cwd
*/
const rm = function (options) {
const cwd = options.cwd;
exec('docker-compose rm', { cwd }).then(
standards => {
if (options.log) {
logStandards(standards);
}
},
err => {
logger.error(err.message);
}
);
};
module.exports = { up, kill, down, stop, rm };