{"record":{"id":"98fc1923db489433","repo":"GoogleContainerTools/skaffold","slug":"exiting-dev-mode-because-first-render-failed-w","errorCode":null,"errorMessage":"exiting dev mode because first render failed: %w","messagePattern":"exiting dev mode because first render failed: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/runner/dev.go","lineNumber":323,"sourceCode":"\tdefer r.deployer.GetDebugger().Stop()\n\n\t// Logs should be retrieved up to just before the deploy\n\tr.deployer.GetLogger().SetSince(time.Now())\n\n\t// First render\n\tmanifests, err := r.Render(ctx, out, r.Builds, false)\n\tfor ; err != nil && r.runCtx.Opts.KeepRunningOnFailure; manifests, err = r.Render(ctx, out, r.Builds, false) {\n\t\tlog.Entry(ctx).Warnf(\"Failed to render :%v, please fix the error and press any key to continue.\", err)\n\t\terrT := term.WaitForKeyPress()\n\t\tif errT != nil {\n\t\t\treturn errT\n\t\t}\n\t}\n\tif err != nil {\n\t\tevent.DevLoopFailedInPhase(r.devIteration, constants.Render, err)\n\t\teventV2.TaskFailed(constants.DevLoop, err)\n\t\tendTrace()\n\t\treturn fmt.Errorf(\"exiting dev mode because first render failed: %w\", err)\n\t}\n\n\t// First deploy\n\terr = r.Deploy(ctx, out, r.Builds, manifests)\n\tfor ; err != nil && r.runCtx.Opts.KeepRunningOnFailure; err = r.Deploy(ctx, out, r.Builds, manifests) {\n\t\tlog.Entry(ctx).Warnf(\"Failed to deploy :%v, please fix the error and press any key to continue.\", err)\n\t\terrT := term.WaitForKeyPress()\n\t\tif errT != nil {\n\t\t\treturn errT\n\t\t}\n\t\t// The previous Render Stage could succeed even for kubernetes resource with unknown fields, this will lead to failure in Deploy Stage\n\t\t// users need to fix the problems in their manifests, and skaffold needs to re-render them before re-running Deploy Stage in this case.\n\t\tfor manifests, err = r.Render(ctx, out, r.Builds, false); err != nil; manifests, err = r.Render(ctx, out, r.Builds, false) {\n\t\t\tlog.Entry(ctx).Warnf(\"Failed to Render, please fix the error and press any key to continue. %v\", err)\n\t\t\terrT := term.WaitForKeyPress()\n\t\t\tif errT != nil {\n\t\t\t\treturn errT\n\t\t\t}","sourceCodeStart":305,"sourceCodeEnd":341,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/runner/dev.go#L305-L341","documentation":"Fires in dev-mode's Dev loop when the initial render fails and --keep-running-on-failure is not enabled, so skaffold exits instead of waiting for the user to fix the error. Wraps the render error (manifest generation/rendering problem) and marks the dev loop as failed in the render phase.","triggerScenarios":"Dev(): after build/test, r.Render fails on the first iteration (KeepRunningOnFailure retries exhausted or disabled), constants.Render phase marked failed and dev exits.","commonSituations":"Helm chart values errors; kustomize overlay referencing a missing file/base; raw manifests with invalid YAML or missing image placeholder; unresolvable lifecycleHook render commands.","solutions":["Read the wrapped render error to find the failing manifest/helm/kustomize step","Fix the YAML/chart/kustomize overlay error","Validate manifests with `skaffold render` standalone before entering dev","Check helm values files and kustomization.yaml paths"],"exampleFix":"// before\nbases:\n  - ../missing-base\n// after\nbases:\n  - ../base","handlingStrategy":"validation","validationCode":"// pre-validate render before dev\nif (runCmd('skaffold render --output /tmp/render-check.yaml').code !== 0) exit('render fails; fix manifests first')","typeGuard":"function renderersValid(cfg) {\n  const r = cfg.render || {}\n  if (r.helm && !r.helm.releases) return false\n  if (r.kustomize && !r.kustomize.paths) return false\n  return true\n}","tryCatchPattern":"err := r.Dev(ctx, out, dryRun)\nif err != nil && strings.Contains(err.Error(), \"first render failed\") {\n    log.Fatalf(\"fix render: %v\", err) // manifests must be fixed before dev can run\n}","preventionTips":["Run `skaffold render` standalone before dev on manifest changes","Keep kustomize bases/paths relative and committed","Validate helm chart values with `helm template` first","Lint YAML files in CI to catch syntax errors early"],"tags":["dev-loop","render","manifests","fatal"],"backgroundTag":"initial-build-failure","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}