Skip to content

Commit

Permalink
fix: ensure build context on ´ready´ status builds
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Orzelius authored Jun 7, 2023
1 parent 920e0bf commit 3b7ee53
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 15 deletions.
5 changes: 5 additions & 0 deletions core/src/build-staging/build-staging.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down
43 changes: 28 additions & 15 deletions core/src/tasks/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -32,6 +32,7 @@ export class BuildTask extends ExecuteActionTask<BuildAction, BuildStatus> {

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 }) }
Expand All @@ -48,20 +49,7 @@ export class BuildTask extends ExecuteActionTask<BuildAction, BuildStatus> {
}

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({
Expand All @@ -81,4 +69,29 @@ export class BuildTask extends ExecuteActionTask<BuildAction, BuildStatus> {
throw err
}
}

private async ensureBuildContext(action: ResolvedBuildAction<BuildActionConfig>) {
const buildContextExists = await this.garden.buildStaging.actionBuildPathExists(action)
if (!buildContextExists) {
await this.buildStaging(action)
}
}

private async buildStaging(action: ResolvedBuildAction<BuildActionConfig>) {
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)
}
}

0 comments on commit 3b7ee53

Please sign in to comment.