@forge/cli-shared 8.15.3-next.3 → 8.16.0-next.4
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/CHANGELOG.md +11 -0
- package/out/graphql/graphql-types.d.ts +367 -80
- package/out/graphql/graphql-types.d.ts.map +1 -1
- package/out/graphql/graphql-types.js +94 -35
- package/out/tunnel/docker-compose-lifecycle.d.ts +9 -2
- package/out/tunnel/docker-compose-lifecycle.d.ts.map +1 -1
- package/out/tunnel/docker-compose-lifecycle.js +212 -23
- package/out/tunnel/tunnel-options.d.ts +2 -0
- package/out/tunnel/tunnel-options.d.ts.map +1 -1
- package/out/tunnel/tunnel-options.js +3 -1
- package/out/ui/text.d.ts +1 -0
- package/out/ui/text.d.ts.map +1 -1
- package/out/ui/text.js +2 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,wBAAwB,8BAA8B,CAAC;AACpE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAYvD,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAC1C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,qBAAa,2BAA4B,SAAQ,SAAS;gBAC5C,UAAU,EAAE,MAAM;CAG/B;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,wBAAyB,SAAQ,SAAS;gBACzC,GAAG,CAAC,EAAE,KAAK;CAGxB;AAED,qBAAa,mCAAoC,SAAQ,SAAS;gBACpD,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,+BAAgC,SAAQ,SAAS;gBAChD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,sCAAuC,SAAQ,SAAS;gBACvD,YAAY,EAAE,MAAM;CAGjC;AAED,qBAAa,yBAA0B,SAAQ,SAAS;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAMD,eAAO,MAAM,mCAAmC,8BAAqC,MAAM,SAAS,MAAM,oCAgFzG,CAAC;AAuFF,eAAO,MAAM,uBAAuB,gBAAuB,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAAiC,MAAM,cAAc,MAAM,UAAU,MAAM,kBAc9G,CAAC;AAOF,eAAO,MAAM,qBAAqB,0BACT,MAAM,cACjB,MAAM,UACV,MAAM,KACb,QAAQ,MAAM,EAAE,CAgBlB,CAAC;AA8LF,eAAO,MAAM,sBAAsB,eACrB,UAAU,UACd,MAAM,iBACC,OAAO,MAAM,EAAE,MAAM,CAAC,kBAmCtC,CAAC;AAgCF,eAAO,MAAM,2BAA2B,iBAAwB,YAAY,kBAW3E,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processDockerAuthentication = exports.stopDockerComposeStack = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerAuthenticationError = exports.CannotUseBothImageAndBuildContextError = exports.MissingImageOrBuildContextError = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
|
|
3
|
+
exports.processDockerAuthentication = exports.stopDockerComposeStack = exports.determineComposeFlags = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerAuthenticationError = exports.CannotUseBothImageAndBuildContextError = exports.MissingImageOrBuildContextError = exports.UnableToParseDockerComposeFileError = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.STARTUP_TIMER_BUFFER_MS = exports.STARTUP_TIMER_MS = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const fs = tslib_1.__importStar(require("fs"));
|
|
6
6
|
const path = tslib_1.__importStar(require("path"));
|
|
7
7
|
const yaml = tslib_1.__importStar(require("yaml"));
|
|
8
|
+
const http = tslib_1.__importStar(require("http"));
|
|
8
9
|
const docker_compose_1 = require("docker-compose");
|
|
9
10
|
const shared_1 = require("../shared");
|
|
10
11
|
const text_1 = require("../ui/text");
|
|
@@ -14,6 +15,14 @@ exports.PROXY_SIDECAR_VOLUME_DIR = '/forge/container';
|
|
|
14
15
|
exports.CONTAINER_SERVICE_ASSETS = '.container-service-assets';
|
|
15
16
|
exports.K8S_AUTH_TOKEN_FILENAME = 'local-account';
|
|
16
17
|
const PROXY_SIDECAR_SERVICE_NAME = 'proxy-sidecar';
|
|
18
|
+
const LIFECYCLE_PATTERNS = [
|
|
19
|
+
/Container .* (Starting|Started|Stopping|Stopped|Creating|Created|Recreated)/,
|
|
20
|
+
/Network .* (Creating|Created|Removing|Removed)/,
|
|
21
|
+
/Volume .* (Creating|Created|Removing|Removed)/,
|
|
22
|
+
/\[[\+\-]\] Running/
|
|
23
|
+
];
|
|
24
|
+
exports.STARTUP_TIMER_MS = 30 * 1000;
|
|
25
|
+
exports.STARTUP_TIMER_BUFFER_MS = 5 * 1000;
|
|
17
26
|
class InvalidContainerServicePort extends shared_1.UserError {
|
|
18
27
|
constructor(serviceKey) {
|
|
19
28
|
super(text_1.Text.error.invalidServicePort(serviceKey));
|
|
@@ -32,6 +41,12 @@ class DockerUnableToStartError extends shared_1.UserError {
|
|
|
32
41
|
}
|
|
33
42
|
}
|
|
34
43
|
exports.DockerUnableToStartError = DockerUnableToStartError;
|
|
44
|
+
class UnableToParseDockerComposeFileError extends shared_1.UserError {
|
|
45
|
+
constructor(serviceKey, err) {
|
|
46
|
+
super(text_1.Text.tunnel.UnableToParseDockerComposeFileError(serviceKey, err?.message ?? 'Unknown Error Occurred.'));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.UnableToParseDockerComposeFileError = UnableToParseDockerComposeFileError;
|
|
35
50
|
class MissingImageOrBuildContextError extends shared_1.UserError {
|
|
36
51
|
constructor(containerKey) {
|
|
37
52
|
super(text_1.Text.tunnel.missingImageOrBuildContext(containerKey));
|
|
@@ -52,7 +67,7 @@ class DockerAuthenticationError extends shared_1.UserError {
|
|
|
52
67
|
exports.DockerAuthenticationError = DockerAuthenticationError;
|
|
53
68
|
const generateContainersDockerComposeFile = async (services, appId, envId) => {
|
|
54
69
|
const filesGenerated = {};
|
|
55
|
-
for (const service of services) {
|
|
70
|
+
for (const [serviceIndex, service] of services.entries()) {
|
|
56
71
|
const { key: serviceKey, containers } = service;
|
|
57
72
|
const containersWithTunnelConfig = containers.filter((container) => !!container.tunnel);
|
|
58
73
|
if (containersWithTunnelConfig.length > 0) {
|
|
@@ -72,12 +87,17 @@ const generateContainersDockerComposeFile = async (services, appId, envId) => {
|
|
|
72
87
|
...container.tunnel?.docker,
|
|
73
88
|
depends_on: [PROXY_SIDECAR_SERVICE_NAME]
|
|
74
89
|
};
|
|
75
|
-
if (config.build?.context
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
90
|
+
if (config.build?.context) {
|
|
91
|
+
config.build.context = adjustFilePath(config.build.context);
|
|
92
|
+
}
|
|
93
|
+
if (config.volumes) {
|
|
94
|
+
config.volumes = config.volumes.map((volume) => adjustFilePath(volume));
|
|
95
|
+
}
|
|
96
|
+
if (config.develop?.watch) {
|
|
97
|
+
config.develop.watch = config.develop.watch.map((watchConfig) => ({
|
|
98
|
+
...watchConfig,
|
|
99
|
+
path: adjustFilePath(watchConfig.path)
|
|
100
|
+
}));
|
|
81
101
|
}
|
|
82
102
|
const envArray = container?.tunnel?.docker.environment ?? [];
|
|
83
103
|
const filteredEnvArray = envArray.filter((envVar) => !envVar.startsWith('FORGE_EGRESS_PROXY_URL='));
|
|
@@ -85,10 +105,11 @@ const generateContainersDockerComposeFile = async (services, appId, envId) => {
|
|
|
85
105
|
config.environment = filteredEnvArray;
|
|
86
106
|
return [container.key, config];
|
|
87
107
|
}));
|
|
108
|
+
const healthEndpointPath = containersWithTunnelConfig[0].health.route.path;
|
|
88
109
|
const dockerComposeConfig = {
|
|
89
110
|
services: {
|
|
90
111
|
...containerConfig,
|
|
91
|
-
...(await getProxySidecarConfig(serviceKey, Object.keys(containerConfig), port, appId, envId))
|
|
112
|
+
...(await getProxySidecarConfig(serviceKey, Object.keys(containerConfig), port, appId, envId, serviceIndex, healthEndpointPath))
|
|
92
113
|
}
|
|
93
114
|
};
|
|
94
115
|
const yamlString = yaml.stringify(dockerComposeConfig);
|
|
@@ -100,7 +121,17 @@ const generateContainersDockerComposeFile = async (services, appId, envId) => {
|
|
|
100
121
|
return filesGenerated;
|
|
101
122
|
};
|
|
102
123
|
exports.generateContainersDockerComposeFile = generateContainersDockerComposeFile;
|
|
103
|
-
const
|
|
124
|
+
const adjustFilePath = (filePath) => {
|
|
125
|
+
if (path.isAbsolute(filePath)) {
|
|
126
|
+
return filePath;
|
|
127
|
+
}
|
|
128
|
+
let adjusted = filePath;
|
|
129
|
+
if (adjusted.startsWith('./')) {
|
|
130
|
+
adjusted = adjusted.slice(2);
|
|
131
|
+
}
|
|
132
|
+
return path.join('..', adjusted);
|
|
133
|
+
};
|
|
134
|
+
const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, envId, serviceIndex, healthEndpointPath) => {
|
|
104
135
|
let fopBaseUrl = 'https://forge-outbound-proxy.services.atlassian.com';
|
|
105
136
|
let jwksUrl = 'https://forge.cdn.prod.atlassian-dev.net/.well-known/jwks.json';
|
|
106
137
|
let proxySidecarImage = 'forge-ecr.services.atlassian.com/forge-platform/proxy-sidecar:latest';
|
|
@@ -124,10 +155,14 @@ const getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, env
|
|
|
124
155
|
`ENV_ID=ari:cloud:ecosystem::environment/${appIdShort}/${envId}`,
|
|
125
156
|
`JWKS_URL=${jwksUrl}`,
|
|
126
157
|
`IS_LOCAL_DEV=true`,
|
|
127
|
-
`K8S_AUTH_TOKEN_PATH=${exports.PROXY_SIDECAR_VOLUME_DIR}/${exports.K8S_AUTH_TOKEN_FILENAME}
|
|
158
|
+
`K8S_AUTH_TOKEN_PATH=${exports.PROXY_SIDECAR_VOLUME_DIR}/${exports.K8S_AUTH_TOKEN_FILENAME}`,
|
|
159
|
+
`${containerKeys[0]}_CONTAINER_HEALTHCHECK=http://${containerKeys[0]}:8080${healthEndpointPath}`
|
|
128
160
|
],
|
|
129
161
|
volumes: [`../${exports.CONTAINER_SERVICE_ASSETS}:${exports.PROXY_SIDECAR_VOLUME_DIR}:ro`],
|
|
130
|
-
ports: [
|
|
162
|
+
ports: [
|
|
163
|
+
`${port}:${tunnel_options_1.DEFAULT_PROXY_INGRESS_PORT}`,
|
|
164
|
+
`${tunnel_options_1.DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE + serviceIndex}:${tunnel_options_1.DEFAULT_PROXY_HEALTHCHECK_PORT}`
|
|
165
|
+
]
|
|
131
166
|
}
|
|
132
167
|
};
|
|
133
168
|
};
|
|
@@ -154,7 +189,7 @@ const deleteDockerComposeFile = async (composeFile) => {
|
|
|
154
189
|
}
|
|
155
190
|
};
|
|
156
191
|
exports.deleteDockerComposeFile = deleteDockerComposeFile;
|
|
157
|
-
const startDockerComposeStack = async (dockerComposeFilePath, serviceKey) => {
|
|
192
|
+
const startDockerComposeStack = async (dockerComposeFilePath, serviceKey, logger) => {
|
|
158
193
|
try {
|
|
159
194
|
await (0, docker_compose_1.pullOne)('proxy-sidecar', {
|
|
160
195
|
cwd: path.dirname(dockerComposeFilePath),
|
|
@@ -165,21 +200,154 @@ const startDockerComposeStack = async (dockerComposeFilePath, serviceKey) => {
|
|
|
165
200
|
catch (err) {
|
|
166
201
|
throw new DockerUnableToPullProxySidecarImage(err);
|
|
167
202
|
}
|
|
203
|
+
await waitForContainersToStart(dockerComposeFilePath, serviceKey, logger);
|
|
204
|
+
};
|
|
205
|
+
exports.startDockerComposeStack = startDockerComposeStack;
|
|
206
|
+
const determineComposeFlags = async (dockerComposeFilePath, serviceKey, logger) => {
|
|
207
|
+
const flags = ['--build', '--quiet-pull'];
|
|
168
208
|
try {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
config
|
|
173
|
-
|
|
174
|
-
|
|
209
|
+
const composeConfig = getComposeConfig(dockerComposeFilePath);
|
|
210
|
+
const hasWatchConfig = Object.values(composeConfig?.services ?? {}).some((service) => service?.develop?.watch);
|
|
211
|
+
if (hasWatchConfig) {
|
|
212
|
+
logger.info(`Hot reload config detected. Starting up ${serviceKey} containers using the --watch flag.`);
|
|
213
|
+
flags.push('--watch');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch (_) { }
|
|
217
|
+
return flags;
|
|
218
|
+
};
|
|
219
|
+
exports.determineComposeFlags = determineComposeFlags;
|
|
220
|
+
const getComposeConfig = (dockerComposeFilePath) => {
|
|
221
|
+
try {
|
|
222
|
+
const composeContent = fs.readFileSync(dockerComposeFilePath, 'utf8');
|
|
223
|
+
const composeConfig = yaml.parse(composeContent);
|
|
224
|
+
return composeConfig;
|
|
225
|
+
}
|
|
226
|
+
catch (_) { }
|
|
227
|
+
return undefined;
|
|
228
|
+
};
|
|
229
|
+
const extractProxySidecarHealthcheckUrl = (composeConfig) => {
|
|
230
|
+
if (!composeConfig?.services) {
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
let healthCheckHostPort = undefined;
|
|
234
|
+
try {
|
|
235
|
+
const proxySidecarService = composeConfig.services[PROXY_SIDECAR_SERVICE_NAME];
|
|
236
|
+
if (proxySidecarService && proxySidecarService.ports && proxySidecarService.ports.length > 0) {
|
|
237
|
+
const portMapping = proxySidecarService.ports.find((portMapping) => {
|
|
238
|
+
const parts = portMapping.split(':');
|
|
239
|
+
return parts[1] === tunnel_options_1.DEFAULT_PROXY_HEALTHCHECK_PORT.toString();
|
|
240
|
+
});
|
|
241
|
+
if (portMapping) {
|
|
242
|
+
healthCheckHostPort = portMapping.split(':')[0];
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (_) { }
|
|
247
|
+
if (healthCheckHostPort) {
|
|
248
|
+
return `http://localhost:${healthCheckHostPort}/health`;
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
};
|
|
252
|
+
const checkContainerHealth = async (url) => {
|
|
253
|
+
return new Promise((resolve) => {
|
|
254
|
+
const request = http.get(url, { timeout: 3000 }, (res) => {
|
|
255
|
+
resolve((res.statusCode ?? 0) >= 200 && (res.statusCode ?? 0) < 300);
|
|
175
256
|
});
|
|
257
|
+
request.on('error', () => {
|
|
258
|
+
resolve(false);
|
|
259
|
+
});
|
|
260
|
+
request.on('timeout', () => {
|
|
261
|
+
request.destroy();
|
|
262
|
+
resolve(false);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
const pollContainerHealth = async (proxySidecarHealthEndpointUrl, logger) => {
|
|
267
|
+
const maxAttempts = exports.STARTUP_TIMER_MS / 1000 - exports.STARTUP_TIMER_BUFFER_MS / 1000;
|
|
268
|
+
const pollInterval = 1000;
|
|
269
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
270
|
+
const isHealthy = await checkContainerHealth(proxySidecarHealthEndpointUrl);
|
|
271
|
+
if (isHealthy) {
|
|
272
|
+
logger.info('All health endpoints responded successfully!');
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
if (attempt === maxAttempts) {
|
|
276
|
+
logger.warn(`Containers did not become healthy within ${exports.STARTUP_TIMER_MS / 1000}s`);
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
280
|
+
}
|
|
281
|
+
return false;
|
|
282
|
+
};
|
|
283
|
+
const waitForContainersToStart = async (dockerComposeFilePath, serviceKey, logger) => {
|
|
284
|
+
const composeFlags = await (0, exports.determineComposeFlags)(dockerComposeFilePath, serviceKey, logger);
|
|
285
|
+
let proxySidecarHealthEndpointUrl;
|
|
286
|
+
try {
|
|
287
|
+
const composeConfig = getComposeConfig(dockerComposeFilePath);
|
|
288
|
+
proxySidecarHealthEndpointUrl = extractProxySidecarHealthcheckUrl(composeConfig);
|
|
176
289
|
}
|
|
177
290
|
catch (err) {
|
|
178
|
-
throw new
|
|
291
|
+
throw new UnableToParseDockerComposeFileError(serviceKey, err);
|
|
179
292
|
}
|
|
293
|
+
return new Promise((resolve, reject) => {
|
|
294
|
+
let containersStarted = false;
|
|
295
|
+
const startupTimer = setTimeout(() => {
|
|
296
|
+
if (!containersStarted) {
|
|
297
|
+
containersStarted = true;
|
|
298
|
+
logger.info(`Startup timeout reached (${exports.STARTUP_TIMER_MS / 1000}s). Starting up the forge tunnel...`);
|
|
299
|
+
resolve();
|
|
300
|
+
}
|
|
301
|
+
}, exports.STARTUP_TIMER_MS);
|
|
302
|
+
const logFilter = (chunk) => {
|
|
303
|
+
const output = chunk.toString();
|
|
304
|
+
const lines = output.split('\n');
|
|
305
|
+
lines.forEach((line) => {
|
|
306
|
+
if (!line.trim())
|
|
307
|
+
return;
|
|
308
|
+
if (LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
|
|
309
|
+
logger.info(line);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
};
|
|
313
|
+
(0, docker_compose_1.execCompose)('up', composeFlags, {
|
|
314
|
+
cwd: path.dirname(dockerComposeFilePath),
|
|
315
|
+
log: false,
|
|
316
|
+
config: dockerComposeFilePath,
|
|
317
|
+
composeOptions: [`-p${serviceKey}`],
|
|
318
|
+
callback: logFilter
|
|
319
|
+
}).catch((error) => {
|
|
320
|
+
clearTimeout(startupTimer);
|
|
321
|
+
const errorMessage = error?.err || error?.out || error?.message || 'Unknown Error Occurred.';
|
|
322
|
+
reject(new DockerUnableToStartError(new Error(errorMessage)));
|
|
323
|
+
});
|
|
324
|
+
setTimeout(async () => {
|
|
325
|
+
if (containersStarted)
|
|
326
|
+
return;
|
|
327
|
+
try {
|
|
328
|
+
if (proxySidecarHealthEndpointUrl) {
|
|
329
|
+
logger.info(`Polling health endpoints for service: ${serviceKey}`);
|
|
330
|
+
const allHealthy = await pollContainerHealth(proxySidecarHealthEndpointUrl, logger);
|
|
331
|
+
if (allHealthy && !containersStarted) {
|
|
332
|
+
containersStarted = true;
|
|
333
|
+
clearTimeout(startupTimer);
|
|
334
|
+
resolve();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
logger.info('No health check endpoints found. Continuing with tunnel startup...');
|
|
339
|
+
containersStarted = true;
|
|
340
|
+
clearTimeout(startupTimer);
|
|
341
|
+
resolve();
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
catch (err) {
|
|
345
|
+
logger.warn(`Health check polling failed: ${err.message}. Relying on startup timeout...`);
|
|
346
|
+
}
|
|
347
|
+
}, exports.STARTUP_TIMER_BUFFER_MS);
|
|
348
|
+
});
|
|
180
349
|
};
|
|
181
|
-
|
|
182
|
-
const stopDockerComposeStack = async (configFile, composeFiles) => {
|
|
350
|
+
const stopDockerComposeStack = async (configFile, logger, composeFiles) => {
|
|
183
351
|
if (!composeFiles || Object.keys(composeFiles).length === 0)
|
|
184
352
|
return;
|
|
185
353
|
const { services } = await configFile.readConfig();
|
|
@@ -190,7 +358,13 @@ const stopDockerComposeStack = async (configFile, composeFiles) => {
|
|
|
190
358
|
return;
|
|
191
359
|
await Promise.all(Object.entries(composeFiles).map(async ([serviceKey, file]) => {
|
|
192
360
|
try {
|
|
193
|
-
await (0, docker_compose_1.downAll)({
|
|
361
|
+
await (0, docker_compose_1.downAll)({
|
|
362
|
+
cwd: '.',
|
|
363
|
+
log: false,
|
|
364
|
+
config: file,
|
|
365
|
+
composeOptions: [`-p${serviceKey}`],
|
|
366
|
+
callback: createCustomLogFilter(logger)
|
|
367
|
+
});
|
|
194
368
|
await (0, exports.deleteDockerComposeFile)(file);
|
|
195
369
|
}
|
|
196
370
|
catch (err) {
|
|
@@ -200,6 +374,21 @@ const stopDockerComposeStack = async (configFile, composeFiles) => {
|
|
|
200
374
|
deleteContainerServiceAssetsDir();
|
|
201
375
|
};
|
|
202
376
|
exports.stopDockerComposeStack = stopDockerComposeStack;
|
|
377
|
+
const createCustomLogFilter = (logger) => {
|
|
378
|
+
let buffer = '';
|
|
379
|
+
return (chunk) => {
|
|
380
|
+
buffer += chunk.toString();
|
|
381
|
+
const lines = buffer.split('\n');
|
|
382
|
+
buffer = lines.pop() || '';
|
|
383
|
+
lines.forEach((line) => {
|
|
384
|
+
if (!line.trim())
|
|
385
|
+
return;
|
|
386
|
+
if (LIFECYCLE_PATTERNS.some((pattern) => pattern.test(line))) {
|
|
387
|
+
logger.info(line);
|
|
388
|
+
}
|
|
389
|
+
});
|
|
390
|
+
};
|
|
391
|
+
};
|
|
203
392
|
const processDockerAuthentication = async (childProcess) => {
|
|
204
393
|
await new Promise((resolve, reject) => {
|
|
205
394
|
childProcess.on('close', (code) => {
|
|
@@ -17,5 +17,7 @@ export declare const defaultDebugStartingPort = 9229;
|
|
|
17
17
|
export declare const TUNNEL_BUNDLE_DIRECTORY: string;
|
|
18
18
|
export declare const defaultNoDebugTunnelOptions: TunnelOptions;
|
|
19
19
|
export declare const DEFAULT_PROXY_INGRESS_PORT = 7071;
|
|
20
|
+
export declare const DEFAULT_PROXY_HEALTHCHECK_PORT = 7073;
|
|
21
|
+
export declare const DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE = 7011;
|
|
20
22
|
export declare function getServicePort(services?: Services, serviceKey?: string): Promise<number | undefined>;
|
|
21
23
|
//# sourceMappingURL=tunnel-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-options.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-options.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,oBAAY,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AACnF,eAAO,MAAM,2BAA2B,EAAE,aAGzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel-options.d.ts","sourceRoot":"","sources":["../../src/tunnel/tunnel-options.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,oBAAY,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,GAAG;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAA8C,CAAC;AACnF,eAAO,MAAM,2BAA2B,EAAE,aAGzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,8BAA8B,OAAO,CAAC;AACnD,eAAO,MAAM,2CAA2C,OAAO,CAAC;AAQhE,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ1G"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getServicePort = exports.DEFAULT_PROXY_INGRESS_PORT = exports.defaultNoDebugTunnelOptions = exports.TUNNEL_BUNDLE_DIRECTORY = exports.defaultDebugStartingPort = void 0;
|
|
3
|
+
exports.getServicePort = exports.DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE = exports.DEFAULT_PROXY_HEALTHCHECK_PORT = exports.DEFAULT_PROXY_INGRESS_PORT = exports.defaultNoDebugTunnelOptions = exports.TUNNEL_BUNDLE_DIRECTORY = exports.defaultDebugStartingPort = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
6
|
const shared_1 = require("../shared");
|
|
@@ -11,6 +11,8 @@ exports.defaultNoDebugTunnelOptions = {
|
|
|
11
11
|
debugStartingPort: exports.defaultDebugStartingPort
|
|
12
12
|
};
|
|
13
13
|
exports.DEFAULT_PROXY_INGRESS_PORT = 7071;
|
|
14
|
+
exports.DEFAULT_PROXY_HEALTHCHECK_PORT = 7073;
|
|
15
|
+
exports.DEFAULT_PROXY_HEALTHCHECK_PORT_HOST_MACHINE = 7011;
|
|
14
16
|
async function getServicePort(services, serviceKey) {
|
|
15
17
|
if (!serviceKey || !services || services.length === 0)
|
|
16
18
|
return undefined;
|
package/out/ui/text.d.ts
CHANGED
|
@@ -844,6 +844,7 @@ export declare const Text: {
|
|
|
844
844
|
unableToAuthenticateDocker: (errCode: string) => string;
|
|
845
845
|
unableToPullProxySidecarImage: (errMessage: string) => string;
|
|
846
846
|
unableToStartDockerComposeStack: (errMessage: string) => string;
|
|
847
|
+
UnableToParseDockerComposeFileError: (serviceKey: string, errMessage: string) => string;
|
|
847
848
|
unableToStopDockerComposeStack: (serviceKey: string, errMessage: string) => string;
|
|
848
849
|
missingImageOrBuildContext: (containerKey: string) => string;
|
|
849
850
|
cannotUseBothImageAndBuildContext: (containerKey: string) => string;
|
package/out/ui/text.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ui/text.ts"],"names":[],"mappings":"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"}
|
package/out/ui/text.js
CHANGED
|
@@ -1058,7 +1058,8 @@ ${buildTerminalLink(link)}\n`,
|
|
|
1058
1058
|
invalidDebugStartingPortNumber: (port) => `${chalk_1.default.bold('--debugStartingPort')} ${port} must be a valid port number.`,
|
|
1059
1059
|
unableToAuthenticateDocker: (errCode) => `Docker authentication process exited with code: ${errCode}.`,
|
|
1060
1060
|
unableToPullProxySidecarImage: (errMessage) => `Unable to pull the proxy sidecar image. Make sure to run 'forge containers docker-login' first. Full error: ${errMessage}`,
|
|
1061
|
-
unableToStartDockerComposeStack: (errMessage) => `Cannot start Docker Compose stack. This usually happens when Docker isn't running
|
|
1061
|
+
unableToStartDockerComposeStack: (errMessage) => `Cannot start Docker Compose stack. This usually happens when Docker isn't running or the provided manifest config is incorrect (e.g. configured Docker image doesn't exist). To fix this: Start a Docker engine, ensure the manifest config is correct, then retry the command. Full error: ${errMessage}`,
|
|
1062
|
+
UnableToParseDockerComposeFileError: (serviceKey, errMessage) => `Unable to parse the Docker Compose file for service: ${serviceKey}. Please ensure that the manifest tunnel config is correct. Full error: ${errMessage}`,
|
|
1062
1063
|
unableToStopDockerComposeStack: (serviceKey, errMessage) => `Failed to stop Docker Compose stack for ${serviceKey}. Full error: ${errMessage}`,
|
|
1063
1064
|
missingImageOrBuildContext: (containerKey) => `Container "${containerKey}" must either use an "image" config or "build" config in the tunnel configuration. Specify either an existing Docker image, or a build context from which the image will be built when the tunnel starts.`,
|
|
1064
1065
|
cannotUseBothImageAndBuildContext: (containerKey) => `Container "${containerKey}" cannot use both an "image" config and "build" config in the tunnel configuration. Specify either an existing Docker image, or a build context from which the image will be built when the tunnel starts.`,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/cli-shared",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.16.0-next.4",
|
|
4
4
|
"description": "Common functionality for Forge CLI",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"generate-graphql-types": "graphql-codegen --config src/graphql/codegen.yml"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@forge/manifest": "12.
|
|
15
|
+
"@forge/manifest": "12.2.0-next.2",
|
|
16
16
|
"@forge/util": "2.0.1",
|
|
17
17
|
"@forge/i18n": "0.0.7",
|
|
18
18
|
"@sentry/node": "7.106.0",
|