testcontainers 9.11.0 → 9.12.0-beta.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/dist/package.json +1 -1
- package/dist/src/docker/client/docker-client-types.d.ts +2 -0
- package/dist/src/docker/client/docker-client.js +5 -1
- package/dist/src/docker-compose/docker-compose-client.d.ts +9 -0
- package/dist/src/docker-compose/docker-compose-client.js +221 -0
- package/dist/src/docker-compose/docker-compose-options.d.ts +6 -0
- package/dist/src/docker-compose/docker-compose-options.js +49 -0
- package/dist/src/docker-compose-environment/docker-compose-environment.js +6 -7
- package/dist/src/docker-compose-environment/started-docker-compose-environment.d.ts +1 -2
- package/dist/src/docker-compose-environment/started-docker-compose-environment.js +5 -4
- package/dist/src/docker-compose-environment/stopped-docker-compose-environment.d.ts +1 -2
- package/dist/src/docker-compose-environment/stopped-docker-compose-environment.js +3 -2
- package/dist/src/generic-container/started-generic-container.d.ts +2 -1
- package/dist/src/generic-container/started-generic-container.js +10 -0
- package/dist/src/modules/abstract-started-container.d.ts +2 -1
- package/dist/src/modules/abstract-started-container.js +5 -0
- package/dist/src/system-info.d.ts +2 -0
- package/dist/src/system-info.js +38 -6
- package/dist/src/test-container.d.ts +1 -4
- package/dist/src/wait-strategy/composite-wait-strategy.js +4 -1
- package/dist/src/wait-strategy/health-check-wait-strategy.js +1 -0
- package/dist/src/wait-strategy/host-port-wait-strategy.js +1 -0
- package/dist/src/wait-strategy/http-wait-strategy.js +1 -0
- package/dist/src/wait-strategy/log-wait-strategy.js +1 -0
- package/dist/src/wait-strategy/shell-wait-strategy.js +1 -0
- package/package.json +1 -1
- package/dist/src/docker-compose/default-docker-compose-options.d.ts +0 -3
- package/dist/src/docker-compose/default-docker-compose-options.js +0 -51
- package/dist/src/docker-compose/functions/docker-compose-down.d.ts +0 -3
- package/dist/src/docker-compose/functions/docker-compose-down.js +0 -39
- package/dist/src/docker-compose/functions/docker-compose-pull.d.ts +0 -2
- package/dist/src/docker-compose/functions/docker-compose-pull.js +0 -35
- package/dist/src/docker-compose/functions/docker-compose-stop.d.ts +0 -2
- package/dist/src/docker-compose/functions/docker-compose-stop.js +0 -29
- package/dist/src/docker-compose/functions/docker-compose-up.d.ts +0 -2
- package/dist/src/docker-compose/functions/docker-compose-up.js +0 -41
- /package/dist/src/docker-compose/{functions/container-name-resolver.d.ts → container-name-resolver.d.ts} +0 -0
- /package/dist/src/docker-compose/{functions/container-name-resolver.js → container-name-resolver.js} +0 -0
package/dist/package.json
CHANGED
|
@@ -3,11 +3,13 @@ import Dockerode, { DockerOptions } from "dockerode";
|
|
|
3
3
|
import { HostIps } from "../lookup-host-ips";
|
|
4
4
|
import { SystemInfo } from "../../system-info";
|
|
5
5
|
import { ContainerRuntime } from "../types";
|
|
6
|
+
import { DockerComposeClient } from "../../docker-compose/docker-compose-client";
|
|
6
7
|
export type DockerClient = PartialDockerClient & {
|
|
7
8
|
sessionId: string;
|
|
8
9
|
};
|
|
9
10
|
export type PartialDockerClient = DockerClientStrategyResult & {
|
|
10
11
|
dockerode: Dockerode;
|
|
12
|
+
dockerComposeClient: DockerComposeClient;
|
|
11
13
|
host: string;
|
|
12
14
|
containerRuntime: ContainerRuntime;
|
|
13
15
|
hostIps: HostIps;
|
|
@@ -28,6 +28,7 @@ const testcontainers_host_strategy_1 = require("./strategy/testcontainers-host-s
|
|
|
28
28
|
const uuid_1 = require("../../uuid");
|
|
29
29
|
const file_lock_1 = require("../../file-lock");
|
|
30
30
|
const reaper_1 = require("../../reaper");
|
|
31
|
+
const docker_compose_client_1 = require("../../docker-compose/docker-compose-client");
|
|
31
32
|
let dockerClient;
|
|
32
33
|
const strategies = [
|
|
33
34
|
new testcontainers_host_strategy_1.TestcontainersHostStrategy(),
|
|
@@ -81,6 +82,7 @@ function initialiseStrategy(strategy) {
|
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
function tryToCreateDockerClient(strategy) {
|
|
85
|
+
var _a;
|
|
84
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
85
87
|
if (strategy.init) {
|
|
86
88
|
yield strategy.init();
|
|
@@ -96,11 +98,13 @@ function tryToCreateDockerClient(strategy) {
|
|
|
96
98
|
: "docker";
|
|
97
99
|
const host = yield (0, resolve_host_1.resolveHost)(dockerode, containerRuntime, info.dockerInfo.indexServerAddress, dockerClientStrategyResult.uri, dockerClientStrategyResult.allowUserOverrides);
|
|
98
100
|
const hostIps = yield (0, lookup_host_ips_1.lookupHostIps)(host);
|
|
101
|
+
const dockerComposeClient = yield (0, docker_compose_client_1.getDockerComposeClient)((_a = info.dockerComposeInfo) === null || _a === void 0 ? void 0 : _a.compatability);
|
|
99
102
|
return Object.assign(Object.assign({}, dockerClientStrategyResult), { containerRuntime,
|
|
100
103
|
host,
|
|
101
104
|
hostIps,
|
|
102
105
|
info,
|
|
103
|
-
dockerode
|
|
106
|
+
dockerode,
|
|
107
|
+
dockerComposeClient });
|
|
104
108
|
}
|
|
105
109
|
else {
|
|
106
110
|
logger_1.log.warn(`Docker client strategy "${strategy.getName()}" does not work`);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DockerComposeDownOptions, DockerComposeOptions } from "./docker-compose-options";
|
|
2
|
+
import { DockerComposeCompatibility } from "../system-info";
|
|
3
|
+
export interface DockerComposeClient {
|
|
4
|
+
up: (options: DockerComposeOptions, services?: Array<string>) => Promise<void>;
|
|
5
|
+
pull: (options: DockerComposeOptions, services?: Array<string>) => Promise<void>;
|
|
6
|
+
stop: (options: DockerComposeOptions) => Promise<void>;
|
|
7
|
+
down: (options: DockerComposeOptions, downOptions: DockerComposeDownOptions) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare function getDockerComposeClient(compat?: DockerComposeCompatibility): DockerComposeClient;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.getDockerComposeClient = void 0;
|
|
36
|
+
const logger_1 = require("../logger");
|
|
37
|
+
const docker_compose_1 = __importStar(require("docker-compose"));
|
|
38
|
+
const docker_compose_options_1 = require("./docker-compose-options");
|
|
39
|
+
function getDockerComposeClient(compat) {
|
|
40
|
+
switch (compat) {
|
|
41
|
+
case undefined:
|
|
42
|
+
return new MissingDockerComposeClient();
|
|
43
|
+
case "v1":
|
|
44
|
+
return new DockerComposeV1Client();
|
|
45
|
+
case "v2":
|
|
46
|
+
return new DockerComposeV2Client();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.getDockerComposeClient = getDockerComposeClient;
|
|
50
|
+
class DockerComposeV1Client {
|
|
51
|
+
up(options, services) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
try {
|
|
54
|
+
if (services) {
|
|
55
|
+
logger_1.log.info(`Upping DockerCompose environment services ${services.join(", ")}...`);
|
|
56
|
+
yield docker_compose_1.default.upMany(services, yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
logger_1.log.info(`Upping DockerCompose environment...`);
|
|
60
|
+
yield docker_compose_1.default.upAll(yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
61
|
+
}
|
|
62
|
+
logger_1.log.info(`Upped DockerCompose environment`);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
try {
|
|
67
|
+
logger_1.log.error(`Failed to up DockerCompose environment: ${error.message}`);
|
|
68
|
+
yield this.down(options, { removeVolumes: true, timeout: 0 });
|
|
69
|
+
}
|
|
70
|
+
catch (_a) {
|
|
71
|
+
logger_1.log.error(`Failed to down DockerCompose environment after failed up`);
|
|
72
|
+
}
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
pull(options, services) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
try {
|
|
80
|
+
if (services) {
|
|
81
|
+
logger_1.log.info(`Pulling DockerCompose environment images "${services.join('", "')}"...`);
|
|
82
|
+
yield docker_compose_1.default.pullMany(services, yield (0, docker_compose_options_1.defaultDockerComposeOptions)(Object.assign(Object.assign({}, options), { logger: logger_1.pullLog })));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger_1.log.info(`Pulling DockerCompose environment images...`);
|
|
86
|
+
yield docker_compose_1.default.pullAll(yield (0, docker_compose_options_1.defaultDockerComposeOptions)(Object.assign(Object.assign({}, options), { logger: logger_1.pullLog })));
|
|
87
|
+
}
|
|
88
|
+
logger_1.log.info(`Pulled DockerCompose environment`);
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () { return logger_1.log.error(`Failed to pull DockerCompose environment images: ${error.message}`); }));
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
stop(options) {
|
|
96
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
+
try {
|
|
98
|
+
logger_1.log.info(`Stopping DockerCompose environment...`);
|
|
99
|
+
yield docker_compose_1.default.stop(yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
100
|
+
logger_1.log.info(`Stopped DockerCompose environment`);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () { return logger_1.log.error(`Failed to stop DockerCompose environment: ${error.message}`); }));
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
down(options, downOptions) {
|
|
108
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
try {
|
|
110
|
+
logger_1.log.info(`Downing DockerCompose environment...`);
|
|
111
|
+
yield docker_compose_1.default.down(Object.assign(Object.assign({}, (yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options))), { commandOptions: dockerComposeDownCommandOptions(downOptions) }));
|
|
112
|
+
logger_1.log.info(`Downed DockerCompose environment`);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () { return logger_1.log.error(`Failed to down DockerCompose environment: ${error.message}`); }));
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
class DockerComposeV2Client {
|
|
121
|
+
up(options, services) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
try {
|
|
124
|
+
if (services) {
|
|
125
|
+
logger_1.log.info(`Upping DockerCompose environment services ${services.join(", ")}...`);
|
|
126
|
+
yield docker_compose_1.v2.upMany(services, yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
logger_1.log.info(`Upping DockerCompose environment...`);
|
|
130
|
+
yield docker_compose_1.v2.upAll(yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
131
|
+
}
|
|
132
|
+
logger_1.log.info(`Upped DockerCompose environment`);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
try {
|
|
137
|
+
logger_1.log.error(`Failed to up DockerCompose environment: ${error.message}`);
|
|
138
|
+
yield this.down(options, { removeVolumes: true, timeout: 0 });
|
|
139
|
+
}
|
|
140
|
+
catch (_a) {
|
|
141
|
+
logger_1.log.error(`Failed to down DockerCompose environment after failed up`);
|
|
142
|
+
}
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
pull(options, services) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
try {
|
|
150
|
+
if (services) {
|
|
151
|
+
logger_1.log.info(`Pulling DockerCompose environment images "${services.join('", "')}"...`);
|
|
152
|
+
yield docker_compose_1.v2.pullMany(services, yield (0, docker_compose_options_1.defaultDockerComposeOptions)(Object.assign(Object.assign({}, options), { logger: logger_1.pullLog })));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
logger_1.log.info(`Pulling DockerCompose environment images...`);
|
|
156
|
+
yield docker_compose_1.v2.pullAll(yield (0, docker_compose_options_1.defaultDockerComposeOptions)(Object.assign(Object.assign({}, options), { logger: logger_1.pullLog })));
|
|
157
|
+
}
|
|
158
|
+
logger_1.log.info(`Pulled DockerCompose environment`);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () { return logger_1.log.error(`Failed to pull DockerCompose environment images: ${error.message}`); }));
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
stop(options) {
|
|
166
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
167
|
+
try {
|
|
168
|
+
logger_1.log.info(`Stopping DockerCompose environment...`);
|
|
169
|
+
yield docker_compose_1.v2.stop(yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
170
|
+
logger_1.log.info(`Stopped DockerCompose environment`);
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () { return logger_1.log.error(`Failed to stop DockerCompose environment: ${error.message}`); }));
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
down(options, downOptions) {
|
|
178
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
179
|
+
try {
|
|
180
|
+
logger_1.log.info(`Downing DockerCompose environment...`);
|
|
181
|
+
yield docker_compose_1.v2.down(Object.assign(Object.assign({}, (yield (0, docker_compose_options_1.defaultDockerComposeOptions)(options))), { commandOptions: dockerComposeDownCommandOptions(downOptions) }));
|
|
182
|
+
logger_1.log.info(`Downed DockerCompose environment`);
|
|
183
|
+
}
|
|
184
|
+
catch (err) {
|
|
185
|
+
yield handleAndRethrow(err, (error) => __awaiter(this, void 0, void 0, function* () { return logger_1.log.error(`Failed to down DockerCompose environment: ${error.message}`); }));
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
class MissingDockerComposeClient {
|
|
191
|
+
up() {
|
|
192
|
+
throw new Error("DockerCompose is not installed");
|
|
193
|
+
}
|
|
194
|
+
pull() {
|
|
195
|
+
throw new Error("DockerCompose is not installed");
|
|
196
|
+
}
|
|
197
|
+
stop() {
|
|
198
|
+
throw new Error("DockerCompose is not installed");
|
|
199
|
+
}
|
|
200
|
+
down() {
|
|
201
|
+
throw new Error("DockerCompose is not installed");
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
205
|
+
function handleAndRethrow(err, handle) {
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
const error = err instanceof Error ? err : new Error(err.err.trim());
|
|
208
|
+
yield handle(error);
|
|
209
|
+
throw error;
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
function dockerComposeDownCommandOptions(options) {
|
|
213
|
+
const result = [];
|
|
214
|
+
if (options.removeVolumes) {
|
|
215
|
+
result.push("-v");
|
|
216
|
+
}
|
|
217
|
+
if (options.timeout) {
|
|
218
|
+
result.push("-t", `${options.timeout / 1000}`);
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Environment } from "../docker/types";
|
|
2
2
|
import { Logger } from "../logger";
|
|
3
|
+
import { IDockerComposeOptions } from "docker-compose";
|
|
3
4
|
export type DockerComposeOptions = {
|
|
4
5
|
filePath: string;
|
|
5
6
|
files: string | string[];
|
|
@@ -9,3 +10,8 @@ export type DockerComposeOptions = {
|
|
|
9
10
|
environment?: Environment;
|
|
10
11
|
logger?: Logger;
|
|
11
12
|
};
|
|
13
|
+
export declare const defaultDockerComposeOptions: ({ environment, ...options }: DockerComposeOptions) => Promise<Partial<IDockerComposeOptions>>;
|
|
14
|
+
export type DockerComposeDownOptions = {
|
|
15
|
+
timeout: number;
|
|
16
|
+
removeVolumes: boolean;
|
|
17
|
+
};
|
|
@@ -1,2 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
+
var t = {};
|
|
13
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
+
t[p] = s[p];
|
|
15
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
+
t[p[i]] = s[p[i]];
|
|
19
|
+
}
|
|
20
|
+
return t;
|
|
21
|
+
};
|
|
2
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.defaultDockerComposeOptions = void 0;
|
|
24
|
+
const logger_1 = require("../logger");
|
|
25
|
+
const docker_client_1 = require("../docker/client/docker-client");
|
|
26
|
+
const os_1 = require("os");
|
|
27
|
+
const type_guards_1 = require("../type-guards");
|
|
28
|
+
const defaultDockerComposeOptions = (_a) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
+
var _b;
|
|
30
|
+
var { environment = {} } = _a, options = __rest(_a, ["environment"]);
|
|
31
|
+
const { composeEnvironment } = yield (0, docker_client_1.getDockerClient)();
|
|
32
|
+
const log = (_b = options.logger) !== null && _b !== void 0 ? _b : logger_1.composeLog;
|
|
33
|
+
return {
|
|
34
|
+
log: false,
|
|
35
|
+
callback: log.enabled()
|
|
36
|
+
? (chunk) => {
|
|
37
|
+
chunk
|
|
38
|
+
.toString()
|
|
39
|
+
.split(os_1.EOL)
|
|
40
|
+
.filter(type_guards_1.isNotEmptyString)
|
|
41
|
+
.forEach((line) => log.trace(line.trim()));
|
|
42
|
+
}
|
|
43
|
+
: undefined,
|
|
44
|
+
cwd: options.filePath,
|
|
45
|
+
config: options.files,
|
|
46
|
+
composeOptions: options.composeOptions,
|
|
47
|
+
commandOptions: options.commandOptions,
|
|
48
|
+
env: Object.assign(Object.assign(Object.assign(Object.assign({}, process.env), { COMPOSE_PROJECT_NAME: options.projectName }), composeEnvironment), environment),
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
exports.defaultDockerComposeOptions = defaultDockerComposeOptions;
|
|
@@ -11,7 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.DockerComposeEnvironment = void 0;
|
|
13
13
|
const bound_ports_1 = require("../bound-ports");
|
|
14
|
-
const container_name_resolver_1 = require("../docker-compose/
|
|
14
|
+
const container_name_resolver_1 = require("../docker-compose/container-name-resolver");
|
|
15
15
|
const started_generic_container_1 = require("../generic-container/started-generic-container");
|
|
16
16
|
const logger_1 = require("../logger");
|
|
17
17
|
const uuid_1 = require("../uuid");
|
|
@@ -21,11 +21,8 @@ const docker_client_1 = require("../docker/client/docker-client");
|
|
|
21
21
|
const inspect_container_1 = require("../docker/functions/container/inspect-container");
|
|
22
22
|
const container_logs_1 = require("../docker/functions/container/container-logs");
|
|
23
23
|
const started_docker_compose_environment_1 = require("./started-docker-compose-environment");
|
|
24
|
-
const docker_compose_down_1 = require("../docker-compose/functions/docker-compose-down");
|
|
25
|
-
const docker_compose_up_1 = require("../docker-compose/functions/docker-compose-up");
|
|
26
24
|
const wait_for_container_1 = require("../wait-for-container");
|
|
27
25
|
const pull_policy_1 = require("../pull-policy");
|
|
28
|
-
const docker_compose_pull_1 = require("../docker-compose/functions/docker-compose-pull");
|
|
29
26
|
const wait_1 = require("../wait-strategy/wait");
|
|
30
27
|
const reaper_1 = require("../reaper");
|
|
31
28
|
class DockerComposeEnvironment {
|
|
@@ -77,6 +74,7 @@ class DockerComposeEnvironment {
|
|
|
77
74
|
up(services) {
|
|
78
75
|
return __awaiter(this, void 0, void 0, function* () {
|
|
79
76
|
logger_1.log.info(`Starting DockerCompose environment "${this.projectName}"...`);
|
|
77
|
+
const { dockerComposeClient } = yield (0, docker_client_1.getDockerClient)();
|
|
80
78
|
yield (0, reaper_1.registerComposeProjectForCleanup)(this.projectName);
|
|
81
79
|
const options = {
|
|
82
80
|
filePath: this.composeFilePath,
|
|
@@ -96,9 +94,10 @@ class DockerComposeEnvironment {
|
|
|
96
94
|
}
|
|
97
95
|
this.profiles.forEach((profile) => composeOptions.push("--profile", profile));
|
|
98
96
|
if (this.pullPolicy.shouldPull()) {
|
|
99
|
-
yield
|
|
97
|
+
yield dockerComposeClient.pull(options, services);
|
|
100
98
|
}
|
|
101
|
-
yield
|
|
99
|
+
yield dockerComposeClient.up(Object.assign(Object.assign({}, options), { commandOptions,
|
|
100
|
+
composeOptions, environment: this.environment }), services);
|
|
102
101
|
const startedContainers = (yield (0, list_containers_1.listContainers)()).filter((container) => container.Labels["com.docker.compose.project"] === this.projectName);
|
|
103
102
|
const startedContainerNames = startedContainers.reduce((containerNames, startedContainer) => [
|
|
104
103
|
...containerNames,
|
|
@@ -127,7 +126,7 @@ class DockerComposeEnvironment {
|
|
|
127
126
|
}
|
|
128
127
|
catch (err) {
|
|
129
128
|
try {
|
|
130
|
-
yield
|
|
129
|
+
yield dockerComposeClient.down(options, { removeVolumes: true, timeout: 0 });
|
|
131
130
|
}
|
|
132
131
|
catch (_a) {
|
|
133
132
|
logger_1.log.warn(`Failed to stop DockerCompose environment after failed up`);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { StartedGenericContainer } from "../generic-container/started-generic-container";
|
|
2
2
|
import { StoppedDockerComposeEnvironment } from "./stopped-docker-compose-environment";
|
|
3
3
|
import { DownedDockerComposeEnvironment } from "./downed-docker-compose-environment";
|
|
4
|
-
import { DockerComposeOptions } from "../docker-compose/docker-compose-options";
|
|
5
|
-
import { DockerComposeDownOptions } from "../test-container";
|
|
4
|
+
import { DockerComposeDownOptions, DockerComposeOptions } from "../docker-compose/docker-compose-options";
|
|
6
5
|
export declare class StartedDockerComposeEnvironment {
|
|
7
6
|
private readonly startedGenericContainers;
|
|
8
7
|
private readonly options;
|
|
@@ -11,10 +11,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.StartedDockerComposeEnvironment = void 0;
|
|
13
13
|
const logger_1 = require("../logger");
|
|
14
|
-
const docker_compose_down_1 = require("../docker-compose/functions/docker-compose-down");
|
|
15
|
-
const docker_compose_stop_1 = require("../docker-compose/functions/docker-compose-stop");
|
|
16
14
|
const stopped_docker_compose_environment_1 = require("./stopped-docker-compose-environment");
|
|
17
15
|
const downed_docker_compose_environment_1 = require("./downed-docker-compose-environment");
|
|
16
|
+
const docker_client_1 = require("../docker/client/docker-client");
|
|
18
17
|
class StartedDockerComposeEnvironment {
|
|
19
18
|
constructor(startedGenericContainers, options) {
|
|
20
19
|
this.startedGenericContainers = startedGenericContainers;
|
|
@@ -22,14 +21,16 @@ class StartedDockerComposeEnvironment {
|
|
|
22
21
|
}
|
|
23
22
|
stop() {
|
|
24
23
|
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
-
yield (0,
|
|
24
|
+
const { dockerComposeClient } = yield (0, docker_client_1.getDockerClient)();
|
|
25
|
+
yield dockerComposeClient.stop(this.options);
|
|
26
26
|
return new stopped_docker_compose_environment_1.StoppedDockerComposeEnvironment(this.options);
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
down(options = {}) {
|
|
30
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
const { dockerComposeClient } = yield (0, docker_client_1.getDockerClient)();
|
|
31
32
|
const downOptions = Object.assign({ timeout: 0, removeVolumes: true }, options);
|
|
32
|
-
yield
|
|
33
|
+
yield dockerComposeClient.down(this.options, downOptions);
|
|
33
34
|
return new downed_docker_compose_environment_1.DownedDockerComposeEnvironment();
|
|
34
35
|
});
|
|
35
36
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { DownedDockerComposeEnvironment } from "./downed-docker-compose-environment";
|
|
2
|
-
import { DockerComposeOptions } from "../docker-compose/docker-compose-options";
|
|
3
|
-
import { DockerComposeDownOptions } from "../test-container";
|
|
2
|
+
import { DockerComposeDownOptions, DockerComposeOptions } from "../docker-compose/docker-compose-options";
|
|
4
3
|
export declare class StoppedDockerComposeEnvironment {
|
|
5
4
|
private readonly options;
|
|
6
5
|
constructor(options: DockerComposeOptions);
|
|
@@ -10,16 +10,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.StoppedDockerComposeEnvironment = void 0;
|
|
13
|
-
const docker_compose_down_1 = require("../docker-compose/functions/docker-compose-down");
|
|
14
13
|
const downed_docker_compose_environment_1 = require("./downed-docker-compose-environment");
|
|
14
|
+
const docker_client_1 = require("../docker/client/docker-client");
|
|
15
15
|
class StoppedDockerComposeEnvironment {
|
|
16
16
|
constructor(options) {
|
|
17
17
|
this.options = options;
|
|
18
18
|
}
|
|
19
19
|
down(options = {}) {
|
|
20
20
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const { dockerComposeClient } = yield (0, docker_client_1.getDockerClient)();
|
|
21
22
|
const resolvedOptions = Object.assign({ timeout: 0, removeVolumes: true }, options);
|
|
22
|
-
yield
|
|
23
|
+
yield dockerComposeClient.down(this.options, resolvedOptions);
|
|
23
24
|
return new downed_docker_compose_environment_1.DownedDockerComposeEnvironment();
|
|
24
25
|
});
|
|
25
26
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import { RestartOptions, StartedTestContainer, StopOptions, StoppedTestContainer } from "../test-container";
|
|
4
4
|
import Dockerode from "dockerode";
|
|
5
|
-
import { ContentToCopy, ExecResult, FileToCopy, Labels } from "../docker/types";
|
|
5
|
+
import { ContentToCopy, DirectoryToCopy, ExecResult, FileToCopy, Labels } from "../docker/types";
|
|
6
6
|
import { InspectResult } from "../docker/functions/container/inspect-container";
|
|
7
7
|
import { BoundPorts } from "../bound-ports";
|
|
8
8
|
import { Readable } from "stream";
|
|
@@ -32,6 +32,7 @@ export declare class StartedGenericContainer implements StartedTestContainer {
|
|
|
32
32
|
getNetworkId(networkName: string): string;
|
|
33
33
|
getIpAddress(networkName: string): string;
|
|
34
34
|
copyFilesToContainer(filesToCopy: FileToCopy[]): Promise<void>;
|
|
35
|
+
copyDirectoriesToContainer(directoriesToCopy: DirectoryToCopy[]): Promise<void>;
|
|
35
36
|
copyContentToContainer(contentsToCopy: ContentToCopy[]): Promise<void>;
|
|
36
37
|
copyArchiveFromContainer(path: string): Promise<NodeJS.ReadableStream>;
|
|
37
38
|
exec(command: string | string[]): Promise<ExecResult>;
|
|
@@ -122,6 +122,16 @@ class StartedGenericContainer {
|
|
|
122
122
|
logger_1.log.debug(`Copied files to container`, { containerId: this.container.id });
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
|
+
copyDirectoriesToContainer(directoriesToCopy) {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
127
|
+
logger_1.log.debug(`Copying directories to container...`, { containerId: this.container.id });
|
|
128
|
+
const tar = (0, archiver_1.default)("tar");
|
|
129
|
+
directoriesToCopy.forEach(({ source, target }) => tar.directory(source, target));
|
|
130
|
+
tar.finalize();
|
|
131
|
+
yield (0, put_container_archive_1.putContainerArchive)({ container: this.container, stream: tar, containerPath: "/" });
|
|
132
|
+
logger_1.log.debug(`Copied directories to container`, { containerId: this.container.id });
|
|
133
|
+
});
|
|
134
|
+
}
|
|
125
135
|
copyContentToContainer(contentsToCopy) {
|
|
126
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
127
137
|
logger_1.log.debug(`Copying content to container...`, { containerId: this.container.id });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import { RestartOptions, StartedTestContainer, StopOptions, StoppedTestContainer } from "../test-container";
|
|
4
|
-
import { ContentToCopy, ExecResult, FileToCopy, Labels } from "../docker/types";
|
|
4
|
+
import { ContentToCopy, DirectoryToCopy, ExecResult, FileToCopy, Labels } from "../docker/types";
|
|
5
5
|
import { Readable } from "stream";
|
|
6
6
|
export declare class AbstractStartedContainer implements StartedTestContainer {
|
|
7
7
|
protected readonly startedTestContainer: StartedTestContainer;
|
|
@@ -20,6 +20,7 @@ export declare class AbstractStartedContainer implements StartedTestContainer {
|
|
|
20
20
|
getNetworkId(networkName: string): string;
|
|
21
21
|
getIpAddress(networkName: string): string;
|
|
22
22
|
copyFilesToContainer(filesToCopy: FileToCopy[]): Promise<void>;
|
|
23
|
+
copyDirectoriesToContainer(directoriesToCopy: DirectoryToCopy[]): Promise<void>;
|
|
23
24
|
copyContentToContainer(contentsToCopy: ContentToCopy[]): Promise<void>;
|
|
24
25
|
copyArchiveFromContainer(path: string): Promise<NodeJS.ReadableStream>;
|
|
25
26
|
exec(command: string | string[]): Promise<ExecResult>;
|
|
@@ -63,6 +63,11 @@ class AbstractStartedContainer {
|
|
|
63
63
|
return this.startedTestContainer.copyFilesToContainer(filesToCopy);
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
copyDirectoriesToContainer(directoriesToCopy) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
return this.startedTestContainer.copyDirectoriesToContainer(directoriesToCopy);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
66
71
|
copyContentToContainer(contentsToCopy) {
|
|
67
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
68
73
|
return this.startedTestContainer.copyContentToContainer(contentsToCopy);
|
package/dist/src/system-info.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -11,11 +34,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
35
|
exports.getSystemInfo = void 0;
|
|
13
36
|
const logger_1 = require("./logger");
|
|
14
|
-
const docker_compose_1 = require("docker-compose");
|
|
37
|
+
const docker_compose_1 = __importStar(require("docker-compose"));
|
|
15
38
|
const get_info_1 = require("./docker/functions/get-info");
|
|
16
39
|
let systemInfo;
|
|
17
40
|
const getSystemInfo = (dockerode) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
-
var _a;
|
|
41
|
+
var _a, _b;
|
|
19
42
|
if (systemInfo !== undefined) {
|
|
20
43
|
return systemInfo;
|
|
21
44
|
}
|
|
@@ -24,7 +47,7 @@ const getSystemInfo = (dockerode) => __awaiter(void 0, void 0, void 0, function*
|
|
|
24
47
|
const dockerInfo = yield (0, get_info_1.getDockerInfo)(dockerode);
|
|
25
48
|
const dockerComposeInfo = yield getDockerComposeInfo();
|
|
26
49
|
systemInfo = { nodeInfo, dockerInfo, dockerComposeInfo };
|
|
27
|
-
logger_1.log.debug(`Node version: ${nodeInfo.version}, Platform: ${nodeInfo.platform}, Arch: ${nodeInfo.architecture}, OS: ${dockerInfo.operatingSystem}, Version: ${dockerInfo.serverVersion}, Arch: ${dockerInfo.architecture}, CPUs: ${dockerInfo.cpus}, Memory: ${dockerInfo.memory}, Compose installed: ${dockerComposeInfo !== undefined}, Compose version: ${(_a = dockerComposeInfo === null || dockerComposeInfo === void 0 ? void 0 : dockerComposeInfo.version) !== null && _a !== void 0 ? _a : "N/A"}`);
|
|
50
|
+
logger_1.log.debug(`Node version: ${nodeInfo.version}, Platform: ${nodeInfo.platform}, Arch: ${nodeInfo.architecture}, OS: ${dockerInfo.operatingSystem}, Version: ${dockerInfo.serverVersion}, Arch: ${dockerInfo.architecture}, CPUs: ${dockerInfo.cpus}, Memory: ${dockerInfo.memory}, Compose installed: ${dockerComposeInfo !== undefined}, Compose version: ${(_a = dockerComposeInfo === null || dockerComposeInfo === void 0 ? void 0 : dockerComposeInfo.version) !== null && _a !== void 0 ? _a : "N/A"}, Compose compatibility: ${(_b = dockerComposeInfo === null || dockerComposeInfo === void 0 ? void 0 : dockerComposeInfo.compatability) !== null && _b !== void 0 ? _b : "N/A"}`);
|
|
28
51
|
return systemInfo;
|
|
29
52
|
});
|
|
30
53
|
exports.getSystemInfo = getSystemInfo;
|
|
@@ -38,11 +61,20 @@ const getNodeInfo = () => {
|
|
|
38
61
|
const getDockerComposeInfo = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
39
62
|
try {
|
|
40
63
|
return {
|
|
41
|
-
version: (yield
|
|
64
|
+
version: (yield docker_compose_1.default.version()).data.version,
|
|
65
|
+
compatability: "v1",
|
|
42
66
|
};
|
|
43
67
|
}
|
|
44
68
|
catch (err) {
|
|
45
|
-
|
|
46
|
-
|
|
69
|
+
try {
|
|
70
|
+
return {
|
|
71
|
+
version: (yield docker_compose_1.v2.version()).data.version,
|
|
72
|
+
compatability: "v2",
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (_c) {
|
|
76
|
+
logger_1.log.warn(`Unable to detect DockerCompose version, is it installed? ${err}`);
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
47
79
|
}
|
|
48
80
|
});
|
|
@@ -43,10 +43,6 @@ export interface StopOptions {
|
|
|
43
43
|
remove: boolean;
|
|
44
44
|
removeVolumes: boolean;
|
|
45
45
|
}
|
|
46
|
-
export interface DockerComposeDownOptions {
|
|
47
|
-
timeout: number;
|
|
48
|
-
removeVolumes: boolean;
|
|
49
|
-
}
|
|
50
46
|
export interface StartedTestContainer {
|
|
51
47
|
stop(options?: Partial<StopOptions>): Promise<StoppedTestContainer>;
|
|
52
48
|
restart(options?: Partial<RestartOptions>): Promise<void>;
|
|
@@ -60,6 +56,7 @@ export interface StartedTestContainer {
|
|
|
60
56
|
getNetworkId(networkName: string): string;
|
|
61
57
|
getIpAddress(networkName: string): string;
|
|
62
58
|
copyArchiveFromContainer(path: string): Promise<NodeJS.ReadableStream>;
|
|
59
|
+
copyDirectoriesToContainer(directoriesToCopy: DirectoryToCopy[]): Promise<void>;
|
|
63
60
|
copyFilesToContainer(filesToCopy: FileToCopy[]): Promise<void>;
|
|
64
61
|
copyContentToContainer(contentsToCopy: ContentToCopy[]): Promise<void>;
|
|
65
62
|
exec(command: string | string[]): Promise<ExecResult>;
|
|
@@ -30,7 +30,10 @@ class CompositeWaitStrategy extends wait_strategy_1.AbstractWaitStrategy {
|
|
|
30
30
|
}, this.deadline);
|
|
31
31
|
}
|
|
32
32
|
Promise.all(this.waitStrategies.map((waitStrategy) => waitStrategy.waitUntilReady(container, boundPorts, startTime)))
|
|
33
|
-
.then(() =>
|
|
33
|
+
.then(() => {
|
|
34
|
+
logger_1.log.debug(`Composite wait strategy complete`, { containerId: container.id });
|
|
35
|
+
resolve();
|
|
36
|
+
})
|
|
34
37
|
.catch((err) => reject(err))
|
|
35
38
|
.finally(() => {
|
|
36
39
|
if (deadlineTimeout) {
|
|
@@ -29,6 +29,7 @@ class HealthCheckWaitStrategy extends wait_strategy_1.AbstractWaitStrategy {
|
|
|
29
29
|
logger_1.log.error(message, { containerId: container.id });
|
|
30
30
|
throw new Error(message);
|
|
31
31
|
}
|
|
32
|
+
logger_1.log.debug(`Health check wait strategy complete`, { containerId: container.id });
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
}
|
|
@@ -34,6 +34,7 @@ class HostPortWaitStrategy extends wait_strategy_1.AbstractWaitStrategy {
|
|
|
34
34
|
yield this.waitForPort(container, hostPort, portCheck);
|
|
35
35
|
logger_1.log.debug(`Host port ${hostPort} ready`, { containerId: container.id });
|
|
36
36
|
}
|
|
37
|
+
logger_1.log.debug(`Host port wait strategy complete`, { containerId: container.id });
|
|
37
38
|
});
|
|
38
39
|
}
|
|
39
40
|
waitForInternalPorts(portCheck, container, boundPorts) {
|
|
@@ -106,6 +106,7 @@ class HttpWaitStrategy extends wait_strategy_1.AbstractWaitStrategy {
|
|
|
106
106
|
logger_1.log.error(message, { containerId: container.id });
|
|
107
107
|
throw new Error(message);
|
|
108
108
|
}, this.startupTimeout);
|
|
109
|
+
logger_1.log.debug(`HTTP wait strategy complete`, { containerId: container.id });
|
|
109
110
|
});
|
|
110
111
|
}
|
|
111
112
|
getAgent() {
|
|
@@ -32,6 +32,7 @@ class ShellWaitStrategy extends wait_strategy_1.AbstractWaitStrategy {
|
|
|
32
32
|
logger_1.log.error(message, { containerId: container.id });
|
|
33
33
|
throw new Error(message);
|
|
34
34
|
}, this.startupTimeout);
|
|
35
|
+
logger_1.log.debug(`Shell wait strategy complete`, { containerId: container.id });
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
}
|
package/package.json
CHANGED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.defaultDockerComposeOptions = void 0;
|
|
24
|
-
const docker_client_1 = require("../docker/client/docker-client");
|
|
25
|
-
const logger_1 = require("../logger");
|
|
26
|
-
const os_1 = require("os");
|
|
27
|
-
const type_guards_1 = require("../type-guards");
|
|
28
|
-
const defaultDockerComposeOptions = (_a) => __awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
-
var _b;
|
|
30
|
-
var { environment = {} } = _a, options = __rest(_a, ["environment"]);
|
|
31
|
-
const { composeEnvironment } = yield (0, docker_client_1.getDockerClient)();
|
|
32
|
-
const log = (_b = options.logger) !== null && _b !== void 0 ? _b : logger_1.composeLog;
|
|
33
|
-
return {
|
|
34
|
-
log: false,
|
|
35
|
-
callback: log.enabled()
|
|
36
|
-
? (chunk) => {
|
|
37
|
-
chunk
|
|
38
|
-
.toString()
|
|
39
|
-
.split(os_1.EOL)
|
|
40
|
-
.filter(type_guards_1.isNotEmptyString)
|
|
41
|
-
.forEach((line) => log.trace(line.trim()));
|
|
42
|
-
}
|
|
43
|
-
: undefined,
|
|
44
|
-
cwd: options.filePath,
|
|
45
|
-
config: options.files,
|
|
46
|
-
composeOptions: options.composeOptions,
|
|
47
|
-
commandOptions: options.commandOptions,
|
|
48
|
-
env: Object.assign(Object.assign(Object.assign(Object.assign({}, process.env), { COMPOSE_PROJECT_NAME: options.projectName }), composeEnvironment), environment),
|
|
49
|
-
};
|
|
50
|
-
});
|
|
51
|
-
exports.defaultDockerComposeOptions = defaultDockerComposeOptions;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.dockerComposeDown = void 0;
|
|
13
|
-
const logger_1 = require("../../logger");
|
|
14
|
-
const default_docker_compose_options_1 = require("../default-docker-compose-options");
|
|
15
|
-
const docker_compose_1 = require("docker-compose");
|
|
16
|
-
const dockerComposeDown = (options, downOptions) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
-
logger_1.log.info(`Downing DockerCompose environment...`);
|
|
18
|
-
try {
|
|
19
|
-
yield (0, docker_compose_1.down)(Object.assign(Object.assign({}, (yield (0, default_docker_compose_options_1.defaultDockerComposeOptions)(options))), { commandOptions: commandOptions(downOptions) }));
|
|
20
|
-
logger_1.log.info(`Downed DockerCompose environment`);
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
const errorMessage = err.err || err.message || err;
|
|
25
|
-
logger_1.log.error(`Failed to down DockerCompose environment: ${errorMessage}`);
|
|
26
|
-
throw new Error(errorMessage);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
exports.dockerComposeDown = dockerComposeDown;
|
|
30
|
-
const commandOptions = (options) => {
|
|
31
|
-
const result = [];
|
|
32
|
-
if (options.removeVolumes) {
|
|
33
|
-
result.push("-v");
|
|
34
|
-
}
|
|
35
|
-
if (options.timeout) {
|
|
36
|
-
result.push("-t", `${options.timeout / 1000}`);
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.dockerComposePull = void 0;
|
|
13
|
-
const logger_1 = require("../../logger");
|
|
14
|
-
const docker_compose_1 = require("docker-compose");
|
|
15
|
-
const default_docker_compose_options_1 = require("../default-docker-compose-options");
|
|
16
|
-
const dockerComposePull = (options, services) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
-
try {
|
|
18
|
-
if (services) {
|
|
19
|
-
logger_1.log.info(`Pulling DockerCompose environment images "${services.join('", "')}"...`);
|
|
20
|
-
yield (0, docker_compose_1.pullMany)(services, yield (0, default_docker_compose_options_1.defaultDockerComposeOptions)(Object.assign(Object.assign({}, options), { logger: logger_1.pullLog })));
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
logger_1.log.info(`Pulling DockerCompose environment images...`);
|
|
24
|
-
yield (0, docker_compose_1.pullAll)(yield (0, default_docker_compose_options_1.defaultDockerComposeOptions)(Object.assign(Object.assign({}, options), { logger: logger_1.pullLog })));
|
|
25
|
-
}
|
|
26
|
-
logger_1.log.info(`Pulled DockerCompose environment`);
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
}
|
|
29
|
-
catch (err) {
|
|
30
|
-
const errorMessage = err.err || err.message || err || "";
|
|
31
|
-
logger_1.log.error(`Failed to pull DockerCompose environment images: ${errorMessage.trim()}`);
|
|
32
|
-
throw new Error(errorMessage);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
exports.dockerComposePull = dockerComposePull;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.dockerComposeStop = void 0;
|
|
13
|
-
const logger_1 = require("../../logger");
|
|
14
|
-
const docker_compose_1 = require("docker-compose");
|
|
15
|
-
const default_docker_compose_options_1 = require("../default-docker-compose-options");
|
|
16
|
-
const dockerComposeStop = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
-
logger_1.log.info(`Stopping DockerCompose environment...`);
|
|
18
|
-
try {
|
|
19
|
-
yield (0, docker_compose_1.stop)(yield (0, default_docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
20
|
-
logger_1.log.info(`Stopped DockerCompose environment`);
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
const errorMessage = err.err || err.message || err;
|
|
25
|
-
logger_1.log.error(`Failed to stop DockerCompose environment: ${errorMessage}`);
|
|
26
|
-
throw new Error(errorMessage);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
exports.dockerComposeStop = dockerComposeStop;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.dockerComposeUp = void 0;
|
|
13
|
-
const logger_1 = require("../../logger");
|
|
14
|
-
const docker_compose_1 = require("docker-compose");
|
|
15
|
-
const default_docker_compose_options_1 = require("../default-docker-compose-options");
|
|
16
|
-
const docker_compose_down_1 = require("./docker-compose-down");
|
|
17
|
-
const dockerComposeUp = (options, services) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
-
logger_1.log.info(`Upping DockerCompose environment...`);
|
|
19
|
-
try {
|
|
20
|
-
if (services) {
|
|
21
|
-
yield (0, docker_compose_1.upMany)(services, yield (0, default_docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
yield (0, docker_compose_1.upAll)(yield (0, default_docker_compose_options_1.defaultDockerComposeOptions)(options));
|
|
25
|
-
}
|
|
26
|
-
logger_1.log.info(`Upped DockerCompose environment`);
|
|
27
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
}
|
|
29
|
-
catch (err) {
|
|
30
|
-
const errorMessage = err.err || err.message || err || "";
|
|
31
|
-
logger_1.log.error(`Failed to up DockerCompose environment: ${errorMessage.trim()}`);
|
|
32
|
-
try {
|
|
33
|
-
yield (0, docker_compose_down_1.dockerComposeDown)(options, { removeVolumes: true, timeout: 0 });
|
|
34
|
-
}
|
|
35
|
-
catch (_a) {
|
|
36
|
-
logger_1.log.warn(`Failed to down DockerCompose environment after failed up`);
|
|
37
|
-
}
|
|
38
|
-
throw new Error(errorMessage);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
exports.dockerComposeUp = dockerComposeUp;
|
|
File without changes
|
/package/dist/src/docker-compose/{functions/container-name-resolver.js → container-name-resolver.js}
RENAMED
|
File without changes
|