testcontainers 9.10.1 → 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 +3 -1
- package/dist/src/docker/client/docker-client-types.d.ts +23 -0
- package/dist/src/docker/client/docker-client-types.js +2 -0
- package/dist/src/docker/client/docker-client.d.ts +1 -17
- package/dist/src/docker/client/docker-client.js +54 -23
- package/dist/src/docker/client/strategy/configuration-strategy.d.ts +1 -1
- package/dist/src/docker/client/strategy/configuration-strategy.js +2 -4
- package/dist/src/docker/client/strategy/docker-client-strategy.d.ts +1 -1
- package/dist/src/docker/client/strategy/npipe-socket-strategy.d.ts +1 -1
- package/dist/src/docker/client/strategy/npipe-socket-strategy.js +1 -5
- package/dist/src/docker/client/strategy/rootless-unix-socket-strategy.d.ts +1 -1
- package/dist/src/docker/client/strategy/rootless-unix-socket-strategy.js +1 -2
- package/dist/src/docker/client/strategy/testcontainers-host-strategy.d.ts +1 -1
- package/dist/src/docker/client/strategy/testcontainers-host-strategy.js +2 -7
- package/dist/src/docker/client/strategy/unix-socket-strategy.d.ts +1 -1
- package/dist/src/docker/client/strategy/unix-socket-strategy.js +1 -5
- package/dist/src/docker/functions/container/create-container.d.ts +1 -1
- package/dist/src/docker/functions/container/create-container.js +2 -2
- package/dist/src/docker/functions/create-labels.d.ts +1 -2
- package/dist/src/docker/functions/create-labels.js +2 -3
- package/dist/src/docker/functions/image/build-image.d.ts +2 -1
- package/dist/src/docker/functions/image/build-image.js +2 -2
- package/dist/src/docker/functions/network/create-network.d.ts +1 -1
- package/dist/src/docker/functions/network/create-network.js +2 -2
- package/dist/src/docker/remote-docker-unix-socket-path.d.ts +2 -2
- package/dist/src/docker/types.d.ts +3 -0
- 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 +8 -9
- 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/file-lock.d.ts +1 -0
- package/dist/src/file-lock.js +47 -0
- package/dist/src/generic-container/generic-container-builder.d.ts +4 -1
- package/dist/src/generic-container/generic-container-builder.js +4 -5
- package/dist/src/generic-container/generic-container.d.ts +8 -4
- package/dist/src/generic-container/generic-container.js +75 -72
- 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/index.d.ts +1 -1
- package/dist/src/modules/abstract-started-container.d.ts +2 -1
- package/dist/src/modules/abstract-started-container.js +5 -0
- package/dist/src/modules/selenium/selenium-container.js +11 -8
- package/dist/src/network.js +3 -3
- package/dist/src/port-forwarder.js +2 -2
- package/dist/src/reaper.d.ts +5 -14
- package/dist/src/reaper.js +124 -114
- package/dist/src/system-info.d.ts +2 -0
- package/dist/src/system-info.js +38 -6
- package/dist/src/test-container.d.ts +3 -5
- 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 +3 -1
- package/dist/src/docker/session-id.d.ts +0 -1
- package/dist/src/docker/session-id.js +0 -5
- 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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testcontainers",
|
|
3
3
|
"author": "Cristian Greco",
|
|
4
|
-
"version": "9.
|
|
4
|
+
"version": "9.12.0-beta.0",
|
|
5
5
|
"main": "dist/src/index",
|
|
6
6
|
"types": "dist/src/index",
|
|
7
7
|
"keywords": [
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"dockerode": "^3.3.5",
|
|
48
48
|
"get-port": "^5.1.1",
|
|
49
49
|
"node-fetch": "^2.6.12",
|
|
50
|
+
"proper-lockfile": "^4.1.2",
|
|
50
51
|
"properties-reader": "^2.2.0",
|
|
51
52
|
"ssh-remote-port-forward": "^1.0.4",
|
|
52
53
|
"tar-fs": "^2.1.1",
|
|
@@ -61,6 +62,7 @@
|
|
|
61
62
|
"@types/node": "^18.16.19",
|
|
62
63
|
"@types/node-fetch": "^2.6.4",
|
|
63
64
|
"@types/pg": "^8.10.2",
|
|
65
|
+
"@types/proper-lockfile": "^4.1.2",
|
|
64
66
|
"@types/properties-reader": "^2.1.1",
|
|
65
67
|
"@types/selenium-webdriver": "^4.1.15",
|
|
66
68
|
"@types/tar-fs": "^2.0.1",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import Dockerode, { DockerOptions } from "dockerode";
|
|
3
|
+
import { HostIps } from "../lookup-host-ips";
|
|
4
|
+
import { SystemInfo } from "../../system-info";
|
|
5
|
+
import { ContainerRuntime } from "../types";
|
|
6
|
+
import { DockerComposeClient } from "../../docker-compose/docker-compose-client";
|
|
7
|
+
export type DockerClient = PartialDockerClient & {
|
|
8
|
+
sessionId: string;
|
|
9
|
+
};
|
|
10
|
+
export type PartialDockerClient = DockerClientStrategyResult & {
|
|
11
|
+
dockerode: Dockerode;
|
|
12
|
+
dockerComposeClient: DockerComposeClient;
|
|
13
|
+
host: string;
|
|
14
|
+
containerRuntime: ContainerRuntime;
|
|
15
|
+
hostIps: HostIps;
|
|
16
|
+
info: SystemInfo;
|
|
17
|
+
};
|
|
18
|
+
export type DockerClientStrategyResult = {
|
|
19
|
+
uri: string;
|
|
20
|
+
dockerOptions: DockerOptions;
|
|
21
|
+
composeEnvironment: NodeJS.ProcessEnv;
|
|
22
|
+
allowUserOverrides: boolean;
|
|
23
|
+
};
|
|
@@ -1,18 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import Dockerode from "dockerode";
|
|
3
|
-
import { HostIps } from "../lookup-host-ips";
|
|
4
|
-
import { SystemInfo } from "../../system-info";
|
|
5
|
-
import { ContainerRuntime } from "../types";
|
|
6
|
-
export type DockerClient = DockerClientStrategyResult & {
|
|
7
|
-
host: string;
|
|
8
|
-
containerRuntime: ContainerRuntime;
|
|
9
|
-
hostIps: HostIps;
|
|
10
|
-
info: SystemInfo;
|
|
11
|
-
};
|
|
12
|
-
export type DockerClientStrategyResult = {
|
|
13
|
-
uri: string;
|
|
14
|
-
dockerode: Dockerode;
|
|
15
|
-
composeEnvironment: NodeJS.ProcessEnv;
|
|
16
|
-
allowUserOverrides: boolean;
|
|
17
|
-
};
|
|
1
|
+
import { DockerClient } from "./docker-client-types";
|
|
18
2
|
export declare function getDockerClient(): Promise<DockerClient>;
|
|
@@ -8,8 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.getDockerClient = void 0;
|
|
16
|
+
const dockerode_1 = __importDefault(require("dockerode"));
|
|
13
17
|
const logger_1 = require("../../logger");
|
|
14
18
|
const lookup_host_ips_1 = require("../lookup-host-ips");
|
|
15
19
|
const system_info_1 = require("../../system-info");
|
|
@@ -21,26 +25,32 @@ const configuration_strategy_1 = require("./strategy/configuration-strategy");
|
|
|
21
25
|
const unix_socket_strategy_1 = require("./strategy/unix-socket-strategy");
|
|
22
26
|
const npipe_socket_strategy_1 = require("./strategy/npipe-socket-strategy");
|
|
23
27
|
const testcontainers_host_strategy_1 = require("./strategy/testcontainers-host-strategy");
|
|
28
|
+
const uuid_1 = require("../../uuid");
|
|
29
|
+
const file_lock_1 = require("../../file-lock");
|
|
30
|
+
const reaper_1 = require("../../reaper");
|
|
31
|
+
const docker_compose_client_1 = require("../../docker-compose/docker-compose-client");
|
|
24
32
|
let dockerClient;
|
|
33
|
+
const strategies = [
|
|
34
|
+
new testcontainers_host_strategy_1.TestcontainersHostStrategy(),
|
|
35
|
+
new configuration_strategy_1.ConfigurationStrategy(),
|
|
36
|
+
new unix_socket_strategy_1.UnixSocketStrategy(),
|
|
37
|
+
new rootless_unix_socket_strategy_1.RootlessUnixSocketStrategy(),
|
|
38
|
+
new npipe_socket_strategy_1.NpipeSocketStrategy(),
|
|
39
|
+
];
|
|
25
40
|
function getDockerClient() {
|
|
26
41
|
return __awaiter(this, void 0, void 0, function* () {
|
|
27
42
|
if (dockerClient) {
|
|
28
43
|
return dockerClient;
|
|
29
44
|
}
|
|
30
|
-
const strategies = [
|
|
31
|
-
new testcontainers_host_strategy_1.TestcontainersHostStrategy(),
|
|
32
|
-
new configuration_strategy_1.ConfigurationStrategy(),
|
|
33
|
-
new unix_socket_strategy_1.UnixSocketStrategy(),
|
|
34
|
-
new rootless_unix_socket_strategy_1.RootlessUnixSocketStrategy(),
|
|
35
|
-
new npipe_socket_strategy_1.NpipeSocketStrategy(),
|
|
36
|
-
];
|
|
37
45
|
for (const strategy of strategies) {
|
|
38
46
|
try {
|
|
39
|
-
const
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
return dockerClient;
|
|
47
|
+
const initialisedDockerClient = yield initialiseStrategy(strategy);
|
|
48
|
+
if (!initialisedDockerClient) {
|
|
49
|
+
continue;
|
|
43
50
|
}
|
|
51
|
+
dockerClient = initialisedDockerClient;
|
|
52
|
+
logDockerClient(strategy.getName(), dockerClient);
|
|
53
|
+
return dockerClient;
|
|
44
54
|
}
|
|
45
55
|
catch (err) {
|
|
46
56
|
logger_1.log.warn(`Docker client strategy "${strategy.getName()}" threw: "${err}"`);
|
|
@@ -50,30 +60,51 @@ function getDockerClient() {
|
|
|
50
60
|
});
|
|
51
61
|
}
|
|
52
62
|
exports.getDockerClient = getDockerClient;
|
|
63
|
+
function initialiseStrategy(strategy) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
65
|
+
const partialDockerClient = yield tryToCreateDockerClient(strategy);
|
|
66
|
+
if (!partialDockerClient) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
yield (0, file_lock_1.withFileLock)("tc.lock", () => __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
var _a;
|
|
71
|
+
const dockerode = new dockerode_1.default(partialDockerClient.dockerOptions);
|
|
72
|
+
const containers = yield dockerode.listContainers();
|
|
73
|
+
const reaperContainer = containers.find((container) => container.Labels["org.testcontainers.ryuk"] === "true");
|
|
74
|
+
const sessionId = (_a = reaperContainer === null || reaperContainer === void 0 ? void 0 : reaperContainer.Labels["org.testcontainers.session-id"]) !== null && _a !== void 0 ? _a : new uuid_1.RandomUuid().nextUuid();
|
|
75
|
+
const dockerOptions = Object.assign(Object.assign({}, partialDockerClient.dockerOptions), { headers: Object.assign(Object.assign({}, partialDockerClient.dockerOptions.headers), { "x-tc-sid": sessionId }) });
|
|
76
|
+
dockerClient = Object.assign(Object.assign({}, partialDockerClient), { sessionId,
|
|
77
|
+
dockerOptions, dockerode: new dockerode_1.default(dockerOptions) });
|
|
78
|
+
yield (0, reaper_1.startReaper)(dockerClient, sessionId, reaperContainer);
|
|
79
|
+
yield (0, reaper_1.registerSessionIdForCleanup)(sessionId);
|
|
80
|
+
}));
|
|
81
|
+
return dockerClient;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
53
84
|
function tryToCreateDockerClient(strategy) {
|
|
85
|
+
var _a;
|
|
54
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
55
87
|
if (strategy.init) {
|
|
56
88
|
yield strategy.init();
|
|
57
89
|
}
|
|
58
90
|
if (strategy.isApplicable()) {
|
|
59
|
-
const
|
|
60
|
-
logger_1.log.debug(`Testing Docker client strategy "${strategy.getName()}" with URI "${uri}"...`);
|
|
91
|
+
const dockerClientStrategyResult = yield strategy.getDockerClient();
|
|
92
|
+
logger_1.log.debug(`Testing Docker client strategy "${strategy.getName()}" with URI "${dockerClientStrategyResult.uri}"...`);
|
|
93
|
+
const dockerode = new dockerode_1.default(dockerClientStrategyResult.dockerOptions);
|
|
61
94
|
if (yield isDockerDaemonReachable(dockerode)) {
|
|
62
95
|
const info = yield (0, system_info_1.getSystemInfo)(dockerode);
|
|
63
|
-
const containerRuntime = uri.includes("podman.sock")
|
|
64
|
-
|
|
96
|
+
const containerRuntime = dockerClientStrategyResult.uri.includes("podman.sock")
|
|
97
|
+
? "podman"
|
|
98
|
+
: "docker";
|
|
99
|
+
const host = yield (0, resolve_host_1.resolveHost)(dockerode, containerRuntime, info.dockerInfo.indexServerAddress, dockerClientStrategyResult.uri, dockerClientStrategyResult.allowUserOverrides);
|
|
65
100
|
const hostIps = yield (0, lookup_host_ips_1.lookupHostIps)(host);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
containerRuntime,
|
|
101
|
+
const dockerComposeClient = yield (0, docker_compose_client_1.getDockerComposeClient)((_a = info.dockerComposeInfo) === null || _a === void 0 ? void 0 : _a.compatability);
|
|
102
|
+
return Object.assign(Object.assign({}, dockerClientStrategyResult), { containerRuntime,
|
|
69
103
|
host,
|
|
70
104
|
hostIps,
|
|
71
|
-
dockerode,
|
|
72
105
|
info,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
};
|
|
76
|
-
return dockerClient;
|
|
106
|
+
dockerode,
|
|
107
|
+
dockerComposeClient });
|
|
77
108
|
}
|
|
78
109
|
else {
|
|
79
110
|
logger_1.log.warn(`Docker client strategy "${strategy.getName()}" does not work`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DockerClientStrategyResult } from "../docker-client";
|
|
1
|
+
import { DockerClientStrategyResult } from "../docker-client-types";
|
|
2
2
|
import { DockerClientStrategy } from "./docker-client-strategy";
|
|
3
3
|
export declare class ConfigurationStrategy implements DockerClientStrategy {
|
|
4
4
|
private dockerHost;
|
|
@@ -14,8 +14,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.ConfigurationStrategy = void 0;
|
|
16
16
|
const docker_client_config_1 = require("../docker-client-config");
|
|
17
|
-
const dockerode_1 = __importDefault(require("dockerode"));
|
|
18
|
-
const session_id_1 = require("../../session-id");
|
|
19
17
|
const url_1 = require("url");
|
|
20
18
|
const fs_1 = require("fs");
|
|
21
19
|
const path_1 = __importDefault(require("path"));
|
|
@@ -32,7 +30,7 @@ class ConfigurationStrategy {
|
|
|
32
30
|
}
|
|
33
31
|
getDockerClient() {
|
|
34
32
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
const dockerOptions = {
|
|
33
|
+
const dockerOptions = {};
|
|
36
34
|
const { pathname, hostname, port } = new url_1.URL(this.dockerHost);
|
|
37
35
|
if (hostname !== "") {
|
|
38
36
|
dockerOptions.host = hostname;
|
|
@@ -48,7 +46,7 @@ class ConfigurationStrategy {
|
|
|
48
46
|
}
|
|
49
47
|
return {
|
|
50
48
|
uri: this.dockerHost,
|
|
51
|
-
|
|
49
|
+
dockerOptions,
|
|
52
50
|
composeEnvironment: {
|
|
53
51
|
DOCKER_HOST: this.dockerHost,
|
|
54
52
|
DOCKER_TLS_VERIFY: this.dockerTlsVerify,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DockerClientStrategyResult } from "../docker-client";
|
|
1
|
+
import { DockerClientStrategyResult } from "../docker-client-types";
|
|
2
2
|
import { DockerClientStrategy } from "./docker-client-strategy";
|
|
3
3
|
export declare class NpipeSocketStrategy implements DockerClientStrategy {
|
|
4
4
|
getDockerClient(): Promise<DockerClientStrategyResult>;
|
|
@@ -8,18 +8,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.NpipeSocketStrategy = void 0;
|
|
16
|
-
const dockerode_1 = __importDefault(require("dockerode"));
|
|
17
13
|
class NpipeSocketStrategy {
|
|
18
14
|
getDockerClient() {
|
|
19
15
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20
16
|
return {
|
|
21
17
|
uri: "npipe:////./pipe/docker_engine",
|
|
22
|
-
|
|
18
|
+
dockerOptions: { socketPath: "//./pipe/docker_engine" },
|
|
23
19
|
composeEnvironment: {},
|
|
24
20
|
allowUserOverrides: true,
|
|
25
21
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { DockerClientStrategyResult } from "../docker-client";
|
|
2
|
+
import { DockerClientStrategyResult } from "../docker-client-types";
|
|
3
3
|
import { DockerClientStrategy } from "./docker-client-strategy";
|
|
4
4
|
export declare class RootlessUnixSocketStrategy implements DockerClientStrategy {
|
|
5
5
|
private readonly platform;
|
|
@@ -17,7 +17,6 @@ const type_guards_1 = require("../../../type-guards");
|
|
|
17
17
|
const fs_1 = require("fs");
|
|
18
18
|
const path_1 = __importDefault(require("path"));
|
|
19
19
|
const os_1 = __importDefault(require("os"));
|
|
20
|
-
const dockerode_1 = __importDefault(require("dockerode"));
|
|
21
20
|
class RootlessUnixSocketStrategy {
|
|
22
21
|
constructor(platform = process.platform, env = process.env) {
|
|
23
22
|
this.platform = platform;
|
|
@@ -62,7 +61,7 @@ class RootlessUnixSocketStrategy {
|
|
|
62
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
63
62
|
return {
|
|
64
63
|
uri: `unix://${this.socketPath}`,
|
|
65
|
-
|
|
64
|
+
dockerOptions: { socketPath: this.socketPath },
|
|
66
65
|
composeEnvironment: {},
|
|
67
66
|
allowUserOverrides: true,
|
|
68
67
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DockerClientStrategyResult } from "../docker-client";
|
|
1
|
+
import { DockerClientStrategyResult } from "../docker-client-types";
|
|
2
2
|
import { DockerClientStrategy } from "./docker-client-strategy";
|
|
3
3
|
export declare class TestcontainersHostStrategy implements DockerClientStrategy {
|
|
4
4
|
private host;
|
|
@@ -8,14 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.TestcontainersHostStrategy = void 0;
|
|
16
13
|
const docker_client_config_1 = require("../docker-client-config");
|
|
17
|
-
const dockerode_1 = __importDefault(require("dockerode"));
|
|
18
|
-
const session_id_1 = require("../../session-id");
|
|
19
14
|
const url_1 = require("url");
|
|
20
15
|
class TestcontainersHostStrategy {
|
|
21
16
|
init() {
|
|
@@ -28,13 +23,13 @@ class TestcontainersHostStrategy {
|
|
|
28
23
|
}
|
|
29
24
|
getDockerClient() {
|
|
30
25
|
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
const dockerOptions = {
|
|
26
|
+
const dockerOptions = {};
|
|
32
27
|
const { hostname, port } = new url_1.URL(this.host);
|
|
33
28
|
dockerOptions.host = hostname;
|
|
34
29
|
dockerOptions.port = port;
|
|
35
30
|
return {
|
|
36
31
|
uri: this.host,
|
|
37
|
-
|
|
32
|
+
dockerOptions,
|
|
38
33
|
composeEnvironment: {
|
|
39
34
|
DOCKER_HOST: this.host,
|
|
40
35
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DockerClientStrategyResult } from "../docker-client";
|
|
1
|
+
import { DockerClientStrategyResult } from "../docker-client-types";
|
|
2
2
|
import { DockerClientStrategy } from "./docker-client-strategy";
|
|
3
3
|
export declare class UnixSocketStrategy implements DockerClientStrategy {
|
|
4
4
|
getDockerClient(): Promise<DockerClientStrategyResult>;
|
|
@@ -8,19 +8,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.UnixSocketStrategy = void 0;
|
|
16
|
-
const dockerode_1 = __importDefault(require("dockerode"));
|
|
17
13
|
const fs_1 = require("fs");
|
|
18
14
|
class UnixSocketStrategy {
|
|
19
15
|
getDockerClient() {
|
|
20
16
|
return __awaiter(this, void 0, void 0, function* () {
|
|
21
17
|
return {
|
|
22
18
|
uri: "unix:///var/run/docker.sock",
|
|
23
|
-
|
|
19
|
+
dockerOptions: { socketPath: "/var/run/docker.sock" },
|
|
24
20
|
composeEnvironment: {},
|
|
25
21
|
allowUserOverrides: true,
|
|
26
22
|
};
|
|
@@ -28,4 +28,4 @@ export type CreateContainerOptions = {
|
|
|
28
28
|
resourcesQuota?: ResourcesQuota;
|
|
29
29
|
sharedMemorySize?: number;
|
|
30
30
|
};
|
|
31
|
-
export declare const createContainer: (options: CreateContainerOptions) => Promise<Dockerode.Container>;
|
|
31
|
+
export declare const createContainer: (sessionId: string, options: CreateContainerOptions) => Promise<Dockerode.Container>;
|
|
@@ -14,7 +14,7 @@ const logger_1 = require("../../../logger");
|
|
|
14
14
|
const docker_client_1 = require("../../client/docker-client");
|
|
15
15
|
const port_1 = require("../../../port");
|
|
16
16
|
const create_labels_1 = require("../create-labels");
|
|
17
|
-
const createContainer = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
const createContainer = (sessionId, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
18
|
var _a, _b;
|
|
19
19
|
try {
|
|
20
20
|
logger_1.log.info(`Creating container for image "${options.imageName}"...`);
|
|
@@ -27,7 +27,7 @@ const createContainer = (options) => __awaiter(void 0, void 0, void 0, function*
|
|
|
27
27
|
ExposedPorts: getExposedPorts(options.exposedPorts),
|
|
28
28
|
Cmd: options.command,
|
|
29
29
|
Entrypoint: options.entrypoint,
|
|
30
|
-
Labels: (0, create_labels_1.createLabels)(
|
|
30
|
+
Labels: (0, create_labels_1.createLabels)(sessionId, options.reusable, options.labels),
|
|
31
31
|
Healthcheck: getHealthCheck(options.healthCheck),
|
|
32
32
|
WorkingDir: options.workingDir,
|
|
33
33
|
HostConfig: {
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { DockerImageName } from "../../docker-image-name";
|
|
2
1
|
import { Labels } from "../types";
|
|
3
|
-
export declare const createLabels: (
|
|
2
|
+
export declare const createLabels: (sessionId: string, reusable: boolean, extraLabels?: Labels) => Labels;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createLabels = void 0;
|
|
4
|
-
const session_id_1 = require("../session-id");
|
|
5
4
|
const labels_1 = require("../../labels");
|
|
6
5
|
const package_json_1 = require("../../../package.json");
|
|
7
|
-
const createLabels = (
|
|
6
|
+
const createLabels = (sessionId, reusable, extraLabels = {}) => {
|
|
8
7
|
const labels = Object.assign(Object.assign({}, extraLabels), { [labels_1.LABEL_TESTCONTAINERS]: "true", [labels_1.LABEL_TESTCONTAINERS_LANG]: "node", [labels_1.LABEL_TESTCONTAINERS_VERSION]: package_json_1.version });
|
|
9
8
|
if (!reusable) {
|
|
10
|
-
labels[labels_1.LABEL_TESTCONTAINERS_SESSION_ID] =
|
|
9
|
+
labels[labels_1.LABEL_TESTCONTAINERS_SESSION_ID] = sessionId;
|
|
11
10
|
}
|
|
12
11
|
return labels;
|
|
13
12
|
};
|
|
@@ -9,5 +9,6 @@ export type BuildImageOptions = {
|
|
|
9
9
|
pullPolicy: PullPolicy;
|
|
10
10
|
registryConfig: RegistryConfig;
|
|
11
11
|
cache: boolean;
|
|
12
|
+
deleteOnExit: boolean;
|
|
12
13
|
};
|
|
13
|
-
export declare const buildImage: (options: BuildImageOptions) => Promise<void>;
|
|
14
|
+
export declare const buildImage: (sessionId: string, options: BuildImageOptions) => Promise<void>;
|
|
@@ -21,7 +21,7 @@ const create_labels_1 = require("../create-labels");
|
|
|
21
21
|
const path_1 = __importDefault(require("path"));
|
|
22
22
|
const fs_1 = require("fs");
|
|
23
23
|
const dockerignore_1 = __importDefault(require("@balena/dockerignore"));
|
|
24
|
-
const buildImage = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
const buildImage = (sessionId, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
25
25
|
try {
|
|
26
26
|
logger_1.log.info(`Building image "${options.imageName.toString()}" with context "${options.context}"...`);
|
|
27
27
|
const isDockerIgnored = yield createIsDockerIgnoredFunction(options.context);
|
|
@@ -42,7 +42,7 @@ const buildImage = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
42
42
|
nocache: !options.cache,
|
|
43
43
|
buildargs: options.buildArgs,
|
|
44
44
|
t: options.imageName.toString(),
|
|
45
|
-
labels: (0, create_labels_1.createLabels)(
|
|
45
|
+
labels: (0, create_labels_1.createLabels)(sessionId, !options.deleteOnExit),
|
|
46
46
|
registryconfig: options.registryConfig,
|
|
47
47
|
pull: options.pullPolicy.shouldPull() ? "true" : undefined,
|
|
48
48
|
};
|
|
@@ -13,4 +13,4 @@ export type CreateNetworkOptions = {
|
|
|
13
13
|
[key: string]: string;
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
|
-
export declare const createNetwork: (options: CreateNetworkOptions) => Promise<string>;
|
|
16
|
+
export declare const createNetwork: (sessionId: string, options: CreateNetworkOptions) => Promise<string>;
|
|
@@ -13,7 +13,7 @@ exports.createNetwork = void 0;
|
|
|
13
13
|
const logger_1 = require("../../../logger");
|
|
14
14
|
const docker_client_1 = require("../../client/docker-client");
|
|
15
15
|
const create_labels_1 = require("../create-labels");
|
|
16
|
-
const createNetwork = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
const createNetwork = (sessionId, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
17
|
try {
|
|
18
18
|
logger_1.log.info(`Creating network "${options.name}"...`);
|
|
19
19
|
const { dockerode } = yield (0, docker_client_1.getDockerClient)();
|
|
@@ -26,7 +26,7 @@ const createNetwork = (options) => __awaiter(void 0, void 0, void 0, function* (
|
|
|
26
26
|
Ingress: options.ingress,
|
|
27
27
|
EnableIPv6: options.enableIPv6,
|
|
28
28
|
Options: options.options,
|
|
29
|
-
Labels: Object.assign(Object.assign({}, options.labels), (0, create_labels_1.createLabels)(false)),
|
|
29
|
+
Labels: Object.assign(Object.assign({}, options.labels), (0, create_labels_1.createLabels)(sessionId, false)),
|
|
30
30
|
});
|
|
31
31
|
logger_1.log.info(`Created network "${options.name}"`);
|
|
32
32
|
return network.id;
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
/// <reference types="node" />
|
|
4
4
|
/// <reference types="node" />
|
|
5
5
|
/// <reference types="node" />
|
|
6
|
-
import {
|
|
7
|
-
export declare const getRemoteDockerUnixSocketPath: (dockerClient:
|
|
6
|
+
import { PartialDockerClient } from "./client/docker-client-types";
|
|
7
|
+
export declare const getRemoteDockerUnixSocketPath: (dockerClient: PartialDockerClient, platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv) => string;
|
|
@@ -14,11 +14,14 @@ export type BindMount = {
|
|
|
14
14
|
export type FileToCopy = {
|
|
15
15
|
source: string;
|
|
16
16
|
target: string;
|
|
17
|
+
mode?: number;
|
|
17
18
|
};
|
|
19
|
+
export type DirectoryToCopy = FileToCopy;
|
|
18
20
|
export type Content = string | Buffer | Readable;
|
|
19
21
|
export type ContentToCopy = {
|
|
20
22
|
content: Content;
|
|
21
23
|
target: string;
|
|
24
|
+
mode?: number;
|
|
22
25
|
};
|
|
23
26
|
export type TmpFs = {
|
|
24
27
|
[dir in string]: string;
|
|
@@ -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;
|