From 2b117d216e4d50be411d8994dfd64509b72ec543 Mon Sep 17 00:00:00 2001 From: Alexander Zeitler Date: Sun, 3 Feb 2019 20:15:17 +0100 Subject: [PATCH] implement logs command including support for --follow flag --- index.d.ts | 5 +++++ index.js | 21 ++++++++++++++++++++- readme.md | 1 + test/index.js | 8 ++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 8f59fbe..2f5950a 100644 --- a/index.d.ts +++ b/index.d.ts @@ -11,6 +11,7 @@ declare module "docker-compose" { restartOne(service:String, options: IDockerComposeOptions): Promise; rm(options: IDockerComposeOptions): Promise; exec(container:String, command:String, options: IDockerComposeOptions): Promise; + logs(container:String, command:String, options: IDockerComposeLogOptions): Promise; run(service:String, command:String, options: IDockerComposeOptions): Promise; buildAll(options: IDockerComposeOptions): Promise; buildMany(services:String[], options: IDockerComposeOptions): Promise; @@ -24,6 +25,10 @@ declare module "docker-compose" { log?: boolean; } + interface IDockerComposeLogOptions extends IDockerComposeOptions{ + follow: boolean; + } + interface IDockerComposeResult { out: string; err: string; diff --git a/index.js b/index.js index 2c966fe..bd567f8 100644 --- a/index.js +++ b/index.js @@ -268,4 +268,23 @@ const restartOne = function (service, options) { return restartMany([ service ], options); }; -module.exports = { upAll, upMany, upOne, kill, down, stop, rm, exec, restartAll, restartMany, restartOne, run, buildAll, buildMany, buildOne, ps }; +/** + * @param {string} service + * @param {object} options + * @param {string} options.cwd + * @param {boolean} [options.log] + * @param {boolean} [options.follow] + * @param {?(string|string[])} [options.config] + * @param {?object} [options.env] + */ +const logs = function (service, options) { + let args = [ service ]; + + if (options.follow) { + args = [ '--follow', ...args ]; + } + + return execCompose('logs', args, options); +}; + +module.exports = { upAll, upMany, upOne, kill, down, stop, rm, exec, logs, restartAll, restartMany, restartOne, run, buildAll, buildMany, buildOne, ps }; diff --git a/readme.md b/readme.md index 11d1f8e..64dfe8c 100644 --- a/readme.md +++ b/readme.md @@ -20,6 +20,7 @@ npm install --save-dev docker-compose * `stop(options)` - Stop running containers without removing them * `rm(options)` - Remove stopped service containers - always uses the `-f` flag due to non interactive mode * `exec(container, command, options)` - Exec `command` inside `container`, uses `-T` to properly handle stdin & stdout +* `logs(container, command, options)` - Show logs of service. Use `options.follow` `true|false` to turn on `--follow` flag. * `run(service, command, options)` - Run a one-off `command` on a service, uses `-T` to properly handle stdin & stdout * `buildAll(options)` - Build or rebuild services * `buildMany(services, options)` - Build or rebuild services diff --git a/test/index.js b/test/index.js index b40fcec..41c4e26 100644 --- a/test/index.js +++ b/test/index.js @@ -269,3 +269,11 @@ test('restartOne does restart container', async assert => { assert.true(await isContainerRunning('/compose_test_mongodb')); assert.end(); }); + +test('logs does follow service logs', async assert => { + await compose.upAll({ cwd: path.join(__dirname), log: true }); + await compose.logs('db', { cwd: path.join(__dirname), log: true }); + + assert.true(await isContainerRunning('/compose_test_mongodb')); + assert.end(); +});