mirror of
https://github.com/danbulant/docker-compose
synced 2026-06-24 01:11:48 +00:00
feat: passing callback to report progress (#191)
* feat: passing callback to report progress * fix: add typing * fix: change test purpose * fix: lint errors * fix: update docs Co-authored-by: yshechter <yshechter@ravtech.co.il>
This commit is contained in:
parent
dd4fe76eab
commit
f60e4d5a18
3 changed files with 29 additions and 0 deletions
|
|
@ -54,6 +54,7 @@ All commands return a `Promise({object})` with stdout and stderr strings and an
|
||||||
exitCode: 0, // !== 0 in case of an error
|
exitCode: 0, // !== 0 in case of an error
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Although the return type is a `Promise`, it is still possible to get the process progres before the `Promise` resolves, by passing a callback function to the optional `callback` parameter.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
|
|
@ -66,6 +67,19 @@ compose.upAll({ cwd: path.join(__dirname), log: true })
|
||||||
err => { console.log('something went wrong:', err.message)}
|
err => { console.log('something went wrong:', err.message)}
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
To get process progres
|
||||||
|
```typescript
|
||||||
|
compose.upAll({
|
||||||
|
cwd: path.join(__dirname),
|
||||||
|
callback: (chunk: Buffer) => {
|
||||||
|
console.log('job in progres: ', chunk.ToString())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(
|
||||||
|
() => { console.log('job done')},
|
||||||
|
err => { console.log('something went wrong:', err.message)}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
To execute command inside a running container
|
To execute command inside a running container
|
||||||
```javascript
|
```javascript
|
||||||
|
|
@ -82,6 +96,7 @@ compose.exec('node', 'npm install', { cwd: path.join(__dirname) })
|
||||||
* `configAsString {string}`: configuration can be provided as is, instead of relying on a file. In case `configAsString` is provided `config` will be ignored.
|
* `configAsString {string}`: configuration can be provided as is, instead of relying on a file. In case `configAsString` is provided `config` will be ignored.
|
||||||
* `[log] {boolean}`: optional setting to enable console logging (output of `docker-compose` `stdout`/`stderr` output)
|
* `[log] {boolean}`: optional setting to enable console logging (output of `docker-compose` `stdout`/`stderr` output)
|
||||||
* `[composeOptions] string[]|Array<string|string[]`: pass optional compose options like `"--verbose"` or `[["--verbose"], ["--log-level", "DEBUG"]]` or `["--verbose", ["--loglevel", "DEBUG"]]` for *all* commands.
|
* `[composeOptions] string[]|Array<string|string[]`: pass optional compose options like `"--verbose"` or `[["--verbose"], ["--log-level", "DEBUG"]]` or `["--verbose", ["--loglevel", "DEBUG"]]` for *all* commands.
|
||||||
|
* `[callback] (chunk: Buffer, sourceStream?: 'stdout' | 'stderr') => void`: optional callback function, that provides infromation about the process while it is still runing.
|
||||||
* `[commandOptions] string[]|Array<string|string[]`: pass optional command options like `"--build"` or `[["--build"], ["--timeout", "5"]]` or `["--build", ["--timeout", "5"]]` for the `up` command. Viable `commandOptions` depend on the command (`up`, `down` etc.) itself
|
* `[commandOptions] string[]|Array<string|string[]`: pass optional command options like `"--build"` or `[["--build"], ["--timeout", "5"]]` or `["--build", ["--timeout", "5"]]` for the `up` command. Viable `commandOptions` depend on the command (`up`, `down` etc.) itself
|
||||||
|
|
||||||
## Running the tests
|
## Running the tests
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ export interface IDockerComposeOptions {
|
||||||
composeOptions?: string[] | (string | string[])[]
|
composeOptions?: string[] | (string | string[])[]
|
||||||
commandOptions?: string[] | (string | string[])[]
|
commandOptions?: string[] | (string | string[])[]
|
||||||
env?: NodeJS.ProcessEnv
|
env?: NodeJS.ProcessEnv
|
||||||
|
callback?: (chunk: Buffer, streamSource?: 'stdout' | 'stderr') => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export type DockerComposePortResult = {
|
export type DockerComposePortResult = {
|
||||||
|
|
@ -181,10 +182,12 @@ export const execCompose = (
|
||||||
|
|
||||||
childProc.stdout.on('data', (chunk): void => {
|
childProc.stdout.on('data', (chunk): void => {
|
||||||
result.out += chunk.toString()
|
result.out += chunk.toString()
|
||||||
|
options.callback?.(chunk, 'stdout')
|
||||||
})
|
})
|
||||||
|
|
||||||
childProc.stderr.on('data', (chunk): void => {
|
childProc.stderr.on('data', (chunk): void => {
|
||||||
result.err += chunk.toString()
|
result.err += chunk.toString()
|
||||||
|
options.callback?.(chunk, 'stderr')
|
||||||
})
|
})
|
||||||
|
|
||||||
childProc.on('exit', (exitCode): void => {
|
childProc.on('exit', (exitCode): void => {
|
||||||
|
|
|
||||||
|
|
@ -723,3 +723,14 @@ test('parse ps output', () => {
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('ensure progress callback is called', async (): Promise<void> => {
|
||||||
|
const config = {
|
||||||
|
cwd: path.join(__dirname),
|
||||||
|
config: './docker-compose.yml',
|
||||||
|
callback: jest.fn()
|
||||||
|
}
|
||||||
|
await compose.upAll(config)
|
||||||
|
expect(config.callback).toBeCalled()
|
||||||
|
await compose.down(config)
|
||||||
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue