{"record":{"id":"28f62f2b02f0819c","repo":"GoogleContainerTools/skaffold","slug":"packaged-version-template-w","errorCode":null,"errorMessage":"packaged.version template: %w","messagePattern":"packaged\\.version template: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/deploy/helm/helm.go","lineNumber":682,"sourceCode":"// packageChart packages the chart and returns the path to the resulting chart archive\nfunc (h *Deployer) packageChart(ctx context.Context, r latest.HelmRelease) (string, error) {\n\t// Allow a test to sneak a predictable path in\n\ttmpDir := h.pkgTmpDir\n\n\tif tmpDir == \"\" {\n\t\tt, err := os.MkdirTemp(\"\", \"skaffold-helm\")\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"tempdir: %w\", err)\n\t\t}\n\t\ttmpDir = t\n\t}\n\n\targs := []string{\"package\", r.ChartPath, \"--destination\", tmpDir}\n\n\tif r.Packaged.Version != \"\" {\n\t\tv, err := util.ExpandEnvTemplate(r.Packaged.Version, nil)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"packaged.version template: %w\", err)\n\t\t}\n\t\targs = append(args, \"--version\", v)\n\t}\n\n\tif r.Packaged.AppVersion != \"\" {\n\t\tav, err := util.ExpandEnvTemplate(r.Packaged.AppVersion, nil)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"packaged.appVersion template: %w\", err)\n\t\t}\n\t\targs = append(args, \"--app-version\", av)\n\t}\n\n\tbuf := &bytes.Buffer{}\n\n\tif err := helm.Exec(ctx, h, buf, false, nil, args...); err != nil {\n\t\treturn \"\", fmt.Errorf(\"package chart into a .tgz archive: %v: %w\", args, err)\n\t}\n","sourceCodeStart":664,"sourceCodeEnd":700,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/deploy/helm/helm.go#L664-L700","documentation":"Wraps util.ExpandEnvTemplate failure when expanding releases[].packaged.version during chart packaging. The version string is treated as a template; invalid syntax or unset env vars abort packaging before helm package runs.","triggerScenarios":"Calling Deploy with packaged.version like {{.VERSION}} where VERSION is unset, or containing invalid Go template syntax (e.g. unbalanced braces).","commonSituations":"CI pipelines that forgot to export the version variable; semver tags inserted with stray characters; copy-paste of {{ }} templates into static values.","solutions":["Export the env var used in packaged.version before running skaffold","Replace the template with a literal version (e.g. \"1.2.3\") if no templating is needed","Verify the template renders: `echo \"{{.VERSION}}\" | envsubst` mentally / test with skaffold render"],"exampleFix":"// before\npackaged:\n  version: \"{{.GIT_TAG}}\"\n// after\nexport GIT_TAG=v1.2.3\nskaffold run","handlingStrategy":"validation","validationCode":"tpl := release.Packaged.Version\nif strings.Contains(tpl, \"{{\") {\n  if _, err := texttemplate.New(\"t\").Parse(tpl); err != nil { return err }\n  for _, m := range varRegex.FindAllStringSubmatch(tpl, -1) {\n    if os.Getenv(m[1]) == \"\" { return fmt.Errorf(\"env %s unset\", m[1]) }\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Export version variables in CI before deploy","Use literal versions when templating is unnecessary","Validate semver output of expanded templates"],"tags":["helm","template","version"],"backgroundTag":"template-env-var-unset","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"}