{"record":{"id":"7be0093514ee8574","repo":"microsoft/aspire","slug":"cannot-derive-a-helm-release-name-from-resource-name-chart","errorCode":null,"errorMessage":"Cannot derive a Helm release name from resource name '{chart.Name}'. Set an explicit release name via WithReleaseName(...). {ex.Message}","messagePattern":"Cannot derive a Helm release name from resource name '(.+?)'\\. Set an explicit release name via WithReleaseName\\(\\.\\.\\.\\)\\. (.+?)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Kubernetes/KubernetesHelmChartExtensions.cs","lineNumber":483,"sourceCode":"\n    private static (string ReleaseName, string Namespace) ResolveReleaseAndNamespace(KubernetesHelmChartResource chart)\n    {\n        var releaseName = chart.ReleaseName ?? chart.Name;\n        var @namespace = chart.Namespace ?? chart.Name;\n\n        // The fallback to chart.Name can produce a value that isn't a valid Helm release name or\n        // Kubernetes namespace (uppercase, too long, etc.) — Aspire resource names allow more than\n        // DNS labels do. Validate here so the caller gets a clear ArgumentException pointing at\n        // WithReleaseName / WithNamespace instead of an opaque helm CLI failure.\n        if (chart.ReleaseName is null)\n        {\n            try\n            {\n                HelmChartOptions.ValidateReleaseName(releaseName, nameof(chart.ReleaseName));\n            }\n            catch (ArgumentException ex)\n            {\n                throw new InvalidOperationException(\n                    $\"Cannot derive a Helm release name from resource name '{chart.Name}'. \" +\n                    $\"Set an explicit release name via WithReleaseName(...). {ex.Message}\",\n                    ex);\n            }\n        }\n\n        if (chart.Namespace is null)\n        {\n            try\n            {\n                HelmChartOptions.ValidateNamespace(@namespace, nameof(chart.Namespace));\n            }\n            catch (ArgumentException ex)\n            {\n                throw new InvalidOperationException(\n                    $\"Cannot derive a Kubernetes namespace from resource name '{chart.Name}'. \" +\n                    $\"Set an explicit namespace via WithNamespace(...). {ex.Message}\",\n                    ex);","sourceCodeStart":465,"sourceCodeEnd":501,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Kubernetes/KubernetesHelmChartExtensions.cs#L465-L501","documentation":"When no explicit release name is set, the chart's resource name is used as the Helm release name and validated with HelmChartOptions.ValidateReleaseName. If the resource name is not a valid Helm release name (DNS-1123 label rules), the caught ArgumentException is wrapped in this InvalidOperationException advising WithReleaseName.","triggerScenarios":"Calling AddHelmChart with a resource name that violates Helm release-name rules (uppercase letters, underscores, too long >53 chars, starts/ends with '-', contains '.') while not calling WithReleaseName.","commonSituations":"C# identifiers like 'MyChart_1' or long descriptive resource names that exceed the 53-character Helm release limit.","solutions":["Set an explicit valid release name via WithReleaseName(...)","Rename the resource to a DNS-1123-compliant lowercase name (lowercase alphanumerics and '-', max 53 chars)","Read ex.Message (embedded) for the specific validation rule violated"],"exampleFix":"// before\nenv.AddHelmChart(\"My_Org_Chart_With_A_Very_Long_Descriptive_Name\", ...);\n// after\nenv.AddHelmChart(\"My_Org_Chart_With_A_Very_Long_Descriptive_Name\", ...)\n   .WithReleaseName(\"my-org-chart\");","handlingStrategy":"validation","validationCode":"// RFC 1123 label check (Helm release names are max 53 chars)\nbool IsValidReleaseName(string name) =>\n    name.Length <= 53 && Regex.IsMatch(name, \"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$\");","typeGuard":null,"tryCatchPattern":"try { env.AddHelmChart(chartName, ...); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"Cannot derive a Helm release name\"))\n{ logger.LogError(ex, \"Set WithReleaseName(...) for resource '{Name}'.\", chartName); }","preventionTips":["Name helm chart resources with lowercase alphanumerics and hyphens only","Always call WithReleaseName for resources with long or non-DNS-1123 names","Keep resource names under 53 characters when they double as release names"],"tags":["kubernetes","helm","naming","validation"],"backgroundTag":"invalid-identifier-format","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}