@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.
@@ -1 +1 @@
1
- {"version":3,"file":"docker-compose-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tunnel/docker-compose-lifecycle.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,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;AAGvD,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,+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,oCA+DzG,CAAC;AA+DF,eAAO,MAAM,uBAAuB,gBAAuB,MAAM,kBAYhE,CAAC;AAOF,eAAO,MAAM,uBAAuB,0BAAiC,MAAM,cAAc,MAAM,kBAwB9F,CAAC;AAMF,eAAO,MAAM,sBAAsB,eAAsB,UAAU,iBAAiB,OAAO,MAAM,EAAE,MAAM,CAAC,kBA4BzG,CAAC;AAMF,eAAO,MAAM,2BAA2B,iBAAwB,YAAY,kBAW3E,CAAC"}
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 && !path.isAbsolute(config.build.context)) {
76
- let context = config.build.context;
77
- if (context.startsWith('./')) {
78
- context = context.slice(2);
79
- }
80
- config.build.context = '../' + context;
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 getProxySidecarConfig = async (serviceKey, containerKeys, port, appId, envId) => {
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: [`${port}:${tunnel_options_1.DEFAULT_PROXY_INGRESS_PORT}`]
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
- await (0, docker_compose_1.upAll)({
170
- cwd: path.dirname(dockerComposeFilePath),
171
- log: true,
172
- config: dockerComposeFilePath,
173
- composeOptions: [`-p${serviceKey}`],
174
- commandOptions: ['--build']
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 DockerUnableToStartError(err);
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
- exports.startDockerComposeStack = startDockerComposeStack;
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)({ cwd: '.', log: true, config: file, composeOptions: [`-p${serviceKey}`] });
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;AAO/C,wBAAsB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ1G"}
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;
@@ -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, or a Docker image doesn't exist. To fix this: Start a Docker engine, make sure all configured images exist, then retry the command. Full error: ${errMessage}`,
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.15.3-next.3",
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.1.2-next.1",
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",