mirror of
https://github.com/danbulant/docker-compose
synced 2026-05-27 22:11:55 +00:00
feat: allow to pass docker compose configuration as string
This commit is contained in:
parent
4983b2b8dd
commit
e8c14d318c
2 changed files with 33 additions and 3 deletions
13
src/index.ts
13
src/index.ts
|
|
@ -1,8 +1,9 @@
|
||||||
import childProcess from 'child_process';
|
import childProcess from 'child_process';
|
||||||
|
import { Readable } from 'stream'
|
||||||
export interface IDockerComposeOptions {
|
export interface IDockerComposeOptions {
|
||||||
cwd?: string;
|
cwd?: string;
|
||||||
config?: string | string[];
|
config?: string | string[];
|
||||||
|
configAsString?: string;
|
||||||
log?: boolean;
|
log?: boolean;
|
||||||
composeOptions?: string[] | (string | string[])[];
|
composeOptions?: string[] | (string | string[])[];
|
||||||
commandOptions?: string[] | (string | string[])[];
|
commandOptions?: string[] | (string | string[])[];
|
||||||
|
|
@ -67,8 +68,11 @@ const execCompose = (command, args, options: IDockerComposeOptions = {}): Promis
|
||||||
const composeOptions = options.composeOptions || [];
|
const composeOptions = options.composeOptions || [];
|
||||||
const commandOptions = options.commandOptions || [];
|
const commandOptions = options.commandOptions || [];
|
||||||
let composeArgs = composeOptionsToArgs(composeOptions);
|
let composeArgs = composeOptionsToArgs(composeOptions);
|
||||||
|
const isConfigProvidedAsString = !!options.configAsString;
|
||||||
|
|
||||||
composeArgs = composeArgs.concat(configToArgs(options.config).concat([ command ].concat(composeOptionsToArgs(commandOptions), args)));
|
const configArgs = isConfigProvidedAsString ? [ '-f', '-' ] : configToArgs(options.config);
|
||||||
|
|
||||||
|
composeArgs = composeArgs.concat(configArgs.concat([ command ].concat(composeOptionsToArgs(commandOptions), args)));
|
||||||
|
|
||||||
const cwd = options.cwd;
|
const cwd = options.cwd;
|
||||||
const env = options.env || undefined;
|
const env = options.env || undefined;
|
||||||
|
|
@ -102,6 +106,11 @@ const execCompose = (command, args, options: IDockerComposeOptions = {}): Promis
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (isConfigProvidedAsString) {
|
||||||
|
childProc.stdin.write(options.configAsString);
|
||||||
|
childProc.stdin.end();
|
||||||
|
}
|
||||||
|
|
||||||
if (options.log) {
|
if (options.log) {
|
||||||
childProc.stdout.pipe(process.stdout);
|
childProc.stdout.pipe(process.stdout);
|
||||||
childProc.stderr.pipe(process.stderr);
|
childProc.stderr.pipe(process.stderr);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import Docker from 'dockerode';
|
import Docker from 'dockerode';
|
||||||
import * as compose from '../src/index';
|
import * as compose from '../src/index';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
import { readFile } from 'fs'
|
||||||
const docker = new Docker();
|
const docker = new Docker();
|
||||||
|
|
||||||
// Docker commands, especially builds, can take some time. This makes sure that they can take the time they need.
|
// Docker commands, especially builds, can take some time. This makes sure that they can take the time they need.
|
||||||
|
|
@ -302,6 +302,27 @@ test('ensure run and exec with command defined as array are working', async ():
|
||||||
await compose.down({ cwd: path.join(__dirname), log: logOutput });
|
await compose.down({ cwd: path.join(__dirname), log: logOutput });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('build accepts config as string', async (): Promise<void> => {
|
||||||
|
const configuration = await new Promise(function (resolve, reject) {
|
||||||
|
readFile(path.join(__dirname, 'docker-compose-2.yml'), function (err, content) {
|
||||||
|
if (err) {
|
||||||
|
return reject(err);
|
||||||
|
}
|
||||||
|
return resolve(content.toString());
|
||||||
|
})
|
||||||
|
});
|
||||||
|
const config = {
|
||||||
|
configAsString: <string> configuration,
|
||||||
|
log: logOutput
|
||||||
|
};
|
||||||
|
|
||||||
|
await compose.upAll(config);
|
||||||
|
const port = await compose.port('db', 5432, config);
|
||||||
|
|
||||||
|
expect(port.out).toMatch(/.*:[0-9]{1,5}/);
|
||||||
|
await compose.down(config);
|
||||||
|
});
|
||||||
|
|
||||||
test('build single service', async (): Promise<void> => {
|
test('build single service', async (): Promise<void> => {
|
||||||
const opts = {
|
const opts = {
|
||||||
cwd: path.join(__dirname),
|
cwd: path.join(__dirname),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue