estesp / manifest-tool

Command line tool to create and query container image manifest list/indexes
Apache License 2.0
737 stars 92 forks source link

Output proper/complete JSON with --raw #224

Closed estesp closed 1 year ago

estesp commented 1 year ago

Fixes: #223

Complete the implementation of outputting JSON when using the --raw flag on inspect

estesp commented 1 year ago

This change will properly output JSON when inspecting an image with --raw; output below from inspecting DockerHub alpine:latest image:

{
    "name": "alpine:latest",
    "digest": "sha256:02bb6f428431fbc2809c5d1b41eab5a68350194fb508869a33cb1af4444c9b11",
    "schemaVersion": "2",
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "manifests": [
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:5e2b554c1c45d22c9d1aa836828828e320a26011b76c08631ac896cbc3625e3e",
                "size": 1472
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:8a49fdb3b6a5ff2bd8ec6a86c05b2922a0f7454579ecc07637e94dfd1d0639b6",
                    "size": 3397490
                }
            ]
        },
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:c73b3dd0b896b6c7534460d9383f0814f76a6cb6b990f25480552e848958da04",
                "size": 1485
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:015ee8d9fb3dca1b18815f1e4ee0d325d1f40cde6f2df4dd307918f7b69167d7",
                    "size": 3155679
                }
            ]
        },
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:d5aad8e3ba3174ba428aaa401f94c7b35fc102047465a1656b466094ef04b594",
                "size": 1485
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:e14425cf8fb9304b9ad4a9d1250e0d4c22e507a334ff747fa69b804500afc113",
                    "size": 2911117
                }
            ]
        },
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:44dd6f2230041eede4ee5e792728313e43921b3e46c1809399391535c0c0183b",
                "size": 1487
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:08409d4172603f40b56eb6b76240a1e6bd78baa0e96590dc7ff76c5f1a093af2",
                    "size": 3342848
                }
            ]
        },
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:300949f7b0aee6011ec35156c2f2be60c1ee988b974ea7dfa6b2844f8fb0bee1",
                "size": 1468
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:613767c5530f4016482e81288d0efdca4e58c62031252130d8fccd6f6260a068",
                    "size": 3264862
                }
            ]
        },
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:0bf6c21424b7ddea3d9bbedd1e19802888481f6bd75b6484a0d2eea70edfcb4e",
                "size": 1472
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:5c0986f188e93dd7e76a4dc49a9170da2cd124709f5e1590b378e31a2b0d9587",
                    "size": 3385631
                }
            ]
        },
        {
            "schemaVersion": 2,
            "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
            "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "digest": "sha256:43cb210df6e30f0b9d02ffbbf8f9178cef733b8ca4abc1ba666bbea0200f38ec",
                "size": 1472
            },
            "layers": [
                {
                    "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                    "digest": "sha256:25da54cc0a08f4ca602c6bcd3e52d70082eb8a25ee022bc9f1dda019de49197a",
                    "size": 3226303
                }
            ]
        }
    ]
}

// cc @marcosnils

marcosnils commented 1 year ago

// cc @marcosnils

:tada: thx for getting this one so quick :ship: