From 4ce8afaa97f602a2e272c08bfc712efdd8846d9a Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Wed, 3 Jun 2026 00:48:26 -0400 Subject: [PATCH] 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. --- plugins/scheduler-k3s/chart.go | 11 ++++++++++- plugins/scheduler-k3s/preview.go | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/scheduler-k3s/chart.go b/plugins/scheduler-k3s/chart.go index 74205873e..a73dae214 100644 --- a/plugins/scheduler-k3s/chart.go +++ b/plugins/scheduler-k3s/chart.go @@ -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) diff --git a/plugins/scheduler-k3s/preview.go b/plugins/scheduler-k3s/preview.go index a92b10b9c..6dd1fecf4 100644 --- a/plugins/scheduler-k3s/preview.go +++ b/plugins/scheduler-k3s/preview.go @@ -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) }