GoogleContainerTools/skaffold · error

cannot parse the release name template: %w

Error message

cannot parse the release name template: %w

What it means

Wraps util.ExpandEnvTemplateOrFail failure when expanding the release `name` template during Cleanup. Release names are Go/env templates; if they reference undefined env variables or have invalid template syntax, Cleanup cannot compute which release to delete.

Source

Thrown at pkg/skaffold/deploy/helm/helm.go:456

		if err := walk.From(expandedPath).When(isDep).AppendPaths(&deps); err != nil {
			return deps, helm.UserErr("issue walking releases", err)
		}
	}
	sort.Strings(deps)
	return deps, nil
}

// Cleanup deletes what was deployed by calling Deploy.
func (h *Deployer) Cleanup(ctx context.Context, out io.Writer, dryRun bool, _ manifest.ManifestListByConfig) error {
	instrumentation.AddAttributesToCurrentSpanFromContext(ctx, map[string]string{
		"DeployerType": "helm",
	})

	var errMsgs []string
	for _, r := range h.Releases {
		releaseName, err := util.ExpandEnvTemplateOrFail(r.Name, nil)
		if err != nil {
			return fmt.Errorf("cannot parse the release name template: %w", err)
		}

		namespace, err := helm.ReleaseNamespace(h.namespace, r)
		if err != nil {
			return err
		}
		args := []string{}
		if dryRun {
			args = append(args, "get", "manifest")
		} else {
			args = append(args, "delete")
		}
		args = append(args, releaseName)

		if namespace != "" {
			args = append(args, "--namespace", namespace)
		}
		if err := helm.Exec(ctx, h, out, false, nil, args...); err != nil {

View on GitHub (pinned to a1189de023)

Solutions

  1. Export the env var referenced by the release name template before running skaffold delete/cleanup
  2. Fix template syntax in the release name in skaffold.yaml
  3. Use `skaffold render` or a dry run to see the expanded name and compare with what was deployed

Example fix

// before
export ARGS=""
skaffold delete
// after
export RELEASE_TAG="v1.2.3"   # var used in release name template
skaffold delete
Defensive patterns

Strategy: validation

Validate before calling

for _, r := range releases {
  if _, err := texttemplate.New("t").Parse(r.Name); err != nil {
    return fmt.Errorf("bad release name template %q: %w", r.Name, err)
  }
  for _, m := range varRegex.FindAllStringSubmatch(r.Name, -1) {
    if os.Getenv(m[1]) == "" { return fmt.Errorf("env var %s unset", m[1]) }
  }
}

Prevention

When it happens

Trigger: Calling Cleanup when a release name contains {{.VAR}} for an unset variable, or malformed template syntax like {{.Name (unclosed).

Common situations: CI environments missing env vars used in the release name template; typos in template placeholders; shell escaping dropping the variable.

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/092bc8ad0b4ca549. Report an issue: GitHub.