compose-action/src/services/docker-compose.service.ts
Emilien Escalle cf721e686a feat: support compose version
Signed-off-by: Emilien Escalle <emilien.escalle@escemi.com>
2024-10-23 17:29:26 +02:00

75 lines
1.7 KiB
TypeScript

import {
down,
IDockerComposeLogOptions,
IDockerComposeOptions,
logs,
upAll,
upMany,
} from "docker-compose";
import { Inputs } from "./input.service";
type OptionsInputs = {
composeFiles: Inputs["composeFiles"];
composeFlags: Inputs["composeFlags"];
cwd: Inputs["cwd"];
};
export type UpInputs = OptionsInputs & { upFlags: Inputs["upFlags"]; services: Inputs["services"] };
export type DownInputs = OptionsInputs & { downFlags: Inputs["downFlags"] };
export type LogsInputs = OptionsInputs & { services: Inputs["services"] };
export class DockerComposeService {
async up({ upFlags, services, ...optionsInputs }: UpInputs): Promise<void> {
const options: IDockerComposeOptions = {
...this.getCommonOptions(optionsInputs),
commandOptions: upFlags,
};
if (services.length > 0) {
await upMany(services, options);
return;
}
await upAll(options);
}
async down({ downFlags, ...optionsInputs }: DownInputs): Promise<void> {
const options: IDockerComposeOptions = {
...this.getCommonOptions(optionsInputs),
commandOptions: downFlags,
};
await down(options);
}
async logs({ services, ...optionsInputs }: LogsInputs): Promise<{
error: string;
output: string;
}> {
const options: IDockerComposeLogOptions = {
...this.getCommonOptions(optionsInputs),
follow: false,
};
const { err, out } = await logs(services, options);
return {
error: err,
output: out,
};
}
private getCommonOptions({
composeFiles,
composeFlags,
cwd,
}: OptionsInputs): IDockerComposeOptions {
return {
config: composeFiles,
log: true,
composeOptions: composeFlags,
cwd: cwd,
};
}
}