{"record":{"id":"ebc5ff3d8d23443a","repo":"GoogleContainerTools/skaffold","slug":"unable-to-find-s-in-output-s","errorCode":null,"errorMessage":"unable to find %s in output: %s","messagePattern":"unable to find (.+?) in output: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/deploy/helm/helm.go","lineNumber":705,"sourceCode":"\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\n\toutput := strings.TrimSpace(buf.String())\n\tidx := strings.Index(output, tmpDir)\n\n\tif idx == -1 {\n\t\treturn \"\", fmt.Errorf(\"unable to find %s in output: %s\", tmpDir, output)\n\t}\n\n\treturn output[idx:], nil\n}\n\nfunc (h *Deployer) warnAboutUnusedImages(builds []graph.Artifact, manifests manifest.ManifestList) {\n\tseen := map[string]bool{}\n\timages, _ := manifests.GetImages(manifest.NewResourceSelectorImages(h.transformableAllowlist, h.transformableDenylist))\n\tfor _, a := range images {\n\t\tseen[a.Tag] = true\n\t}\n\tfor _, b := range builds {\n\t\tif !seen[b.Tag] {\n\t\t\twarnings.Printf(\"image [%s] is not used.\", b.Tag)\n\t\t\twarnings.Printf(\"See helm documentation on how to replace image names with their actual tags: https://skaffold.dev/docs/pipeline-stages/deployers/helm/#image-configuration\")\n\t\t}\n\t}\n}","sourceCodeStart":687,"sourceCodeEnd":723,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/deploy/helm/helm.go#L687-L723","documentation":"After `helm package` succeeds, skaffold locates the produced .tgz path inside helm's stdout output. If the temp dir string does not appear in the output, skaffold cannot determine the packaged chart path and throws this error.","triggerScenarios":"Calling Deploy with a packaged release when helm's stdout format changes (different helm version phrasing, localized output, or output swallowed/redirected so buf is empty or truncated).","commonSituations":"Newer/older helm CLI printing a different \"Saved: <path>\" line; shell/locale modifications; wrapping helm in a script that alters stdout.","solutions":["Check the helm version skaffold uses (skaffold embeds/invokes helm; ensure standard helm output)","Run `helm package <chart> --destination <tmpDir>` manually and confirm output contains the full path","Avoid wrapper scripts around helm that rewrite stdout","Upgrade or downgrade helm to a version compatible with your skaffold"],"exampleFix":"// before\n#!/bin/sh\nhelm \"$@\" | sed 's|/tmp/skaffold-helm|REDACTED|'\n// after\n#!/bin/sh\nexec helm \"$@\"   # do not rewrite helm stdout paths","handlingStrategy":"try-catch","validationCode":"cmd := exec.Command(\"helm\", \"package\", release.ChartPath, \"--destination\", tmpDir)\nout, err := cmd.Output()\nif err != nil { return err }\nif !strings.Contains(string(out), tmpDir) {\n  return fmt.Errorf(\"helm output missing %s: %s\", tmpDir, out)\n}","typeGuard":null,"tryCatchPattern":"if _, err := packageChart(ctx, h, r, builds); err != nil && strings.Contains(err.Error(), \"unable to find\") {\n  // inspect raw helm output; try a different helm version\n}","preventionTips":["Use a standard helm CLI without stdout-rewriting wrappers","Pin a helm version known to work with your skaffold","Log full helm output on deploy failure for diagnosis"],"tags":["helm","packaging","output-parsing"],"backgroundTag":"helm-package-output-unparsed","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"}