alchemy 0.35.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/alchemy.mjs +45102 -45100
- package/bin/alchemy.ts +1 -1
- package/bin/create-alchemy.ts +10 -4
- package/lib/cloudflare/bundle/bundle-worker.js +1 -1
- package/lib/cloudflare/bundle/bundle-worker.js.map +1 -1
- package/lib/docker/api.d.ts +185 -0
- package/lib/docker/api.d.ts.map +1 -0
- package/lib/docker/api.js +288 -0
- package/lib/docker/api.js.map +1 -0
- package/lib/docker/container.d.ts +147 -0
- package/lib/docker/container.d.ts.map +1 -0
- package/lib/docker/container.js +109 -0
- package/lib/docker/container.js.map +1 -0
- package/lib/docker/image.d.ts +92 -0
- package/lib/docker/image.d.ts.map +1 -0
- package/lib/docker/image.js +92 -0
- package/lib/docker/image.js.map +1 -0
- package/lib/docker/index.d.ts +7 -0
- package/lib/docker/index.d.ts.map +1 -0
- package/lib/docker/index.js +7 -0
- package/lib/docker/index.js.map +1 -0
- package/lib/docker/network.d.ts +62 -0
- package/lib/docker/network.d.ts.map +1 -0
- package/lib/docker/network.js +49 -0
- package/lib/docker/network.js.map +1 -0
- package/lib/docker/remote-image.d.ts +45 -0
- package/lib/docker/remote-image.d.ts.map +1 -0
- package/lib/docker/remote-image.js +36 -0
- package/lib/docker/remote-image.js.map +1 -0
- package/lib/docker/volume.d.ts +83 -0
- package/lib/docker/volume.d.ts.map +1 -0
- package/lib/docker/volume.js +76 -0
- package/lib/docker/volume.js.map +1 -0
- package/lib/os/exec.d.ts +19 -1
- package/lib/os/exec.d.ts.map +1 -1
- package/lib/os/exec.js +28 -4
- package/lib/os/exec.js.map +1 -1
- package/lib/util/cli.d.ts.map +1 -1
- package/lib/util/cli.js +1 -1
- package/lib/util/cli.js.map +1 -1
- package/package.json +5 -1
- package/src/cloudflare/bundle/bundle-worker.ts +1 -1
- package/src/docker/api.ts +365 -0
- package/src/docker/container.ts +267 -0
- package/src/docker/image.ts +200 -0
- package/src/docker/index.ts +6 -0
- package/src/docker/network.ts +101 -0
- package/src/docker/remote-image.ts +83 -0
- package/src/docker/volume.ts +154 -0
- package/src/os/exec.ts +48 -6
- package/src/util/cli.ts +1 -3
package/bin/alchemy.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { parseArgs } from "node:util";
|
|
3
|
-
import { createAlchemy } from "./create-alchemy.ts";
|
|
4
3
|
import { bootstrapS3 } from "./bootstrap-s3.ts";
|
|
4
|
+
import { createAlchemy } from "./create-alchemy.ts";
|
|
5
5
|
|
|
6
6
|
// Parse command-line arguments. We allow unknown flags because different
|
|
7
7
|
// sub-commands may accept different sets.
|
package/bin/create-alchemy.ts
CHANGED
|
@@ -375,7 +375,8 @@ async function initAstroProject(
|
|
|
375
375
|
projectPath: string,
|
|
376
376
|
): Promise<void> {
|
|
377
377
|
create(
|
|
378
|
-
|
|
378
|
+
pm,
|
|
379
|
+
`astro@latest ${projectName} ${pm === "npm" ? "--" : ""} --no-git --no-deploy --install ${options.yes ? "--yes" : ""}`,
|
|
379
380
|
);
|
|
380
381
|
|
|
381
382
|
await initWebsiteProject(projectPath, {
|
|
@@ -432,7 +433,8 @@ async function initReactRouterProject(
|
|
|
432
433
|
projectPath: string,
|
|
433
434
|
): Promise<void> {
|
|
434
435
|
create(
|
|
435
|
-
|
|
436
|
+
pm,
|
|
437
|
+
`cloudflare@2.49.3 ${projectName} ${pm === "npm" ? "--" : ""} --framework=react-router --no-git --no-deploy ${options.yes ? "--yes" : ""}`,
|
|
436
438
|
);
|
|
437
439
|
|
|
438
440
|
await initWebsiteProject(projectPath, {
|
|
@@ -1164,7 +1166,7 @@ async function mkdir(...path: string[]): Promise<void> {
|
|
|
1164
1166
|
}
|
|
1165
1167
|
|
|
1166
1168
|
function execCommand(command: string, cwd: string = process.cwd()): void {
|
|
1167
|
-
console.log(command);
|
|
1169
|
+
console.log(command.replaceAll(/ +/g, " "));
|
|
1168
1170
|
try {
|
|
1169
1171
|
execSync(command, { stdio: "inherit", cwd });
|
|
1170
1172
|
} catch {
|
|
@@ -1206,7 +1208,11 @@ function npx(command: string, cwd: string = process.cwd()): void {
|
|
|
1206
1208
|
);
|
|
1207
1209
|
}
|
|
1208
1210
|
|
|
1209
|
-
function create(
|
|
1211
|
+
function create(
|
|
1212
|
+
pm: PackageManager,
|
|
1213
|
+
command: string,
|
|
1214
|
+
cwd: string = process.cwd(),
|
|
1215
|
+
): void {
|
|
1210
1216
|
execCommand(
|
|
1211
1217
|
`${getPackageManagerCommands(pm).create} ${options.yes ? "-y" : ""} ${command}`,
|
|
1212
1218
|
cwd,
|
|
@@ -31,7 +31,7 @@ export async function bundleWorkerScript(props) {
|
|
|
31
31
|
const files = Array.from(new Set((await Promise.all(rules.map((rule) => Array.fromAsync(fs.glob(rule, {
|
|
32
32
|
cwd: rootDir,
|
|
33
33
|
}))))).flat()));
|
|
34
|
-
const useColor = !
|
|
34
|
+
const useColor = !process.env.NO_COLOR;
|
|
35
35
|
logger.log(`${useColor ? kleur.gray("worker:") : "worker:"} ${useColor ? kleur.blue(props.name) : props.name}`);
|
|
36
36
|
logger.log(`${useColor ? kleur.gray("main:") : "main:"} ${useColor ? kleur.blue(main) : main}`);
|
|
37
37
|
logger.log(`${useColor ? kleur.gray("dist:") : "dist:"} ${useColor ? kleur.blue(path.relative(process.cwd(), rootDir)) : path.relative(process.cwd(), rootDir)}:`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-worker.js","sourceRoot":"","sources":["../../../src/cloudflare/bundle/bundle-worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAM9C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAKC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvD,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,kBAAkB,CACzB,CAAC;IAEF,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;IAE9B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,CACZ,KAAK,CAAC,KAAK,IAAI;YACb;gBACE,KAAK,EAAE;oBACL,SAAS;oBACT,UAAU;oBACV,WAAW;oBACX,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACnD;aACF;SACF,CACF,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACtB,IAAI,GAAG,CACL,CACE,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,KAAK,CAAC,SAAS,CACb,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,GAAG,EAAE,OAAO;SACb,CAAC,CACH,CACF,CACF,CACF,CAAC,IAAI,EAAE,CACT,CACF,CAAC;QACF,MAAM,QAAQ,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"bundle-worker.js","sourceRoot":"","sources":["../../../src/cloudflare/bundle/bundle-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for Docker API requests
|
|
3
|
+
*/
|
|
4
|
+
export interface DockerApiOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Custom path to Docker binary
|
|
7
|
+
*/
|
|
8
|
+
dockerPath?: string;
|
|
9
|
+
}
|
|
10
|
+
type VolumeInfo = {
|
|
11
|
+
CreatedAt: string;
|
|
12
|
+
Driver: string;
|
|
13
|
+
Labels: Record<string, string>;
|
|
14
|
+
Mountpoint: string;
|
|
15
|
+
Name: string;
|
|
16
|
+
Options: Record<string, string>;
|
|
17
|
+
Scope: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Docker API client that wraps Docker CLI commands
|
|
21
|
+
*/
|
|
22
|
+
export declare class DockerApi {
|
|
23
|
+
/** Path to Docker CLI */
|
|
24
|
+
readonly dockerPath: string;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new Docker API client
|
|
27
|
+
*
|
|
28
|
+
* @param options Docker API options
|
|
29
|
+
*/
|
|
30
|
+
constructor(options?: DockerApiOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Run a Docker CLI command
|
|
33
|
+
*
|
|
34
|
+
* @param args Command arguments to pass to Docker CLI
|
|
35
|
+
* @returns Result of the command
|
|
36
|
+
*/
|
|
37
|
+
exec(args: string[]): Promise<{
|
|
38
|
+
stdout: string;
|
|
39
|
+
stderr: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if Docker daemon is running
|
|
43
|
+
*
|
|
44
|
+
* @returns True if Docker daemon is running
|
|
45
|
+
*/
|
|
46
|
+
isRunning(): Promise<boolean>;
|
|
47
|
+
/**
|
|
48
|
+
* Pull Docker image
|
|
49
|
+
*
|
|
50
|
+
* @param image Image name and tag
|
|
51
|
+
* @returns Result of the pull command
|
|
52
|
+
*/
|
|
53
|
+
pullImage(image: string): Promise<{
|
|
54
|
+
stdout: string;
|
|
55
|
+
stderr: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Build Docker image
|
|
59
|
+
*
|
|
60
|
+
* @param path Path to Dockerfile directory
|
|
61
|
+
* @param tag Tag for the image
|
|
62
|
+
* @param buildArgs Build arguments
|
|
63
|
+
* @returns Result of the build command
|
|
64
|
+
*/
|
|
65
|
+
buildImage(path: string, tag: string, buildArgs?: Record<string, string>): Promise<{
|
|
66
|
+
stdout: string;
|
|
67
|
+
stderr: string;
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* List Docker images
|
|
71
|
+
*
|
|
72
|
+
* @returns JSON string containing image list
|
|
73
|
+
*/
|
|
74
|
+
listImages(): Promise<string>;
|
|
75
|
+
/**
|
|
76
|
+
* Create Docker container
|
|
77
|
+
*
|
|
78
|
+
* @param image Image name
|
|
79
|
+
* @param name Container name
|
|
80
|
+
* @param options Container options
|
|
81
|
+
* @returns Container ID
|
|
82
|
+
*/
|
|
83
|
+
createContainer(image: string, name: string, options?: {
|
|
84
|
+
ports?: Record<string, string>;
|
|
85
|
+
env?: Record<string, string>;
|
|
86
|
+
volumes?: Record<string, string>;
|
|
87
|
+
cmd?: string[];
|
|
88
|
+
}): Promise<string>;
|
|
89
|
+
/**
|
|
90
|
+
* Start Docker container
|
|
91
|
+
*
|
|
92
|
+
* @param containerId Container ID or name
|
|
93
|
+
*/
|
|
94
|
+
startContainer(containerId: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Stop Docker container
|
|
97
|
+
*
|
|
98
|
+
* @param containerId Container ID or name
|
|
99
|
+
*/
|
|
100
|
+
stopContainer(containerId: string): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Remove Docker container
|
|
103
|
+
*
|
|
104
|
+
* @param containerId Container ID or name
|
|
105
|
+
* @param force Force removal
|
|
106
|
+
*/
|
|
107
|
+
removeContainer(containerId: string, force?: boolean): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Get container logs
|
|
110
|
+
*
|
|
111
|
+
* @param containerId Container ID or name
|
|
112
|
+
* @returns Container logs
|
|
113
|
+
*/
|
|
114
|
+
getContainerLogs(containerId: string): Promise<string>;
|
|
115
|
+
/**
|
|
116
|
+
* Check if a container exists
|
|
117
|
+
*
|
|
118
|
+
* @param containerId Container ID or name
|
|
119
|
+
* @returns True if container exists
|
|
120
|
+
*/
|
|
121
|
+
containerExists(containerId: string): Promise<boolean>;
|
|
122
|
+
/**
|
|
123
|
+
* Create Docker network
|
|
124
|
+
*
|
|
125
|
+
* @param name Network name
|
|
126
|
+
* @param driver Network driver
|
|
127
|
+
* @returns Network ID
|
|
128
|
+
*/
|
|
129
|
+
createNetwork(name: string, driver?: string): Promise<string>;
|
|
130
|
+
/**
|
|
131
|
+
* Remove Docker network
|
|
132
|
+
*
|
|
133
|
+
* @param networkId Network ID or name
|
|
134
|
+
*/
|
|
135
|
+
removeNetwork(networkId: string): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Connect container to network
|
|
138
|
+
*
|
|
139
|
+
* @param containerId Container ID or name
|
|
140
|
+
* @param networkId Network ID or name
|
|
141
|
+
*/
|
|
142
|
+
connectNetwork(containerId: string, networkId: string, options?: {
|
|
143
|
+
aliases?: string[];
|
|
144
|
+
}): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Disconnect container from network
|
|
147
|
+
*
|
|
148
|
+
* @param containerId Container ID or name
|
|
149
|
+
* @param networkId Network ID or name
|
|
150
|
+
*/
|
|
151
|
+
disconnectNetwork(containerId: string, networkId: string): Promise<void>;
|
|
152
|
+
/**
|
|
153
|
+
* Create Docker volume
|
|
154
|
+
*
|
|
155
|
+
* @param name Volume name
|
|
156
|
+
* @param driver Volume driver
|
|
157
|
+
* @param driverOpts Driver options
|
|
158
|
+
* @param labels Volume labels
|
|
159
|
+
* @returns Volume name
|
|
160
|
+
*/
|
|
161
|
+
createVolume(name: string, driver?: string, driverOpts?: Record<string, string>, labels?: Record<string, string>): Promise<string>;
|
|
162
|
+
/**
|
|
163
|
+
* Remove Docker volume
|
|
164
|
+
*
|
|
165
|
+
* @param volumeName Volume name
|
|
166
|
+
* @param force Force removal of the volume
|
|
167
|
+
*/
|
|
168
|
+
removeVolume(volumeName: string, force?: boolean): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Get Docker volume information
|
|
171
|
+
*
|
|
172
|
+
* @param volumeName Volume name
|
|
173
|
+
* @returns Volume details in JSON format
|
|
174
|
+
*/
|
|
175
|
+
inspectVolume(volumeName: string): Promise<VolumeInfo[]>;
|
|
176
|
+
/**
|
|
177
|
+
* Check if a volume exists
|
|
178
|
+
*
|
|
179
|
+
* @param volumeName Volume name
|
|
180
|
+
* @returns True if volume exists
|
|
181
|
+
*/
|
|
182
|
+
volumeExists(volumeName: string): Promise<boolean>;
|
|
183
|
+
}
|
|
184
|
+
export {};
|
|
185
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/docker/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { exec } from "../os/exec.js";
|
|
2
|
+
/**
|
|
3
|
+
* Docker API client that wraps Docker CLI commands
|
|
4
|
+
*/
|
|
5
|
+
export class DockerApi {
|
|
6
|
+
/** Path to Docker CLI */
|
|
7
|
+
dockerPath;
|
|
8
|
+
/**
|
|
9
|
+
* Create a new Docker API client
|
|
10
|
+
*
|
|
11
|
+
* @param options Docker API options
|
|
12
|
+
*/
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
this.dockerPath = options.dockerPath || "docker";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run a Docker CLI command
|
|
18
|
+
*
|
|
19
|
+
* @param args Command arguments to pass to Docker CLI
|
|
20
|
+
* @returns Result of the command
|
|
21
|
+
*/
|
|
22
|
+
async exec(args) {
|
|
23
|
+
const command = `${this.dockerPath} ${args.join(" ")}`;
|
|
24
|
+
const result = (await exec(command, {
|
|
25
|
+
captureOutput: true,
|
|
26
|
+
shell: true,
|
|
27
|
+
env: process.env,
|
|
28
|
+
}));
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if Docker daemon is running
|
|
33
|
+
*
|
|
34
|
+
* @returns True if Docker daemon is running
|
|
35
|
+
*/
|
|
36
|
+
async isRunning() {
|
|
37
|
+
try {
|
|
38
|
+
// Use a quick, lightweight command to test if Docker is running
|
|
39
|
+
await this.exec(["version", "--format", "{{.Server.Version}}"]);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.log(`Docker daemon not running: ${error instanceof Error ? error.message : String(error)}`);
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Pull Docker image
|
|
49
|
+
*
|
|
50
|
+
* @param image Image name and tag
|
|
51
|
+
* @returns Result of the pull command
|
|
52
|
+
*/
|
|
53
|
+
async pullImage(image) {
|
|
54
|
+
return this.exec(["pull", image]);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Build Docker image
|
|
58
|
+
*
|
|
59
|
+
* @param path Path to Dockerfile directory
|
|
60
|
+
* @param tag Tag for the image
|
|
61
|
+
* @param buildArgs Build arguments
|
|
62
|
+
* @returns Result of the build command
|
|
63
|
+
*/
|
|
64
|
+
async buildImage(path, tag, buildArgs = {}) {
|
|
65
|
+
const args = ["build", "-t", tag, path];
|
|
66
|
+
for (const [key, value] of Object.entries(buildArgs)) {
|
|
67
|
+
args.push("--build-arg", `${key}=${value}`);
|
|
68
|
+
}
|
|
69
|
+
return this.exec(args);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* List Docker images
|
|
73
|
+
*
|
|
74
|
+
* @returns JSON string containing image list
|
|
75
|
+
*/
|
|
76
|
+
async listImages() {
|
|
77
|
+
const { stdout } = await this.exec(["images", "--format", "{{json .}}"]);
|
|
78
|
+
return stdout;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create Docker container
|
|
82
|
+
*
|
|
83
|
+
* @param image Image name
|
|
84
|
+
* @param name Container name
|
|
85
|
+
* @param options Container options
|
|
86
|
+
* @returns Container ID
|
|
87
|
+
*/
|
|
88
|
+
async createContainer(image, name, options = {}) {
|
|
89
|
+
const args = ["create", "--name", name];
|
|
90
|
+
// Add port mappings
|
|
91
|
+
if (options.ports) {
|
|
92
|
+
for (const [hostPort, containerPort] of Object.entries(options.ports)) {
|
|
93
|
+
args.push("-p", `${hostPort}:${containerPort}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Add environment variables
|
|
97
|
+
if (options.env) {
|
|
98
|
+
for (const [key, value] of Object.entries(options.env)) {
|
|
99
|
+
args.push("-e", `${key}=${value}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Add volume mappings
|
|
103
|
+
if (options.volumes) {
|
|
104
|
+
for (const [hostPath, containerPath] of Object.entries(options.volumes)) {
|
|
105
|
+
args.push("-v", `${hostPath}:${containerPath}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
args.push(image);
|
|
109
|
+
// Add command if specified
|
|
110
|
+
if (options.cmd && options.cmd.length > 0) {
|
|
111
|
+
args.push(...options.cmd);
|
|
112
|
+
}
|
|
113
|
+
const { stdout } = await this.exec(args);
|
|
114
|
+
return stdout.trim();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Start Docker container
|
|
118
|
+
*
|
|
119
|
+
* @param containerId Container ID or name
|
|
120
|
+
*/
|
|
121
|
+
async startContainer(containerId) {
|
|
122
|
+
await this.exec(["start", containerId]);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Stop Docker container
|
|
126
|
+
*
|
|
127
|
+
* @param containerId Container ID or name
|
|
128
|
+
*/
|
|
129
|
+
async stopContainer(containerId) {
|
|
130
|
+
await this.exec(["stop", containerId]);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Remove Docker container
|
|
134
|
+
*
|
|
135
|
+
* @param containerId Container ID or name
|
|
136
|
+
* @param force Force removal
|
|
137
|
+
*/
|
|
138
|
+
async removeContainer(containerId, force = false) {
|
|
139
|
+
const args = ["rm"];
|
|
140
|
+
if (force) {
|
|
141
|
+
args.push("-f");
|
|
142
|
+
}
|
|
143
|
+
args.push(containerId);
|
|
144
|
+
await this.exec(args);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get container logs
|
|
148
|
+
*
|
|
149
|
+
* @param containerId Container ID or name
|
|
150
|
+
* @returns Container logs
|
|
151
|
+
*/
|
|
152
|
+
async getContainerLogs(containerId) {
|
|
153
|
+
const { stdout } = await this.exec(["logs", containerId]);
|
|
154
|
+
return stdout;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if a container exists
|
|
158
|
+
*
|
|
159
|
+
* @param containerId Container ID or name
|
|
160
|
+
* @returns True if container exists
|
|
161
|
+
*/
|
|
162
|
+
async containerExists(containerId) {
|
|
163
|
+
try {
|
|
164
|
+
await this.exec(["inspect", containerId]);
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
catch (_error) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Create Docker network
|
|
173
|
+
*
|
|
174
|
+
* @param name Network name
|
|
175
|
+
* @param driver Network driver
|
|
176
|
+
* @returns Network ID
|
|
177
|
+
*/
|
|
178
|
+
async createNetwork(name, driver = "bridge") {
|
|
179
|
+
const { stdout } = await this.exec([
|
|
180
|
+
"network",
|
|
181
|
+
"create",
|
|
182
|
+
"--driver",
|
|
183
|
+
driver,
|
|
184
|
+
name,
|
|
185
|
+
]);
|
|
186
|
+
return stdout.trim();
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove Docker network
|
|
190
|
+
*
|
|
191
|
+
* @param networkId Network ID or name
|
|
192
|
+
*/
|
|
193
|
+
async removeNetwork(networkId) {
|
|
194
|
+
await this.exec(["network", "rm", networkId]);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Connect container to network
|
|
198
|
+
*
|
|
199
|
+
* @param containerId Container ID or name
|
|
200
|
+
* @param networkId Network ID or name
|
|
201
|
+
*/
|
|
202
|
+
async connectNetwork(containerId, networkId, options = {}) {
|
|
203
|
+
const args = ["network", "connect"];
|
|
204
|
+
if (options.aliases) {
|
|
205
|
+
for (const alias of options.aliases) {
|
|
206
|
+
args.push("--alias", alias);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
args.push(networkId, containerId);
|
|
210
|
+
await this.exec(args);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Disconnect container from network
|
|
214
|
+
*
|
|
215
|
+
* @param containerId Container ID or name
|
|
216
|
+
* @param networkId Network ID or name
|
|
217
|
+
*/
|
|
218
|
+
async disconnectNetwork(containerId, networkId) {
|
|
219
|
+
await this.exec(["network", "disconnect", networkId, containerId]);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Create Docker volume
|
|
223
|
+
*
|
|
224
|
+
* @param name Volume name
|
|
225
|
+
* @param driver Volume driver
|
|
226
|
+
* @param driverOpts Driver options
|
|
227
|
+
* @param labels Volume labels
|
|
228
|
+
* @returns Volume name
|
|
229
|
+
*/
|
|
230
|
+
async createVolume(name, driver = "local", driverOpts = {}, labels = {}) {
|
|
231
|
+
const args = ["volume", "create", "--name", name, "--driver", driver];
|
|
232
|
+
// Add driver options
|
|
233
|
+
for (const [key, value] of Object.entries(driverOpts)) {
|
|
234
|
+
args.push("--opt", `${key}=${value}`);
|
|
235
|
+
}
|
|
236
|
+
// Add labels
|
|
237
|
+
for (const [key, value] of Object.entries(labels)) {
|
|
238
|
+
args.push("--label", `${key}=${value}`);
|
|
239
|
+
}
|
|
240
|
+
const { stdout } = await this.exec(args);
|
|
241
|
+
return stdout.trim();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Remove Docker volume
|
|
245
|
+
*
|
|
246
|
+
* @param volumeName Volume name
|
|
247
|
+
* @param force Force removal of the volume
|
|
248
|
+
*/
|
|
249
|
+
async removeVolume(volumeName, force = false) {
|
|
250
|
+
const args = ["volume", "rm"];
|
|
251
|
+
if (force) {
|
|
252
|
+
args.push("--force");
|
|
253
|
+
}
|
|
254
|
+
args.push(volumeName);
|
|
255
|
+
await this.exec(args);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get Docker volume information
|
|
259
|
+
*
|
|
260
|
+
* @param volumeName Volume name
|
|
261
|
+
* @returns Volume details in JSON format
|
|
262
|
+
*/
|
|
263
|
+
async inspectVolume(volumeName) {
|
|
264
|
+
const { stdout } = await this.exec(["volume", "inspect", volumeName]);
|
|
265
|
+
try {
|
|
266
|
+
return JSON.parse(stdout.trim());
|
|
267
|
+
}
|
|
268
|
+
catch (_error) {
|
|
269
|
+
return [];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if a volume exists
|
|
274
|
+
*
|
|
275
|
+
* @param volumeName Volume name
|
|
276
|
+
* @returns True if volume exists
|
|
277
|
+
*/
|
|
278
|
+
async volumeExists(volumeName) {
|
|
279
|
+
try {
|
|
280
|
+
await this.inspectVolume(volumeName);
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
catch (_error) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/docker/api.ts"],"names":[],"mappings":"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"}
|