@xec-sh/core
Version:
Universal shell execution engine
151 lines (150 loc) • 5.37 kB
TypeScript
import { BaseAdapter, BaseAdapterConfig } from './base-adapter.js';
import { Command } from '../core/command.js';
import { ExecutionResult } from '../core/result.js';
export interface DockerAutoCreateOptions {
enabled: boolean;
image: string;
autoRemove: boolean;
volumes?: string[];
}
export interface DockerDefaultExecOptions {
User?: string;
WorkingDir?: string;
Env?: string[];
Privileged?: boolean;
AttachStdin?: boolean;
AttachStdout?: boolean;
AttachStderr?: boolean;
Tty?: boolean;
}
export interface DockerImageBuildOptions {
tag: string;
dockerfile?: string;
context?: string;
buildArgs?: Record<string, string>;
target?: string;
noCache?: boolean;
pull?: boolean;
platform?: string;
}
export interface DockerComposeOptions {
file?: string | string[];
projectName?: string;
env?: Record<string, string>;
}
export interface DockerLogsOptions {
follow?: boolean;
tail?: number | 'all';
since?: string;
until?: string;
timestamps?: boolean;
}
export interface DockerNetworkOptions {
driver?: string;
subnet?: string;
gateway?: string;
ipRange?: string;
attachable?: boolean;
internal?: boolean;
}
export interface DockerVolumeOptions {
driver?: string;
driverOpts?: Record<string, string>;
labels?: Record<string, string>;
}
export interface DockerHealthCheckOptions {
test: string | string[];
interval?: string;
timeout?: string;
retries?: number;
startPeriod?: string;
}
export interface DockerAdapterConfig extends BaseAdapterConfig {
socketPath?: string;
host?: string;
port?: number;
version?: string;
defaultExecOptions?: DockerDefaultExecOptions;
autoCreate?: DockerAutoCreateOptions;
}
export declare class DockerAdapter extends BaseAdapter {
protected readonly adapterName = "docker";
private dockerConfig;
private tempContainers;
constructor(config?: DockerAdapterConfig);
private findDockerPath;
isAvailable(): Promise<boolean>;
execute(command: Command): Promise<ExecutionResult>;
private extractDockerOptions;
private validateContainerName;
private supportsTTY;
private getTTYSettings;
private containerExists;
private createTempContainer;
private determineRunMode;
private buildDockerExecArgs;
private buildDockerRunArgs;
protected executeDockerCommand(args: string[], command: Partial<Command>): Promise<{
stdout: string;
stderr: string;
exitCode: number;
signal: string | null;
}>;
protected createResult(stdout: string, stderr: string, exitCode: number, signal: string | undefined, command: string, startTime: number, endTime: number, context?: {
host?: string;
container?: string;
originalCommand?: Command;
}): Promise<ExecutionResult>;
dispose(): Promise<void>;
listContainers(all?: boolean): Promise<string[]>;
createContainer(options: {
name: string;
image: string;
volumes?: string[];
env?: Record<string, string>;
ports?: string[];
}): Promise<void>;
startContainer(container: string): Promise<void>;
runContainer(options: {
name: string;
image: string;
volumes?: string[];
env?: Record<string, string>;
ports?: string[];
network?: string;
restart?: string;
workdir?: string;
user?: string;
labels?: Record<string, string>;
privileged?: boolean;
healthcheck?: DockerHealthCheckOptions;
command?: string[];
}): Promise<void>;
stopContainer(container: string): Promise<void>;
removeContainer(container: string, force?: boolean): Promise<void>;
buildImage(options: DockerImageBuildOptions): Promise<void>;
pushImage(image: string): Promise<void>;
pullImage(image: string): Promise<void>;
tagImage(source: string, target: string): Promise<void>;
listImages(filter?: string): Promise<string[]>;
removeImage(image: string, force?: boolean): Promise<void>;
getLogs(container: string, options?: DockerLogsOptions): Promise<string>;
streamLogs(container: string, onData: (data: string) => void, options?: DockerLogsOptions): Promise<void>;
copyToContainer(src: string, container: string, dest: string): Promise<void>;
copyFromContainer(container: string, src: string, dest: string): Promise<void>;
inspectContainer(container: string): Promise<any>;
getStats(container: string): Promise<any>;
createNetwork(name: string, options?: DockerNetworkOptions): Promise<void>;
removeNetwork(name: string): Promise<void>;
listNetworks(): Promise<string[]>;
createVolume(name: string, options?: DockerVolumeOptions): Promise<void>;
removeVolume(name: string, force?: boolean): Promise<void>;
listVolumes(): Promise<string[]>;
composeUp(options?: DockerComposeOptions): Promise<void>;
composeDown(options?: DockerComposeOptions): Promise<void>;
composePs(options?: DockerComposeOptions): Promise<string>;
composeLogs(service?: string, options?: DockerComposeOptions): Promise<string>;
waitForHealthy(container: string, timeout?: number): Promise<void>;
execJson<T = any>(container: string, command: string[]): Promise<T>;
private buildComposeArgs;
}