From 3b7ee5330b8a3c087950f31a2100dd220c2173b6 Mon Sep 17 00:00:00 2001 From: Orzelius <33936483+Orzelius@users.noreply.github.com> Date: Wed, 7 Jun 2023 23:35:20 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20ensure=20build=20context=20on=20=C2=B4re?= =?UTF-8?q?ady=C2=B4=20status=20builds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensure build context being available even if the plugin handler returns `ready` status for the action. For example if a container is already built but the build context has additional files needed for the Deploy. Did some slight optimization by first checking if the context has been created previously or the directory already exists. If it does we assume it to be up to date. --- core/src/build-staging/build-staging.ts | 5 +++ core/src/tasks/build.ts | 43 ++++++++++++++++--------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/core/src/build-staging/build-staging.ts b/core/src/build-staging/build-staging.ts index 5d49695ab8..5ce575b029 100644 --- a/core/src/build-staging/build-staging.ts +++ b/core/src/build-staging/build-staging.ts @@ -73,6 +73,11 @@ export class BuildStaging { }) } + async actionBuildPathExists(action: BuildAction ) { + const buildPath = action.getBuildPath() + return this.createdPaths.has(buildPath) || pathExists(buildPath) + } + async syncDependencyProducts(action: BuildAction, log: Log) { const buildPath = action.getBuildPath() diff --git a/core/src/tasks/build.ts b/core/src/tasks/build.ts index 8ee30d319c..66436f2ca8 100644 --- a/core/src/tasks/build.ts +++ b/core/src/tasks/build.ts @@ -9,7 +9,7 @@ import chalk from "chalk" import { ActionTaskProcessParams, ActionTaskStatusParams, ExecuteActionTask } from "../tasks/base" import { Profile } from "../util/profiling" -import { BuildAction } from "../actions/build" +import { BuildAction, BuildActionConfig, ResolvedBuildAction } from "../actions/build" import pluralize from "pluralize" import { BuildStatus } from "../plugin/handlers/Build/get-status" import { resolvedActionToExecuted } from "../actions/helpers" @@ -32,6 +32,7 @@ export class BuildTask extends ExecuteActionTask { if (status.state === "ready" && !statusOnly && !this.force) { this.log.info(`Already built`) + await this.ensureBuildContext(action) } return { ...status, version: action.versionString(), executedAction: resolvedActionToExecuted(action, { status }) } @@ -48,20 +49,7 @@ export class BuildTask extends ExecuteActionTask { } const log = this.log - const files = action.getFullVersion().files - - if (files.length > 0) { - log.verbose(`Syncing sources (${pluralize("file", files.length, true)})...`) - } - - await this.garden.buildStaging.syncFromSrc({ - action, - log: log || this.log, - }) - - log.verbose(chalk.green(`Done syncing sources ${renderDuration(log.getDuration(1))}`)) - - await this.garden.buildStaging.syncDependencyProducts(action, log) + await this.buildStaging(action) try { const { result } = await router.build.build({ @@ -81,4 +69,29 @@ export class BuildTask extends ExecuteActionTask { throw err } } + + private async ensureBuildContext(action: ResolvedBuildAction) { + const buildContextExists = await this.garden.buildStaging.actionBuildPathExists(action) + if (!buildContextExists) { + await this.buildStaging(action) + } + } + + private async buildStaging(action: ResolvedBuildAction) { + const log = this.log + const files = action.getFullVersion().files + + if (files.length > 0) { + log.verbose(`Syncing sources (${pluralize("file", files.length, true)})...`) + } + + await this.garden.buildStaging.syncFromSrc({ + action, + log: log || this.log, + }) + + log.verbose(chalk.green(`Done syncing sources ${renderDuration(log.getDuration(1))}`)) + + await this.garden.buildStaging.syncDependencyProducts(action, log) + } }