Try   HackMD

How images/artifacts are stored

Manifests

Images

Docker V2: https://docs.docker.com/registry/spec/manifest-v2-2/#media-types
OCI Image: https://github.com/opencontainers/image-spec/blob/main/manifest.md

Artifacts

OCI Artifact: https://github.com/opencontainers/image-spec/blob/main/artifact.md

Layers

https://github.com/opencontainers/image-spec/blob/main/layer.md

Why types cannot be resolved based on media type

Requirements

Determine type of the artifact:
Helm
<- application/vnd.cncf.helm.chart.content.v1.tar+gzip
<- application/vnd.docker.image.rootfs.diff.tar.gzip

OCIArtifact
<- application/vnd.oci.image.layer.v1.tar

ArmTemplate
<- application/vnd.oci.image.layer.v1.tar

Question
application/vnd.oci.image.layer.v1.tar: OCIArtifact or ArmTemplate?

Optimal solution:

Use manifest annotation: https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys

Exception: if media type is application/vnd.docker.distribution.manifest.v2+json or application/vnd.docker.distribution.manifest.list.v2+json => docker image

Still need to check if annotating is supported for all user toolings:

  1. oras supports annotation natively
  2. docker supports specific annotation via LABEL: