helm/helm · error

must either provide a name or specify --generate-name

Error message

must either provide a name or specify --generate-name

What it means

Helm's install action failed to derive a release name. Name resolution in pkg/action/install.go tries, in order: a name template (TemplateName), an explicit ReleaseName, and only then auto-generation. When all three are absent (NameTemplate empty, ReleaseName empty, GenerateName false) the install is rejected because Kubernetes objects need a release name to key stored state on.

Source

Thrown at pkg/action/install.go:794

	if len(args) > 2 {
		return args[0], args[1], fmt.Errorf("expected at most two arguments, unexpected arguments: %v", strings.Join(args[2:], ", "))
	}

	if len(args) == 2 {
		return args[0], args[1], flagsNotSet()
	}

	if i.NameTemplate != "" {
		name, err := TemplateName(i.NameTemplate)
		return name, args[0], err
	}

	if i.ReleaseName != "" {
		return i.ReleaseName, args[0], nil
	}

	if !i.GenerateName {
		return "", args[0], errors.New("must either provide a name or specify --generate-name")
	}

	base := filepath.Base(args[0])
	if base == "." || base == "" {
		base = "chart"
	}
	// if present, strip out the file extension from the name
	if idx := strings.Index(base, "."); idx != -1 {
		base = base[0:idx]
	}

	return fmt.Sprintf("%s-%d", base, time.Now().Unix()), args[0], nil
}

// TemplateName renders a name template, returning the name or an error.
func TemplateName(nameTemplate string) (string, error) {
	if nameTemplate == "" {
		return "", nil

View on GitHub (pinned to 2a29f1770b)

Solutions

  1. Pass a release name as the first positional argument: helm install my-release ./mychart
  2. Or opt into auto-generation: helm install --generate-name ./mychart
  3. SDK: set inst.ReleaseName = "my-release" or inst.GenerateName = true before RunWithContext
  4. SDK: or set inst.NameTemplate to a Go template like "{{ .Name }}-{{ randAlphaNum 6 | lower }}"

Example fix

# before
helm install ./mychart

# after
helm install my-release ./mychart
# or
helm install --generate-name ./mychart
Defensive patterns

Strategy: validation

Validate before calling

// before running the install action
if client.NameTemplate == "" && client.ReleaseName == "" && !client.GenerateName {
    return errors.New("set ReleaseName, NameTemplate, or GenerateName before install")
}

Try / catch

if err != nil && err.Error() == "must either provide a name or specify --generate-name" { /* prompt user for a name or set GenerateName and retry once */ }

Prevention

When it happens

Trigger: Running `helm install ./mychart` with no positional release name and no --generate-name/--name-template (Helm 4 CLI no longer implies a name). SDK: calling action.Install.RunWithContext without setting inst.ReleaseName, inst.NameTemplate, or inst.GenerateName=true.

Common situations: Scripts migrated from Helm 3 automation that relied on older flag behavior; CI pipelines calling helm install with only a chart ref; SDK code that constructs action.Install but forgets the name fields; wrap-around tooling that passes empty string for release name.

Related errors


AI-assisted analysis of helm/helm@2a29f1770b (2026-08-15). Data as JSON: /api/errors/1edf44cc3580339e. Report an issue: GitHub.