@forge/cli-shared

8.12.08.12.1-next.0
out/tunnel/docker-compose-lifecycle.js
out/tunnel/docker-compose-lifecycle.js
+21−2
Index: package/out/tunnel/docker-compose-lifecycle.js
===================================================================
--- package/out/tunnel/docker-compose-lifecycle.js
+++ package/out/tunnel/docker-compose-lifecycle.js
@@ -1,7 +1,7 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.stopDockerComposeStack = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = exports.DockerUnableToStartError = exports.DockerUnableToPullProxySidecarImage = exports.InvalidContainerServicePort = exports.K8S_AUTH_TOKEN_FILENAME = exports.CONTAINER_SERVICE_ASSETS = exports.PROXY_SIDECAR_VOLUME_DIR = void 0;
+exports.stopDockerComposeStack = exports.startDockerComposeStack = exports.deleteDockerComposeFile = exports.generateContainersDockerComposeFile = 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;
 const tslib_1 = require("tslib");
 const fs = tslib_1.__importStar(require("fs"));
 const path = tslib_1.__importStar(require("path"));
 const yaml = tslib_1.__importStar(require("yaml"));
@@ -31,8 +31,20 @@
         super(text_1.Text.tunnel.unableToStartDockerComposeStack(err?.message ?? 'Unknown Error Occurred.'));
     }
 }
 exports.DockerUnableToStartError = DockerUnableToStartError;
+class MissingImageOrBuildContextError extends shared_1.UserError {
+    constructor(containerKey) {
+        super(text_1.Text.tunnel.missingImageOrBuildContext(containerKey));
+    }
+}
+exports.MissingImageOrBuildContextError = MissingImageOrBuildContextError;
+class CannotUseBothImageAndBuildContextError extends shared_1.UserError {
+    constructor(containerKey) {
+        super(text_1.Text.tunnel.cannotUseBothImageAndBuildContext(containerKey));
+    }
+}
+exports.CannotUseBothImageAndBuildContextError = CannotUseBothImageAndBuildContextError;
 const generateContainersDockerComposeFile = async (services, appId, envId) => {
     const filesGenerated = {};
     for (const service of services) {
         const { key: serviceKey, containers } = service;
@@ -42,8 +54,14 @@
             if (!port || port < 1024 || port > 49152) {
                 throw new InvalidContainerServicePort(serviceKey);
             }
             const containerConfig = Object.fromEntries(containersWithTunnelConfig.map((container) => {
+                if (!container.tunnel?.docker?.image && !container.tunnel?.docker?.build) {
+                    throw new MissingImageOrBuildContextError(container.key);
+                }
+                else if (container.tunnel?.docker?.image && container.tunnel?.docker?.build) {
+                    throw new CannotUseBothImageAndBuildContextError(container.key);
+                }
                 const config = {
                     container_name: container.key,
                     ...container.tunnel?.docker,
                     depends_on: [PROXY_SIDECAR_SERVICE_NAME]
@@ -145,9 +163,10 @@
         await (0, docker_compose_1.upAll)({
             cwd: path.dirname(dockerComposeFilePath),
             log: true,
             config: dockerComposeFilePath,
-            composeOptions: [`-p${serviceKey}`]
+            composeOptions: [`-p${serviceKey}`],
+            commandOptions: ['--build']
         });
     }
     catch (err) {
         throw new DockerUnableToStartError(err);