{"record":{"id":"1edf44cc3580339e","repo":"helm/helm","slug":"must-either-provide-a-name-or-specify-generate-n","errorCode":null,"errorMessage":"must either provide a name or specify --generate-name","messagePattern":"must either provide a name or specify --generate-name","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/action/install.go","lineNumber":794,"sourceCode":"\tif len(args) > 2 {\n\t\treturn args[0], args[1], fmt.Errorf(\"expected at most two arguments, unexpected arguments: %v\", strings.Join(args[2:], \", \"))\n\t}\n\n\tif len(args) == 2 {\n\t\treturn args[0], args[1], flagsNotSet()\n\t}\n\n\tif i.NameTemplate != \"\" {\n\t\tname, err := TemplateName(i.NameTemplate)\n\t\treturn name, args[0], err\n\t}\n\n\tif i.ReleaseName != \"\" {\n\t\treturn i.ReleaseName, args[0], nil\n\t}\n\n\tif !i.GenerateName {\n\t\treturn \"\", args[0], errors.New(\"must either provide a name or specify --generate-name\")\n\t}\n\n\tbase := filepath.Base(args[0])\n\tif base == \".\" || base == \"\" {\n\t\tbase = \"chart\"\n\t}\n\t// if present, strip out the file extension from the name\n\tif idx := strings.Index(base, \".\"); idx != -1 {\n\t\tbase = base[0:idx]\n\t}\n\n\treturn fmt.Sprintf(\"%s-%d\", base, time.Now().Unix()), args[0], nil\n}\n\n// TemplateName renders a name template, returning the name or an error.\nfunc TemplateName(nameTemplate string) (string, error) {\n\tif nameTemplate == \"\" {\n\t\treturn \"\", nil","sourceCodeStart":776,"sourceCodeEnd":812,"githubUrl":"https://github.com/helm/helm/blob/2a29f1770b62844b27197d2507377361d45ad7c0/pkg/action/install.go#L776-L812","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Pass a release name as the first positional argument: helm install my-release ./mychart","Or opt into auto-generation: helm install --generate-name ./mychart","SDK: set inst.ReleaseName = \"my-release\" or inst.GenerateName = true before RunWithContext","SDK: or set inst.NameTemplate to a Go template like \"{{ .Name }}-{{ randAlphaNum 6 | lower }}\""],"exampleFix":"# before\nhelm install ./mychart\n\n# after\nhelm install my-release ./mychart\n# or\nhelm install --generate-name ./mychart","handlingStrategy":"validation","validationCode":"// before running the install action\nif client.NameTemplate == \"\" && client.ReleaseName == \"\" && !client.GenerateName {\n    return errors.New(\"set ReleaseName, NameTemplate, or GenerateName before install\")\n}","typeGuard":null,"tryCatchPattern":"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 */ }","preventionTips":["Always pass an explicit release name in scripts; never rely on implicit naming","Wrap helm invocations in a helper that fails fast when no name flag is present","In SDK code, assert one of ReleaseName/NameTemplate/GenerateName is set before RunWithContext"],"tags":["helm","install","release-name","cli","validation"],"backgroundTag":null,"analyzedSha":"2a29f1770b62844b27197d2507377361d45ad7c0","analyzedAt":"2026-08-15T22:02:47.490Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}