{"record":{"id":"0c8da26333b5fafd","repo":"rancher/rancher","slug":"unable-to-fetch-the-manifest-blob-of-s-w-0c8da2","errorCode":null,"errorMessage":"unable to fetch the manifest blob of %s: %w","messagePattern":"unable to fetch the manifest blob of (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/catalogv2/oci/oci.go","lineNumber":81,"sourceCode":"\t\t\t\t\t// and so we are defining a limit before fetching.\n\t\t\t\t\tif desc.Size > maxHelmChartTarSize {\n\t\t\t\t\t\treturn fmt.Errorf(\"the oci artifact %s has size more than %d which is not supported\", chartURL, maxHelmChartTarSize)\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\treturn oras.SkipNode\n\t\t\t},\n\t\t},\n\t})\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to oras copy the remote OCI artifact %s: %w\", chartURL, err)\n\t}\n\t// Fetch the manifest blob of the oci artifact\n\tmanifestBlob, err := content.FetchAll(ctx, memoryStore, manifest)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to fetch the manifest blob of %s: %w\", chartURL, err)\n\t}\n\tvar manifestJSON ocispecv1.Manifest\n\terr = json.Unmarshal(manifestBlob, &manifestJSON)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to unmarshal manifest blob of %s: %w\", chartURL, err)\n\t}\n\n\t// Check if the oci artifact is of type helm config ?\n\tif manifest.ArtifactType == registry.ConfigMediaType || manifestJSON.Config.MediaType == registry.ConfigMediaType {\n\t\t// Find the layer of chart type and fetch it\n\t\tfor _, layer := range manifestJSON.Layers {\n\t\t\tif layer.MediaType == registry.ChartLayerMediaType {\n\t\t\t\tchartTar, err := content.FetchAll(ctx, memoryStore, layer)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\treturn io.NopCloser(bytes.NewBuffer(chartTar)), nil","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/rancher/rancher/blob/932558d4e68565aff2d2f36e89ec4a391b06e7c5/pkg/catalogv2/oci/oci.go#L63-L99","documentation":"oci.Chart() copies the artifact with oras.Copy into a memory store and then reads the manifest back with content.FetchAll. This error means the manifest descriptor was never stored: PreCopy only accepts MediaTypeImageManifest and the Helm chart layer media type and returns oras.SkipNode for everything else, so a non-conforming root manifest (e.g. an image index) is never fetched and the later FetchAll cannot find it.","triggerScenarios":"Pointing oci.Chart at a multi-arch image index / manifest list or a generic OCI artifact whose root manifest media type is not application/vnd.oci.image.manifest.v1+json; the copy 'succeeds' while skipping the root node, then the manifest blob lookup fails.","commonSituations":"ClusterRepo URL referencing a container image or an oras artifact instead of a Helm chart; charts wrapped in an index by custom CI tooling.","solutions":["Confirm the artifact is a Helm chart pushed with helm push","Inspect the root manifest (crane manifest registry/repo:tag); it must be application/vnd.oci.image.manifest.v1+json, not an index","Re-push the chart using Helm so config and layer media types are the cncf.helm ones"],"exampleFix":"# before\nspec:\n  url: oci://reg/app:1.0   # container image, not a chart\n# after\nhelm package ./app && helm push app-1.0.0.tgz oci://reg/charts\n# and point the URL at oci://reg/charts/app:1.0.0","handlingStrategy":"validation","validationCode":"// check the root descriptor media type before copying\nrepo, err := remote.NewRepository(\"reg/charts/app\")\nif err != nil {\n\treturn err\n}\ndesc, err := repo.Resolve(ctx, \"1.0.0\")\nif err != nil {\n\treturn err\n}\nif desc.MediaType != ocispecv1.MediaTypeImageManifest {\n\treturn fmt.Errorf(\"ref is not a single OCI manifest (got %s); not a helm chart\", desc.MediaType)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only reference artifacts pushed with helm push","Check the root manifest media type with Resolve before calling Chart","Avoid multi-arch/index references in chart URLs"],"tags":["oci","oras","helm","manifest"],"backgroundTag":null,"analyzedSha":"932558d4e68565aff2d2f36e89ec4a391b06e7c5","analyzedAt":"2026-08-16T04:37:02.125Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}