{"record":{"id":"72383baa971fc056","repo":"theonedev/onedev","slug":"chart-name-or-version-not-specified","errorCode":null,"errorMessage":"Chart name or version not specified","messagePattern":"Chart name or version not specified","errorType":"http","errorClass":"ClientException","httpStatus":400,"severity":"error","filePath":"server-plugin/server-plugin-pack-helm/src/main/java/io/onedev/server/plugin/pack/helm/HelmPackHandler.java","lineNumber":215,"sourceCode":"                        is.read(content);\n                        var options = new LoaderOptions();\n                        metadata = new Yaml(new SafeConstructor(options)).load(new ByteArrayInputStream(content));\n                        break;\n                    }\n                }                \n            } catch (IOException e) {\n                throw new ClientException(SC_BAD_REQUEST, \"Error reading chart archive: \" + e.getMessage());\n            }\n\n            if (metadata == null) {\n                throw new ClientException(SC_BAD_REQUEST, \"Chart.yaml not found in the archive\");\n            }\n            \n            var chartName = (String) metadata.get(\"name\");\n            var chartVersion = (String) metadata.get(\"version\");\n            \n            if (chartName == null || chartVersion == null) {\n                throw new ClientException(SC_BAD_REQUEST, \"Chart name or version not specified\");\n            }            \n\n            var finalMetadata = metadata;\n\t\t\tvar lockName = \"update-pack:\" + projectId + \":\" + HelmPackSupport.TYPE + \":\" + chartName + \":\" + chartVersion;\n            LockUtils.run(lockName, () -> transactionService.run(() -> {\n                var project = projectService.load(projectId);\n\n                PackBlob packBlob = packBlobService.load(packBlobService.uploadBlob(projectId, bytes, null));\n                var data = new HelmData(finalMetadata, packBlob.getSha256Hash());\n                Pack pack = packService.findByNameAndVersion(project, HelmPackSupport.TYPE, chartName, chartVersion);\n                if (pack == null) {\n                    pack = new Pack();\n                    pack.setProject(project);\n                    pack.setType(HelmPackSupport.TYPE);\n                    pack.setName(chartName);\n                    pack.setVersion(chartVersion);\n                }\n                pack.setData(data);","sourceCodeStart":197,"sourceCodeEnd":233,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-plugin/server-plugin-pack-helm/src/main/java/io/onedev/server/plugin/pack/helm/HelmPackHandler.java#L197-L233","documentation":"HelmPackHandler extracts Chart.yaml from the uploaded chart archive, parses it with SnakeYAML, and rejects the publish with HTTP 400 when either the name or the version field is missing from the chart metadata — both are required keys for a Helm chart.","triggerScenarios":"POST/PUT of a chart whose Chart.yaml lacks 'name:' or 'version:' fields, or where those fields are null/non-string so metadata.get returns null.","commonSituations":"Hand-edited Chart.yaml with deleted/typo'd fields ('nam:' instead of 'name:'), charts scaffolded incompletely, or version fields expressed in a form YAML SafeConstructor does not coerce to String (e.g. version: 1.10 parsed as string here only if quoted).","solutions":["Add both 'name' and 'version' fields to Chart.yaml and quote the version (e.g. version: \"1.0.0\")","Re-run 'helm package' after fixing Chart.yaml and re-upload","Validate with 'helm lint' before publishing","Check Chart.yaml for typos in the field names"],"exampleFix":"// before (Chart.yaml)\napiVersion: v2\nnam: mychart\n// after\napiVersion: v2\nname: mychart\nversion: \"1.0.0\"","handlingStrategy":"validation","validationCode":"var yaml = new Yaml(new SafeConstructor(new LoaderOptions()));\nMap<String, Object> meta = yaml.load(chartYamlContent);\nif (!(meta.get(\"name\") instanceof String name) || name.isBlank())\n    throw new IllegalArgumentException(\"Chart.yaml: missing 'name'\");\nif (!(meta.get(\"version\") instanceof String version) || version.isBlank())\n    throw new IllegalArgumentException(\"Chart.yaml: missing 'version'\");","typeGuard":"boolean valid = meta instanceof Map m && m.get(\"name\") instanceof String && m.get(\"version\") instanceof String;","tryCatchPattern":"try { publish(chart); } catch (ClientException e) { if (e.getMessage().contains(\"name or version not specified\")) repairChartYaml(chart); }","preventionTips":["Keep name and version in Chart.yaml and quote semantic versions","Run 'helm lint' in CI before publishing","Never hand-edit Chart.yaml without re-running helm package"],"tags":["helm","chart-yaml","validation","metadata"],"backgroundTag":"missing-required-argument","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}