From 24089334b825d2bdea6fc612c94edbc541f824fa Mon Sep 17 00:00:00 2001 From: Shumail Mohyuddin Date: Wed, 12 Jul 2023 13:33:17 +0200 Subject: [PATCH] fix: respect spec.publishId for publishing image --- core/src/plugins/container/build.ts | 19 +++++++++++++++++-- .../plugins/kubernetes/container/handlers.ts | 14 ++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/core/src/plugins/container/build.ts b/core/src/plugins/container/build.ts index ac6f9ce9f8..4ed939e5b5 100644 --- a/core/src/plugins/container/build.ts +++ b/core/src/plugins/container/build.ts @@ -15,6 +15,7 @@ import { ContainerBuildAction, ContainerBuildOutputs, defaultDockerfileName } fr import { joinWithPosix } from "../../util/fs" import { Resolved } from "../../actions/types" import dedent from "dedent" +import { splitFirst } from "../../util/string" export const getContainerBuildStatus: BuildActionHandler<"getStatus", ContainerBuildAction> = async ({ ctx, @@ -62,6 +63,11 @@ export const buildContainer: BuildActionHandler<"build", ContainerBuildAction> = const cmdOpts = ["build", "-t", identifier, ...getDockerBuildFlags(action), "--file", dockerfilePath] + // if deploymentImageId is different from localImageId, tag the image with deploymentImageId as well. + if (outputs.deploymentImageId && identifier !== outputs.deploymentImageId) { + cmdOpts.push(...["-t", outputs.deploymentImageId]) + } + const logEventContext = { origin: "docker build", level: "verbose" as const, @@ -93,6 +99,15 @@ export const buildContainer: BuildActionHandler<"build", ContainerBuildAction> = export function getContainerBuildActionOutputs(action: Resolved): ContainerBuildOutputs { const buildName = action.name const localId = action.getSpec("localId") + const explicitImage = action.getSpec("publishId") + let imageId = localId + if (explicitImage) { + // override imageId if publishId is set + const imageTag = splitFirst(explicitImage, ":")[1] + const parsedImage = containerHelpers.parseImageId(explicitImage) + const tag = imageTag || action.versionString() + imageId = containerHelpers.unparseImageId({ ...parsedImage, tag }) + } const version = action.moduleVersion() const localImageName = containerHelpers.getLocalImageName(buildName, localId) @@ -100,8 +115,8 @@ export function getContainerBuildActionOutputs(action: Resolved) { let { moduleConfig } = await params.base!(params) @@ -62,15 +63,24 @@ export function k8sGetContainerBuildActionOutputs({ }): ContainerBuildOutputs { const localId = action.getSpec("localId") const outputs = getContainerBuildActionOutputs(action) + const explicitImage = action.getSpec("publishId") + let imageId = localId + if (explicitImage) { + // override imageId if publishId is set + const imageTag = splitFirst(explicitImage, ":")[1] + const parsedImage = containerHelpers.parseImageId(explicitImage) + const tag = imageTag || action.versionString() + imageId = containerHelpers.unparseImageId({ ...parsedImage, tag }) + } outputs.deploymentImageName = outputs["deployment-image-name"] = containerHelpers.getDeploymentImageName( action.name, - localId, + imageId, provider.config.deploymentRegistry ) outputs.deploymentImageId = outputs["deployment-image-id"] = containerHelpers.getBuildDeploymentImageId( action.name, - localId, + imageId, action.moduleVersion(), provider.config.deploymentRegistry )