From 07de85d4f8706f02f80fa0dac56290727ee59998 Mon Sep 17 00:00:00 2001 From: devitway Date: Tue, 3 Mar 2026 10:56:52 +0000 Subject: [PATCH] fix: detect OCI manifest media type for Helm chart support Distinguish OCI vs Docker manifests by checking config.mediaType instead of assuming all schemaVersion 2 manifests are Docker. Enables helm push/pull via OCI protocol. DevITWay --- nora-registry/src/registry/docker.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/nora-registry/src/registry/docker.rs b/nora-registry/src/registry/docker.rs index 4b35b46..c9da929 100644 --- a/nora-registry/src/registry/docker.rs +++ b/nora-registry/src/registry/docker.rs @@ -748,8 +748,16 @@ fn detect_manifest_media_type(data: &[u8]) -> String { if schema_version == 1 { return "application/vnd.docker.distribution.manifest.v1+json".to_string(); } - // schemaVersion 2 without mediaType is likely docker manifest v2 - if json.get("config").is_some() { + // schemaVersion 2 without mediaType - check config.mediaType to distinguish OCI vs Docker + if let Some(config) = json.get("config") { + if let Some(config_mt) = config.get("mediaType").and_then(|v| v.as_str()) { + if config_mt.starts_with("application/vnd.docker.") { + return "application/vnd.docker.distribution.manifest.v2+json".to_string(); + } + // OCI or Helm or any non-docker config mediaType + return "application/vnd.oci.image.manifest.v1+json".to_string(); + } + // No config.mediaType - assume docker v2 return "application/vnd.docker.distribution.manifest.v2+json".to_string(); } // If it has "manifests" array, it's an index/list