{"record":{"id":"97e5467b6b49e888","repo":"microsoft/aspire","slug":"helm-chart-name-name-is-invalid-use-alphanumeric-characters","errorCode":null,"errorMessage":"Helm chart name '{name}' is invalid. Use alphanumeric characters, '-', '_', or '.'.","messagePattern":"Helm chart name '(.+?)' is invalid\\. Use alphanumeric characters, '-', '_', or '\\.'\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Kubernetes/HelmChartOptions.cs","lineNumber":317,"sourceCode":"\n    internal static void ValidateChartVersion(string version, string paramName)\n    {\n        if (!SemVersion.TryParse(version, ChartVersionStyles, out _))\n        {\n            throw new ArgumentException($\"Helm chart version '{version}' is invalid. Helm accepts versions such as '1.2.3', '1.2.3-beta.1+ef365', '1', '1.2', or 'v1.2.3'.\", paramName);\n        }\n    }\n\n    internal static void ValidateChartName(string name, string paramName)\n    {\n        if (name.Length > HelmChartNameMaxLength)\n        {\n            throw new ArgumentException($\"Helm chart name '{name}' is invalid. It must be {HelmChartNameMaxLength} characters or fewer.\", paramName);\n        }\n\n        if (!HelmChartNamePattern().IsMatch(name))\n        {\n            throw new ArgumentException($\"Helm chart name '{name}' is invalid. Use alphanumeric characters, '-', '_', or '.'.\", paramName);\n        }\n    }\n\n    internal static void ValidateChartDescription(string description, string paramName)\n    {\n        if (description.Length > HelmChartDescriptionMaxLength)\n        {\n            throw new ArgumentException($\"Helm chart description is invalid. It must be {HelmChartDescriptionMaxLength} characters or fewer.\", paramName);\n        }\n    }\n\n    [GeneratedRegex(\"^[a-z0-9]([-a-z0-9]*[a-z0-9])?$\")]\n    private static partial Regex DnsLabelPattern();\n\n    [GeneratedRegex(\"^[a-zA-Z0-9._-]+$\")]\n    private static partial Regex HelmChartNamePattern();\n}\n","sourceCodeStart":299,"sourceCodeEnd":335,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Kubernetes/HelmChartOptions.cs#L299-L335","documentation":"Helm chart names must consist only of lowercase alphanumeric characters, '-', '_', and '.'. WithChartName checks the name against HelmChartNamePattern and throws ArgumentException when it contains disallowed characters such as spaces, uppercase letters, slashes, or colons.","triggerScenarios":"Calling WithChartName with a name containing characters outside [alphanumeric, '-', '_', '.'], e.g. 'My Chart', 'my/chart', or a name starting with a special character.","commonSituations":"Passing a display name, resource name with a namespace prefix ('ns/mychart'), or Windows path fragment as the chart name; uppercase names copied from project names.","solutions":["Change the chart name to use only lowercase letters, digits, '-', '_', and '.'.","Sanitize the name (replace invalid characters with '-') before calling WithChartName.","Use a slug/kebab-case version of the project name as the chart name."],"exampleFix":"// before\n.WithChartName(\"My App Chart\");\n// after\n.WithChartName(\"my-app-chart\");","handlingStrategy":"validation","validationCode":"var valid = System.Text.RegularExpressions.Regex.IsMatch(chartName, \"^[a-zA-Z0-9._-]+$\");","typeGuard":null,"tryCatchPattern":"try { builder.WithChartName(name); } catch (ArgumentException ex) when (ex.Message.Contains(\"alphanumeric\")) { /* sanitize and retry */ }","preventionTips":["Slugify names (kebab-case) before passing them","Never pass display names, paths, or namespace-qualified names","Add a unit test covering chart-name generation"],"tags":["kubernetes","helm","validation","naming"],"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"}