fix: let scheduler-k3s:preview tolerate a missing image

`common.GetDeployingAppImageName` runs `VerifyImage` and errors out when
no image has been built for the app. A freshly-created app has no image
yet, so the preview could never render for never-deployed apps. Add an
`AllowMissingImage` flag to `BuildOptions` that lets BuildAppChart
substitute a placeholder image string in that case; CommandPreview sets
it. The deploy path still passes `BuildOptions{}`, so missing-image
remains a hard error there.
This commit is contained in:
Jose Diaz-Gonzalez
2026-06-03 00:48:26 -04:00
parent f1e31ded41
commit 4ce8afaa97
2 changed files with 11 additions and 2 deletions

View File

@@ -40,6 +40,12 @@ type BuildOptions struct {
// release's id so app.kubernetes.io/version annotation churn does not
// appear in the diff.
OverrideDeploymentID int64
// AllowMissingImage, when true, lets BuildAppChart substitute a
// placeholder image string when no real image is available for the app
// yet (e.g. a never-deployed app being previewed). The deploy path
// leaves this false so a missing image still errors.
AllowMissingImage bool
}
// BuildAppChart constructs a Helm chart on disk that reflects dokku's configured
@@ -71,7 +77,10 @@ func BuildAppChart(ctx context.Context, appName, imageTag string, opts BuildOpti
image, err := common.GetDeployingAppImageName(appName, imageTag, "")
if err != nil {
return result, fmt.Errorf("Error getting deploying app image name: %w", err)
if !opts.AllowMissingImage {
return result, fmt.Errorf("Error getting deploying app image name: %w", err)
}
image = fmt.Sprintf("dokku/%s:not-yet-deployed", appName)
}
deployTimeout := getComputedDeployTimeout(appName)

View File

@@ -64,7 +64,7 @@ func CommandPreview(appName string, diffContext int, showSecrets bool, showSecre
return err
}
buildOpts := BuildOptions{}
buildOpts := BuildOptions{AllowMissingImage: true}
if currentRelease != nil {
buildOpts.OverrideDeploymentID = deploymentIDFromRelease(currentRelease)
}