@livestore/utils-dev 0.0.0-snapshot-0fb8ecdef5037e1d17fd803af2aa68d65017002a → 0.0.0-snapshot-85438261e6388b2d7ee76c512346cf96c2a5167c
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/dist/.tsbuildinfo.json +1 -1
- package/dist/node/DockerComposeService/DockerComposeService.d.ts +11 -1
- package/dist/node/DockerComposeService/DockerComposeService.d.ts.map +1 -1
- package/dist/node/DockerComposeService/DockerComposeService.js +27 -10
- package/dist/node/DockerComposeService/DockerComposeService.js.map +1 -1
- package/package.json +2 -2
- package/src/node/DockerComposeService/DockerComposeService.ts +50 -10
|
@@ -3,7 +3,7 @@ declare const DockerComposeError_base: Schema.TaggedErrorClass<DockerComposeErro
|
|
|
3
3
|
readonly _tag: Schema.tag<"DockerComposeError">;
|
|
4
4
|
} & {
|
|
5
5
|
cause: typeof Schema.Defect;
|
|
6
|
-
|
|
6
|
+
note: typeof Schema.String;
|
|
7
7
|
}>;
|
|
8
8
|
export declare class DockerComposeError extends DockerComposeError_base {
|
|
9
9
|
}
|
|
@@ -29,6 +29,11 @@ export interface DockerComposeOperations {
|
|
|
29
29
|
readonly pull: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
30
30
|
readonly start: (options?: StartOptions) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError, Scope.Scope>;
|
|
31
31
|
readonly stop: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
32
|
+
readonly down: (options?: {
|
|
33
|
+
readonly env?: Record<string, string>;
|
|
34
|
+
readonly volumes?: boolean;
|
|
35
|
+
readonly removeOrphans?: boolean;
|
|
36
|
+
}) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>;
|
|
32
37
|
readonly logs: (options?: LogsOptions) => Stream.Stream<string, DockerComposeError | PlatformError.PlatformError, Scope.Scope>;
|
|
33
38
|
}
|
|
34
39
|
declare const DockerComposeService_base: Effect.Service.Class<DockerComposeService, "DockerComposeService", {
|
|
@@ -36,6 +41,11 @@ declare const DockerComposeService_base: Effect.Service.Class<DockerComposeServi
|
|
|
36
41
|
pull: Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
37
42
|
start: (options?: StartOptions) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, Scope.Scope>;
|
|
38
43
|
stop: Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
44
|
+
down: (options?: {
|
|
45
|
+
readonly env?: Record<string, string>;
|
|
46
|
+
readonly volumes?: boolean;
|
|
47
|
+
readonly removeOrphans?: boolean;
|
|
48
|
+
}) => Effect.Effect<void, PlatformError.PlatformError | DockerComposeError, never>;
|
|
39
49
|
logs: (options?: LogsOptions) => Stream.Stream<string, DockerComposeError, never>;
|
|
40
50
|
}, never, CommandExecutor.CommandExecutor>;
|
|
41
51
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerComposeService.d.ts","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACpB,QAAQ,EACR,MAAM,EACN,KAAK,aAAa,EAElB,MAAM,EACN,KAAK,KAAK,EACV,MAAM,EACP,MAAM,yBAAyB,CAAA;;;;;;;AAEhC,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;AAEL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;KACtC,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,CAAC,EAAE,YAAY,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,CAAC,EAAE,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CAC1F;;4BAGgB,iBAAiB;;0BA4BJ,YAAY;;
|
|
1
|
+
{"version":3,"file":"DockerComposeService.d.ts","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACpB,QAAQ,EACR,MAAM,EACN,KAAK,aAAa,EAElB,MAAM,EACN,KAAK,KAAK,EACV,MAAM,EACP,MAAM,yBAAyB,CAAA;;;;;;;AAEhC,qBAAa,kBAAmB,SAAQ,uBAGtC;CAAG;AAEL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;QACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;KACtC,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,CAAC,EAAE,YAAY,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACvF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IACpF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;QAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KACjC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA;IAC3E,QAAQ,CAAC,IAAI,EAAE,CACb,OAAO,CAAC,EAAE,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CAC1F;;4BAGgB,iBAAiB;;0BA4BJ,YAAY;;yBAgHZ;YACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;YAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SACjC;yBAzCsB,WAAW;;;AAxGxC,qBAAa,oBAAqB,SAAQ,yBAgLxC;CAAG;AAyCL,eAAO,MAAM,gCAAgC,GAC3C,MAAM,iBAAiB,GAAG;IACxB,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;CAC1C,KACA,MAAM,CAAC,MAAM,CACd,IAAI,EACJ,kBAAkB,GAAG,aAAa,CAAC,aAAa,EAChD,oBAAoB,GAAG,eAAe,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,CAYlE,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { omitUndefineds } from '@livestore/utils';
|
|
|
2
2
|
import { Command, Duration, Effect, Schedule, Schema, Stream, } from '@livestore/utils/effect';
|
|
3
3
|
export class DockerComposeError extends Schema.TaggedError()('DockerComposeError', {
|
|
4
4
|
cause: Schema.Defect,
|
|
5
|
-
|
|
5
|
+
note: Schema.String,
|
|
6
6
|
}) {
|
|
7
7
|
}
|
|
8
8
|
export class DockerComposeService extends Effect.Service()('DockerComposeService', {
|
|
@@ -15,7 +15,7 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
15
15
|
? Effect.void
|
|
16
16
|
: Effect.fail(new DockerComposeError({
|
|
17
17
|
cause: new Error(`Docker compose pull failed with exit code ${exitCode}`),
|
|
18
|
-
|
|
18
|
+
note: `Docker compose pull failed with exit code ${exitCode}`,
|
|
19
19
|
}))), Effect.provide(commandExecutorContext));
|
|
20
20
|
yield* Effect.log(`Successfully pulled Docker Compose images`);
|
|
21
21
|
}).pipe(Effect.withSpan('pullDockerComposeImages'));
|
|
@@ -27,16 +27,16 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
27
27
|
baseArgs.push('-d');
|
|
28
28
|
if (serviceName)
|
|
29
29
|
baseArgs.push(serviceName);
|
|
30
|
-
const command = yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options.env ?? {}), Command.start, Effect.catchAll((cause) => Effect.fail(new DockerComposeError({
|
|
30
|
+
const command = yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options.env ?? {}), Command.stderr('inherit'), Command.stdout('inherit'), Command.start, Effect.catchAll((cause) => Effect.fail(new DockerComposeError({
|
|
31
31
|
cause,
|
|
32
|
-
|
|
32
|
+
note: `Failed to start Docker Compose services in ${cwd}`,
|
|
33
33
|
}))), Effect.provide(commandExecutorContext));
|
|
34
34
|
// Wait for command completion
|
|
35
35
|
yield* command.exitCode.pipe(Effect.flatMap((exitCode) => exitCode === 0
|
|
36
36
|
? Effect.void
|
|
37
37
|
: Effect.fail(new DockerComposeError({
|
|
38
38
|
cause: new Error(`Docker compose exited with code ${exitCode}`),
|
|
39
|
-
|
|
39
|
+
note: `Docker Compose failed to start with exit code ${exitCode}. Env: ${JSON.stringify(options.env)}`,
|
|
40
40
|
}))), Effect.provide(commandExecutorContext));
|
|
41
41
|
// Perform health check if requested
|
|
42
42
|
if (healthCheck) {
|
|
@@ -53,7 +53,7 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
53
53
|
? Effect.void
|
|
54
54
|
: Effect.fail(new DockerComposeError({
|
|
55
55
|
cause: new Error(`Docker compose stop exited with code ${exitCode}`),
|
|
56
|
-
|
|
56
|
+
note: `Failed to stop Docker Compose services`,
|
|
57
57
|
}))), Effect.provide(commandExecutorContext));
|
|
58
58
|
yield* Effect.log(`Docker Compose services stopped successfully`);
|
|
59
59
|
}).pipe(Effect.withSpan('stopDockerCompose'));
|
|
@@ -70,14 +70,31 @@ export class DockerComposeService extends Effect.Service()('DockerComposeService
|
|
|
70
70
|
baseArgs.push(serviceName);
|
|
71
71
|
const command = yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.start, Effect.catchAll((cause) => Effect.fail(new DockerComposeError({
|
|
72
72
|
cause,
|
|
73
|
-
|
|
73
|
+
note: `Failed to read Docker Compose logs in ${cwd}`,
|
|
74
74
|
}))), Effect.provide(commandExecutorContext));
|
|
75
75
|
return command.stdout.pipe(Stream.decodeText('utf8'), Stream.splitLines, Stream.mapError((cause) => new DockerComposeError({
|
|
76
76
|
cause,
|
|
77
|
-
|
|
77
|
+
note: `Error reading Docker Compose logs in ${cwd}`,
|
|
78
78
|
})));
|
|
79
79
|
}).pipe(Stream.unwrapScoped);
|
|
80
|
-
|
|
80
|
+
const down = (options) => Effect.gen(function* () {
|
|
81
|
+
yield* Effect.log(`Tearing down Docker Compose services in ${cwd}`);
|
|
82
|
+
const baseArgs = ['docker', 'compose', 'down'];
|
|
83
|
+
if (options?.volumes)
|
|
84
|
+
baseArgs.push('-v');
|
|
85
|
+
if (options?.removeOrphans)
|
|
86
|
+
baseArgs.push('--remove-orphans');
|
|
87
|
+
if (serviceName)
|
|
88
|
+
baseArgs.push(serviceName);
|
|
89
|
+
yield* Command.make(baseArgs[0], ...baseArgs.slice(1)).pipe(Command.workingDirectory(cwd), Command.env(options?.env ?? {}), Command.exitCode, Effect.flatMap((exitCode) => exitCode === 0
|
|
90
|
+
? Effect.void
|
|
91
|
+
: Effect.fail(new DockerComposeError({
|
|
92
|
+
cause: new Error(`Docker compose down exited with code ${exitCode}`),
|
|
93
|
+
note: `Failed to tear down Docker Compose services`,
|
|
94
|
+
}))), Effect.provide(commandExecutorContext));
|
|
95
|
+
yield* Effect.log(`Docker Compose services torn down successfully`);
|
|
96
|
+
}).pipe(Effect.withSpan('downDockerCompose'));
|
|
97
|
+
return { pull, start, stop, down, logs };
|
|
81
98
|
}),
|
|
82
99
|
}) {
|
|
83
100
|
}
|
|
@@ -89,7 +106,7 @@ const performHealthCheck = ({ url, timeout = Duration.minutes(2), interval = Dur
|
|
|
89
106
|
schedule: Schedule.fixed(interval),
|
|
90
107
|
}), Effect.timeout(timeout), Effect.catchAll(() => Effect.fail(new DockerComposeError({
|
|
91
108
|
cause: new Error('Health check timeout'),
|
|
92
|
-
|
|
109
|
+
note: `Health check failed for ${url} after ${Duration.toMillis(timeout)}ms`,
|
|
93
110
|
}))));
|
|
94
111
|
yield* healthCheck;
|
|
95
112
|
yield* Effect.log(`Health check passed for ${url}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockerComposeService.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,OAAO,EAEP,QAAQ,EACR,MAAM,EAEN,QAAQ,EACR,MAAM,EAEN,MAAM,GACP,MAAM,yBAAyB,CAAA;AAEhC,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAAC,oBAAoB,EAAE;IACrG,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,
|
|
1
|
+
{"version":3,"file":"DockerComposeService.js","sourceRoot":"","sources":["../../../src/node/DockerComposeService/DockerComposeService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livestore/utils-dev",
|
|
3
|
-
"version": "0.0.0-snapshot-
|
|
3
|
+
"version": "0.0.0-snapshot-85438261e6388b2d7ee76c512346cf96c2a5167c",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"./src/node-vitest/global.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@opentelemetry/sdk-trace-base": "2.0.1",
|
|
23
23
|
"@opentelemetry/sdk-trace-node": "2.0.1",
|
|
24
24
|
"wrangler": "4.32.0",
|
|
25
|
-
"@livestore/utils": "0.0.0-snapshot-
|
|
25
|
+
"@livestore/utils": "0.0.0-snapshot-85438261e6388b2d7ee76c512346cf96c2a5167c"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {},
|
|
28
28
|
"files": [
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
|
|
14
14
|
export class DockerComposeError extends Schema.TaggedError<DockerComposeError>()('DockerComposeError', {
|
|
15
15
|
cause: Schema.Defect,
|
|
16
|
-
|
|
16
|
+
note: Schema.String,
|
|
17
17
|
}) {}
|
|
18
18
|
|
|
19
19
|
export interface DockerComposeArgs {
|
|
@@ -43,6 +43,11 @@ export interface DockerComposeOperations {
|
|
|
43
43
|
options?: StartOptions,
|
|
44
44
|
) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError, Scope.Scope>
|
|
45
45
|
readonly stop: Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>
|
|
46
|
+
readonly down: (options?: {
|
|
47
|
+
readonly env?: Record<string, string>
|
|
48
|
+
readonly volumes?: boolean
|
|
49
|
+
readonly removeOrphans?: boolean
|
|
50
|
+
}) => Effect.Effect<void, DockerComposeError | PlatformError.PlatformError>
|
|
46
51
|
readonly logs: (
|
|
47
52
|
options?: LogsOptions,
|
|
48
53
|
) => Stream.Stream<string, DockerComposeError | PlatformError.PlatformError, Scope.Scope>
|
|
@@ -67,7 +72,7 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
67
72
|
: Effect.fail(
|
|
68
73
|
new DockerComposeError({
|
|
69
74
|
cause: new Error(`Docker compose pull failed with exit code ${exitCode}`),
|
|
70
|
-
|
|
75
|
+
note: `Docker compose pull failed with exit code ${exitCode}`,
|
|
71
76
|
}),
|
|
72
77
|
),
|
|
73
78
|
),
|
|
@@ -89,12 +94,14 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
89
94
|
const command = yield* Command.make(baseArgs[0]!, ...baseArgs.slice(1)).pipe(
|
|
90
95
|
Command.workingDirectory(cwd),
|
|
91
96
|
Command.env(options.env ?? {}),
|
|
97
|
+
Command.stderr('inherit'),
|
|
98
|
+
Command.stdout('inherit'),
|
|
92
99
|
Command.start,
|
|
93
100
|
Effect.catchAll((cause) =>
|
|
94
101
|
Effect.fail(
|
|
95
102
|
new DockerComposeError({
|
|
96
103
|
cause,
|
|
97
|
-
|
|
104
|
+
note: `Failed to start Docker Compose services in ${cwd}`,
|
|
98
105
|
}),
|
|
99
106
|
),
|
|
100
107
|
),
|
|
@@ -103,13 +110,13 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
103
110
|
|
|
104
111
|
// Wait for command completion
|
|
105
112
|
yield* command.exitCode.pipe(
|
|
106
|
-
Effect.flatMap((exitCode
|
|
113
|
+
Effect.flatMap((exitCode) =>
|
|
107
114
|
exitCode === 0
|
|
108
115
|
? Effect.void
|
|
109
116
|
: Effect.fail(
|
|
110
117
|
new DockerComposeError({
|
|
111
118
|
cause: new Error(`Docker compose exited with code ${exitCode}`),
|
|
112
|
-
|
|
119
|
+
note: `Docker Compose failed to start with exit code ${exitCode}. Env: ${JSON.stringify(options.env)}`,
|
|
113
120
|
}),
|
|
114
121
|
),
|
|
115
122
|
),
|
|
@@ -140,7 +147,7 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
140
147
|
: Effect.fail(
|
|
141
148
|
new DockerComposeError({
|
|
142
149
|
cause: new Error(`Docker compose stop exited with code ${exitCode}`),
|
|
143
|
-
|
|
150
|
+
note: `Failed to stop Docker Compose services`,
|
|
144
151
|
}),
|
|
145
152
|
),
|
|
146
153
|
),
|
|
@@ -167,7 +174,7 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
167
174
|
Effect.fail(
|
|
168
175
|
new DockerComposeError({
|
|
169
176
|
cause,
|
|
170
|
-
|
|
177
|
+
note: `Failed to read Docker Compose logs in ${cwd}`,
|
|
171
178
|
}),
|
|
172
179
|
),
|
|
173
180
|
),
|
|
@@ -181,13 +188,46 @@ export class DockerComposeService extends Effect.Service<DockerComposeService>()
|
|
|
181
188
|
(cause) =>
|
|
182
189
|
new DockerComposeError({
|
|
183
190
|
cause,
|
|
184
|
-
|
|
191
|
+
note: `Error reading Docker Compose logs in ${cwd}`,
|
|
185
192
|
}),
|
|
186
193
|
),
|
|
187
194
|
)
|
|
188
195
|
}).pipe(Stream.unwrapScoped)
|
|
189
196
|
|
|
190
|
-
|
|
197
|
+
const down = (options?: {
|
|
198
|
+
readonly env?: Record<string, string>
|
|
199
|
+
readonly volumes?: boolean
|
|
200
|
+
readonly removeOrphans?: boolean
|
|
201
|
+
}) =>
|
|
202
|
+
Effect.gen(function* () {
|
|
203
|
+
yield* Effect.log(`Tearing down Docker Compose services in ${cwd}`)
|
|
204
|
+
|
|
205
|
+
const baseArgs = ['docker', 'compose', 'down']
|
|
206
|
+
if (options?.volumes) baseArgs.push('-v')
|
|
207
|
+
if (options?.removeOrphans) baseArgs.push('--remove-orphans')
|
|
208
|
+
if (serviceName) baseArgs.push(serviceName)
|
|
209
|
+
|
|
210
|
+
yield* Command.make(baseArgs[0]!, ...baseArgs.slice(1)).pipe(
|
|
211
|
+
Command.workingDirectory(cwd),
|
|
212
|
+
Command.env(options?.env ?? {}),
|
|
213
|
+
Command.exitCode,
|
|
214
|
+
Effect.flatMap((exitCode: number) =>
|
|
215
|
+
exitCode === 0
|
|
216
|
+
? Effect.void
|
|
217
|
+
: Effect.fail(
|
|
218
|
+
new DockerComposeError({
|
|
219
|
+
cause: new Error(`Docker compose down exited with code ${exitCode}`),
|
|
220
|
+
note: `Failed to tear down Docker Compose services`,
|
|
221
|
+
}),
|
|
222
|
+
),
|
|
223
|
+
),
|
|
224
|
+
Effect.provide(commandExecutorContext),
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
yield* Effect.log(`Docker Compose services torn down successfully`)
|
|
228
|
+
}).pipe(Effect.withSpan('downDockerCompose'))
|
|
229
|
+
|
|
230
|
+
return { pull, start, stop, down, logs }
|
|
191
231
|
}),
|
|
192
232
|
}) {}
|
|
193
233
|
|
|
@@ -219,7 +259,7 @@ const performHealthCheck = ({
|
|
|
219
259
|
Effect.fail(
|
|
220
260
|
new DockerComposeError({
|
|
221
261
|
cause: new Error('Health check timeout'),
|
|
222
|
-
|
|
262
|
+
note: `Health check failed for ${url} after ${Duration.toMillis(timeout)}ms`,
|
|
223
263
|
}),
|
|
224
264
|
),
|
|
225
265
|
),
|