From 397f0823f758cad6f0a0e04c12f9e035ba677be7 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Fri, 9 Feb 2024 15:41:24 -0800 Subject: [PATCH] Refactor data model to support more atomic index generation This adjusts our data model to store/track data from the registry as an image index (with more data fidelity) instead of as a custom data structure. One of the most notable benefits is that we can now track the annotation objects for each architecture, but even more importantly, this allows us to generate the indexes we need to push in deploy directly from data that's on-disk (where the old structure would require querying the registry). Notably, however, this does *not* change deploy (yet) -- those changes are still in progress, but this was a large enough refactor/rewrite that I figured I should start here. This also switches us from using containerd's registry client library to using [`cuelabs.dev/go/oci/ociregistry`](https://pkg.go.dev/cuelabs.dev/go/oci/ociregistry), which is much closer to the distribution-spec APIs (modeled/designed after them, in fact), where containerd's (and frankly most others) are a higher-level abstraction. This is important because we're running into raw number of request rate limits, and almost every library for this always starts with a `HEAD` before pushing content, and this will allow us to go directly for a `PUT` (and then only do the "copy child objects" dance if the `PUT` fails). This also drops our `allTags` data entry (which we only *ever* used the first value of, and then only to identify a `sourceId`/`buildId` in a human-meaningful way, because it's not useful/meaningful for any other use case), and moves `tags` from being arch-specific up to the per-source-object level because it's always identical across all arches for a given `sourceId` so it's silly to copy it N times for every architecture object. --- .go-env.sh | 5 + .test/builds.json | 1766 ++++++++++++++++++-------------- .test/cache-builds.json | 1866 ++++++++++++++++++---------------- .test/example-commands.sh | 19 +- .test/sources.json | 311 +++--- .test/test.sh | 16 +- Jenkinsfile.build | 2 +- Jenkinsfile.trigger | 6 +- builds.go | 231 ++--- go.mod | 18 +- go.sum | 32 +- jenkins.jq | 6 +- lookup.go | 35 + meta.jq | 32 +- registry/annotations.go | 15 + registry/cache.go | 146 +++ registry/client.go | 164 +++ registry/docker-hub.go | 19 + registry/rate-limits.go | 69 ++ registry/read-helpers.go | 69 ++ registry/ref.go | 33 + registry/synthesize-index.go | 199 ++++ sources.sh | 16 +- 23 files changed, 3075 insertions(+), 2000 deletions(-) create mode 100644 lookup.go create mode 100644 registry/annotations.go create mode 100644 registry/cache.go create mode 100644 registry/client.go create mode 100644 registry/docker-hub.go create mode 100644 registry/rate-limits.go create mode 100644 registry/read-helpers.go create mode 100644 registry/ref.go create mode 100644 registry/synthesize-index.go diff --git a/.go-env.sh b/.go-env.sh index 570e829..3dcd98b 100755 --- a/.go-env.sh +++ b/.go-env.sh @@ -20,11 +20,16 @@ args=( --env "CGO_ENABLED=${CGO_ENABLED-0}" --env "GOTOOLCHAIN=${GOTOOLCHAIN-local}" + --env GODEBUG --env GOFLAGS --env GOOS --env GOARCH --env GO386 --env GOAMD64 --env GOARM + + # hack hack hack (useful for "go run" during dev/test) + --env DOCKERHUB_PUBLIC_PROXY + --env DOCKERHUB_PUBLIC_PROXY_HOST ) if [ -t 0 ] && [ -t 1 ]; then args+=( --tty ) diff --git a/.test/builds.json b/.test/builds.json index 60cf470..3ea9b97 100644 --- a/.test/builds.json +++ b/.test/builds.json @@ -4,13 +4,16 @@ "build": { "img": "oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43", "resolved": { - "manifest": { - "ref": "oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", "size": 2372, "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -20,15 +23,25 @@ "architecture": "amd64", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:061239943a7c3d3068527dbdac796118a9f0530d0478a48623f1a49d6aeb21e6", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:061239943a7c3d3068527dbdac796118a9f0530d0478a48623f1a49d6aeb21e6", + "vnd.docker.reference.digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2", - "size": 1248 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2" } }, "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", @@ -38,25 +51,25 @@ }, "resolvedParents": { "alpine:3.18": { - "manifest": { - "ref": "alpine:3.18@sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389" + }, "platform": { "architecture": "amd64", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" } } } @@ -64,7 +77,7 @@ "source": { "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", "reproducibleGitChecksum": "52d3d61b1e9d12310646ec3935698a5825bf568cecc5b5fbbf4e4c4a59e53e8b", - "allTags": [ + "tags": [ "docker:24.0.7-cli", "docker:24.0-cli", "docker:24-cli", @@ -82,14 +95,13 @@ }, "arches": { "amd64": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "amd64/docker:24.0.7-cli", + "amd64/docker:24.0-cli", + "amd64/docker:24-cli", + "amd64/docker:cli", + "amd64/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -114,18 +126,26 @@ "build": { "img": "oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981", "size": 2203, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981" } }, "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", @@ -135,26 +155,26 @@ }, "resolvedParents": { "alpine:3.18": { - "manifest": { - "ref": "alpine:3.18@sha256:1832ef473ede9a923cc6affdf13b54a1be6561ad2ce3c3684910260a7582d36b", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:1832ef473ede9a923cc6affdf13b54a1be6561ad2ce3c3684910260a7582d36b", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:1832ef473ede9a923cc6affdf13b54a1be6561ad2ce3c3684910260a7582d36b" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } - }, - "index": { - "ref": "alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" } } } @@ -162,7 +182,7 @@ "source": { "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", "reproducibleGitChecksum": "52d3d61b1e9d12310646ec3935698a5825bf568cecc5b5fbbf4e4c4a59e53e8b", - "allTags": [ + "tags": [ "docker:24.0.7-cli", "docker:24.0-cli", "docker:24-cli", @@ -180,14 +200,13 @@ }, "arches": { "arm32v6": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v6/docker:24.0.7-cli", + "arm32v6/docker:24.0-cli", + "arm32v6/docker:24-cli", + "arm32v6/docker:cli", + "arm32v6/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -213,13 +232,16 @@ "build": { "img": "oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", "size": 2372, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -230,15 +252,25 @@ "os": "linux", "variant": "v7" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:a7d0fac0c3a8f3b752720cb1649fe2f42d8f487dda1f1fe1992500f5a9173073", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:a7d0fac0c3a8f3b752720cb1649fe2f42d8f487dda1f1fe1992500f5a9173073", + "vnd.docker.reference.digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24", - "size": 1271 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24" } }, "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", @@ -248,26 +280,26 @@ }, "resolvedParents": { "alpine:3.18": { - "manifest": { - "ref": "alpine:3.18@sha256:211fe64069acea47ea680c0943b5a77be1819d0e85365011595391f7562caf27", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:211fe64069acea47ea680c0943b5a77be1819d0e85365011595391f7562caf27", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:211fe64069acea47ea680c0943b5a77be1819d0e85365011595391f7562caf27" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v7" } } - }, - "index": { - "ref": "alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" } } } @@ -275,7 +307,7 @@ "source": { "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", "reproducibleGitChecksum": "52d3d61b1e9d12310646ec3935698a5825bf568cecc5b5fbbf4e4c4a59e53e8b", - "allTags": [ + "tags": [ "docker:24.0.7-cli", "docker:24.0-cli", "docker:24-cli", @@ -293,14 +325,13 @@ }, "arches": { "arm32v7": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v7/docker:24.0.7-cli", + "arm32v7/docker:24.0-cli", + "arm32v7/docker:24-cli", + "arm32v7/docker:cli", + "arm32v7/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -326,13 +357,16 @@ "build": { "img": "oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", "size": 2372, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -343,15 +377,25 @@ "os": "linux", "variant": "v8" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:0effa0c52019fb2ed38d7242c78931aebeab58ac3027747be88e499e0cdd3461", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:0effa0c52019fb2ed38d7242c78931aebeab58ac3027747be88e499e0cdd3461", + "vnd.docker.reference.digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca", - "size": 1248 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca" } }, "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", @@ -361,26 +405,26 @@ }, "resolvedParents": { "alpine:3.18": { - "manifest": { - "ref": "alpine:3.18@sha256:d4ade3639c27579321046d78cc44ec978cea8357d56932611984f601d27e30ac", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:d4ade3639c27579321046d78cc44ec978cea8357d56932611984f601d27e30ac", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:d4ade3639c27579321046d78cc44ec978cea8357d56932611984f601d27e30ac" + }, "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } } - }, - "index": { - "ref": "alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" } } } @@ -388,7 +432,7 @@ "source": { "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", "reproducibleGitChecksum": "52d3d61b1e9d12310646ec3935698a5825bf568cecc5b5fbbf4e4c4a59e53e8b", - "allTags": [ + "tags": [ "docker:24.0.7-cli", "docker:24.0-cli", "docker:24-cli", @@ -406,14 +450,13 @@ }, "arches": { "arm64v8": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm64v8/docker:24.0.7-cli", + "arm64v8/docker:24.0-cli", + "arm64v8/docker:24-cli", + "arm64v8/docker:cli", + "arm64v8/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -439,13 +482,16 @@ "build": { "img": "oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621", "resolved": { - "manifest": { - "ref": "oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", "size": 3327, "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -455,15 +501,25 @@ "architecture": "amd64", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:bd33f1033e5aa789410574b03beda7415cfc5b7826beba9148d9ca45395029a7", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:bd33f1033e5aa789410574b03beda7415cfc5b7826beba9148d9ca45395029a7", + "vnd.docker.reference.digest": "sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:b41b0f3fcaf8866e4907a9104ece79aef61328789f3a3b4b9bf92eea5124a728", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:b41b0f3fcaf8866e4907a9104ece79aef61328789f3a3b4b9bf92eea5124a728", - "size": 1250 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:b41b0f3fcaf8866e4907a9104ece79aef61328789f3a3b4b9bf92eea5124a728" } }, "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", @@ -473,13 +529,16 @@ }, "resolvedParents": { "docker:24-cli": { - "manifest": { - "ref": "oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", "size": 2372, "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -489,15 +548,25 @@ "architecture": "amd64", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:061239943a7c3d3068527dbdac796118a9f0530d0478a48623f1a49d6aeb21e6", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:061239943a7c3d3068527dbdac796118a9f0530d0478a48623f1a49d6aeb21e6", + "vnd.docker.reference.digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2", - "size": 1248 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2" } } } @@ -505,7 +574,7 @@ "source": { "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", "reproducibleGitChecksum": "e3ba9d8210082fcd33d20c53d99fc72f7a44d0d0a8abb5a4d6f54710b91f4c46", - "allTags": [ + "tags": [ "docker:24.0.7-dind", "docker:24.0-dind", "docker:24-dind", @@ -528,19 +597,18 @@ }, "arches": { "amd64": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "amd64/docker:24.0.7-dind", + "amd64/docker:24.0-dind", + "amd64/docker:24-dind", + "amd64/docker:dind", + "amd64/docker:24.0.7-dind-alpine3.18", + "amd64/docker:24.0.7", + "amd64/docker:24.0", + "amd64/docker:24", + "amd64/docker:latest", + "amd64/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -565,18 +633,26 @@ "build": { "img": "oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04@sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38", "size": 3251, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04@sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04@sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38" } }, "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", @@ -586,18 +662,26 @@ }, "resolvedParents": { "docker:24-cli": { - "manifest": { - "ref": "oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981", "size": 2203, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981" } } } @@ -605,7 +689,7 @@ "source": { "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", "reproducibleGitChecksum": "e3ba9d8210082fcd33d20c53d99fc72f7a44d0d0a8abb5a4d6f54710b91f4c46", - "allTags": [ + "tags": [ "docker:24.0.7-dind", "docker:24.0-dind", "docker:24-dind", @@ -628,19 +712,18 @@ }, "arches": { "arm32v6": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v6/docker:24.0.7-dind", + "arm32v6/docker:24.0-dind", + "arm32v6/docker:24-dind", + "arm32v6/docker:dind", + "arm32v6/docker:24.0.7-dind-alpine3.18", + "arm32v6/docker:24.0.7", + "arm32v6/docker:24.0", + "arm32v6/docker:24", + "arm32v6/docker:latest", + "arm32v6/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -666,13 +749,16 @@ "build": { "img": "oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", "size": 3327, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -683,15 +769,25 @@ "os": "linux", "variant": "v7" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:9b19df42d31ff6d0bad19c17186093b153048b53ef33c7de0c9e76ae9a4412d0", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:9b19df42d31ff6d0bad19c17186093b153048b53ef33c7de0c9e76ae9a4412d0", + "vnd.docker.reference.digest": "sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:c36ec6ddcbe0e9b0b9a2d957fc0521b01fbeca74d74aea790d3ca7a7dea690a3", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:c36ec6ddcbe0e9b0b9a2d957fc0521b01fbeca74d74aea790d3ca7a7dea690a3", - "size": 1273 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:c36ec6ddcbe0e9b0b9a2d957fc0521b01fbeca74d74aea790d3ca7a7dea690a3" } }, "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", @@ -701,13 +797,16 @@ }, "resolvedParents": { "docker:24-cli": { - "manifest": { - "ref": "oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", "size": 2372, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -718,15 +817,25 @@ "os": "linux", "variant": "v7" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:a7d0fac0c3a8f3b752720cb1649fe2f42d8f487dda1f1fe1992500f5a9173073", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:a7d0fac0c3a8f3b752720cb1649fe2f42d8f487dda1f1fe1992500f5a9173073", + "vnd.docker.reference.digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24", - "size": 1271 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24" } } } @@ -734,7 +843,7 @@ "source": { "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", "reproducibleGitChecksum": "e3ba9d8210082fcd33d20c53d99fc72f7a44d0d0a8abb5a4d6f54710b91f4c46", - "allTags": [ + "tags": [ "docker:24.0.7-dind", "docker:24.0-dind", "docker:24-dind", @@ -757,19 +866,18 @@ }, "arches": { "arm32v7": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v7/docker:24.0.7-dind", + "arm32v7/docker:24.0-dind", + "arm32v7/docker:24-dind", + "arm32v7/docker:dind", + "arm32v7/docker:24.0.7-dind-alpine3.18", + "arm32v7/docker:24.0.7", + "arm32v7/docker:24.0", + "arm32v7/docker:24", + "arm32v7/docker:latest", + "arm32v7/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -795,13 +903,16 @@ "build": { "img": "oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", "size": 3327, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -812,15 +923,25 @@ "os": "linux", "variant": "v8" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:885deeb2bb863dbcf0b80bceb8b5be84de59c6132926911ed0d591fa8232935d", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:885deeb2bb863dbcf0b80bceb8b5be84de59c6132926911ed0d591fa8232935d", + "vnd.docker.reference.digest": "sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:8cbf87eb14de4783e139d5cc69578f424754a0d7479175997aa30b0b49d436e3", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:8cbf87eb14de4783e139d5cc69578f424754a0d7479175997aa30b0b49d436e3", - "size": 1250 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:8cbf87eb14de4783e139d5cc69578f424754a0d7479175997aa30b0b49d436e3" } }, "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", @@ -830,13 +951,16 @@ }, "resolvedParents": { "docker:24-cli": { - "manifest": { - "ref": "oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", "size": 2372, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", "org.opencontainers.image.url": "https://hub.docker.com/_/docker", @@ -847,15 +971,25 @@ "os": "linux", "variant": "v8" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:0effa0c52019fb2ed38d7242c78931aebeab58ac3027747be88e499e0cdd3461", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:0effa0c52019fb2ed38d7242c78931aebeab58ac3027747be88e499e0cdd3461", + "vnd.docker.reference.digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca", - "size": 1248 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca" } } } @@ -863,7 +997,7 @@ "source": { "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", "reproducibleGitChecksum": "e3ba9d8210082fcd33d20c53d99fc72f7a44d0d0a8abb5a4d6f54710b91f4c46", - "allTags": [ + "tags": [ "docker:24.0.7-dind", "docker:24.0-dind", "docker:24-dind", @@ -886,19 +1020,18 @@ }, "arches": { "arm64v8": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm64v8/docker:24.0.7-dind", + "arm64v8/docker:24.0-dind", + "arm64v8/docker:24-dind", + "arm64v8/docker:dind", + "arm64v8/docker:24.0.7-dind-alpine3.18", + "arm64v8/docker:24.0.7", + "arm64v8/docker:24.0", + "arm64v8/docker:24", + "arm64v8/docker:latest", + "arm64v8/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -924,18 +1057,26 @@ "build": { "img": "oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e", "resolved": { - "manifest": { - "ref": "oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e@sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce", "size": 3462, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e@sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce" + }, "platform": { "architecture": "amd64", "os": "windows", "os.version": "10.0.20348.2113" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e@sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce" } }, "sourceId": "fc50de1b0dedf55655271fc22721b7d94e09a12d0e6ff6b76871ba6b808f5984", @@ -945,12 +1086,17 @@ }, "resolvedParents": { "mcr.microsoft.com/windows/servercore:ltsc2022": { - "manifest": { - "ref": "mcr.microsoft.com/windows/servercore:ltsc2022@sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4", "size": 596, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4" + }, "platform": { "architecture": "amd64", "os": "windows", @@ -960,14 +1106,9 @@ ] } } - }, - "index": { - "ref": "mcr.microsoft.com/windows/servercore:ltsc2022@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a", - "size": 375 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a" } } } @@ -975,7 +1116,7 @@ "source": { "sourceId": "fc50de1b0dedf55655271fc22721b7d94e09a12d0e6ff6b76871ba6b808f5984", "reproducibleGitChecksum": "1711f6dcb5def8e2e6ce88e3a12c24e2dd37bf967a79ae86128c4d45429c0a2c", - "allTags": [ + "tags": [ "docker:24.0.7-windowsservercore-ltsc2022", "docker:24.0-windowsservercore-ltsc2022", "docker:24-windowsservercore-ltsc2022", @@ -996,17 +1137,16 @@ }, "arches": { "windows-amd64": { - "tags": [ - "docker:24.0.7-windowsservercore-ltsc2022", - "docker:24.0-windowsservercore-ltsc2022", - "docker:24-windowsservercore-ltsc2022", - "docker:windowsservercore-ltsc2022", - "docker:24.0.7-windowsservercore", - "docker:24.0-windowsservercore", - "docker:24-windowsservercore", - "docker:windowsservercore" - ], - "archTags": [], + "archTags": [ + "winamd64/docker:24.0.7-windowsservercore-ltsc2022", + "winamd64/docker:24.0-windowsservercore-ltsc2022", + "winamd64/docker:24-windowsservercore-ltsc2022", + "winamd64/docker:windowsservercore-ltsc2022", + "winamd64/docker:24.0.7-windowsservercore", + "winamd64/docker:24.0-windowsservercore", + "winamd64/docker:24-windowsservercore", + "winamd64/docker:windowsservercore" + ], "froms": [ "mcr.microsoft.com/windows/servercore:ltsc2022" ], @@ -1031,18 +1171,26 @@ "build": { "img": "oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf", "resolved": { - "manifest": { - "ref": "oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf@sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021", "size": 3462, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf@sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021" + }, "platform": { "architecture": "amd64", "os": "windows", "os.version": "10.0.17763.5122" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf@sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021" } }, "sourceId": "10083d7e3bfbe4f9bdb3e38e4846b88d0bea1896caca9ef70de6478b3c20fe9a", @@ -1052,12 +1200,17 @@ }, "resolvedParents": { "mcr.microsoft.com/windows/servercore:1809": { - "manifest": { - "ref": "mcr.microsoft.com/windows/servercore:1809@sha256:603e3b4f1d0d2565ad4945575a9fb5cd6b90cb6b4981fe551de509f09853ffc5", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:603e3b4f1d0d2565ad4945575a9fb5cd6b90cb6b4981fe551de509f09853ffc5", "size": 596, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:603e3b4f1d0d2565ad4945575a9fb5cd6b90cb6b4981fe551de509f09853ffc5" + }, "platform": { "architecture": "amd64", "os": "windows", @@ -1067,14 +1220,9 @@ ] } } - }, - "index": { - "ref": "mcr.microsoft.com/windows/servercore:1809@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b", - "size": 375 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b" } } } @@ -1082,7 +1230,7 @@ "source": { "sourceId": "10083d7e3bfbe4f9bdb3e38e4846b88d0bea1896caca9ef70de6478b3c20fe9a", "reproducibleGitChecksum": "40dcbc9e7a451cfc7f2bd12400074f3f21bc6c0331e249019623aeb617d18747", - "allTags": [ + "tags": [ "docker:24.0.7-windowsservercore-1809", "docker:24.0-windowsservercore-1809", "docker:24-windowsservercore-1809", @@ -1103,17 +1251,16 @@ }, "arches": { "windows-amd64": { - "tags": [ - "docker:24.0.7-windowsservercore-1809", - "docker:24.0-windowsservercore-1809", - "docker:24-windowsservercore-1809", - "docker:windowsservercore-1809", - "docker:24.0.7-windowsservercore", - "docker:24.0-windowsservercore", - "docker:24-windowsservercore", - "docker:windowsservercore" - ], - "archTags": [], + "archTags": [ + "winamd64/docker:24.0.7-windowsservercore-1809", + "winamd64/docker:24.0-windowsservercore-1809", + "winamd64/docker:24-windowsservercore-1809", + "winamd64/docker:windowsservercore-1809", + "winamd64/docker:24.0.7-windowsservercore", + "winamd64/docker:24.0-windowsservercore", + "winamd64/docker:24-windowsservercore", + "winamd64/docker:windowsservercore" + ], "froms": [ "mcr.microsoft.com/windows/servercore:1809" ], @@ -1138,13 +1285,16 @@ "build": { "img": "oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694", "resolved": { - "manifest": { - "ref": "oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -1154,15 +1304,25 @@ "architecture": "amd64", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:692819af7e57efe94abadb451e05aa5eb042a540a2eae7095d37507dbd66dc94", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:692819af7e57efe94abadb451e05aa5eb042a540a2eae7095d37507dbd66dc94", + "vnd.docker.reference.digest": "sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:09dd1c0183f992a4507d6e562a8e079b8583d19aaf8d991b0d22711c6b4525d7", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:09dd1c0183f992a4507d6e562a8e079b8583d19aaf8d991b0d22711c6b4525d7", - "size": 1265 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:09dd1c0183f992a4507d6e562a8e079b8583d19aaf8d991b0d22711c6b4525d7" } }, "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", @@ -1173,47 +1333,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:e785cd4ee42f2c1d3845bae90e43b13d82d580843b1666207a9508807500e69f", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:e785cd4ee42f2c1d3845bae90e43b13d82d580843b1666207a9508807500e69f", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:e785cd4ee42f2c1d3845bae90e43b13d82d580843b1666207a9508807500e69f" + }, "platform": { "architecture": "amd64", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330" + }, "platform": { "architecture": "amd64", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -1221,7 +1381,7 @@ "source": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -1236,11 +1396,10 @@ }, "arches": { "amd64": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "amd64/notary:server-0.7.0", + "amd64/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -1271,18 +1430,26 @@ "build": { "img": "oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1@sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e", "size": 1774, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1@sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1@sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e" } }, "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", @@ -1293,49 +1460,49 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:172d83c61d65e51e1fe432994122a4f61de1d6535fae0cfbfb71927cc6f8d828", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:172d83c61d65e51e1fe432994122a4f61de1d6535fae0cfbfb71927cc6f8d828", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:172d83c61d65e51e1fe432994122a4f61de1d6535fae0cfbfb71927cc6f8d828" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -1343,7 +1510,7 @@ "source": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -1358,11 +1525,10 @@ }, "arches": { "arm32v6": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "arm32v6/notary:server-0.7.0", + "arm32v6/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -1394,13 +1560,16 @@ "build": { "img": "oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -1411,15 +1580,25 @@ "os": "linux", "variant": "v8" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:c854751d0900f72cc6aaa35d5219de9528cc80a236cac79febb9c6a8bcd451de", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:c854751d0900f72cc6aaa35d5219de9528cc80a236cac79febb9c6a8bcd451de", + "vnd.docker.reference.digest": "sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:8a65a848a3d45898b726849eb47ddaa199e71d3962133f107a45f51fb74fd73a", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:8a65a848a3d45898b726849eb47ddaa199e71d3962133f107a45f51fb74fd73a", - "size": 1265 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:8a65a848a3d45898b726849eb47ddaa199e71d3962133f107a45f51fb74fd73a" } }, "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", @@ -1430,49 +1609,49 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:9c10ae7a280cab3092646406901f65a60722cf8f6db3a338f4ef471fd884fd84", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:9c10ae7a280cab3092646406901f65a60722cf8f6db3a338f4ef471fd884fd84", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:9c10ae7a280cab3092646406901f65a60722cf8f6db3a338f4ef471fd884fd84" + }, "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85" + }, "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -1480,7 +1659,7 @@ "source": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -1495,11 +1674,10 @@ }, "arches": { "arm64v8": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "arm64v8/notary:server-0.7.0", + "arm64v8/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -1531,13 +1709,16 @@ "build": { "img": "oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb", "resolved": { - "manifest": { - "ref": "oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -1547,15 +1728,25 @@ "architecture": "386", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:0b8400d1572fdb0f4c7543b5b66713df78a4c35200f8d147e8d424cc79def783", + "size": 567, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:0b8400d1572fdb0f4c7543b5b66713df78a4c35200f8d147e8d424cc79def783", + "vnd.docker.reference.digest": "sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:16f71e74b992a74d7c8e9dff93036f10aaf29f0e44a9ceb5b739d8113e82fcf7", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:16f71e74b992a74d7c8e9dff93036f10aaf29f0e44a9ceb5b739d8113e82fcf7", - "size": 1263 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:16f71e74b992a74d7c8e9dff93036f10aaf29f0e44a9ceb5b739d8113e82fcf7" } }, "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", @@ -1566,47 +1757,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:f1de15aa95b3c59b5afbe3ae6feedc5ae5277deb24ef55a7ae2e5863efc43ae9", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:f1de15aa95b3c59b5afbe3ae6feedc5ae5277deb24ef55a7ae2e5863efc43ae9", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:f1de15aa95b3c59b5afbe3ae6feedc5ae5277deb24ef55a7ae2e5863efc43ae9" + }, "platform": { "architecture": "386", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b" + }, "platform": { "architecture": "386", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -1614,7 +1805,7 @@ "source": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -1629,11 +1820,10 @@ }, "arches": { "i386": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "i386/notary:server-0.7.0", + "i386/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -1664,13 +1854,16 @@ "build": { "img": "oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918", "resolved": { - "manifest": { - "ref": "oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -1680,15 +1873,25 @@ "architecture": "ppc64le", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:6235a23c8e809f36b0e6a6ef45efe0079f9a92ddb62d4ac397241074b79d42c7", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:6235a23c8e809f36b0e6a6ef45efe0079f9a92ddb62d4ac397241074b79d42c7", + "vnd.docker.reference.digest": "sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:f4e1aff8b7e19c3842fb78b2be1e65ec9290e7c6783f087c813987b36400587a", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:f4e1aff8b7e19c3842fb78b2be1e65ec9290e7c6783f087c813987b36400587a", - "size": 1267 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:f4e1aff8b7e19c3842fb78b2be1e65ec9290e7c6783f087c813987b36400587a" } }, "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", @@ -1699,47 +1902,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:fc3b552857d80ad5c7b22763dc77a8c9ca74b4b22dcf7ce13fc87c9d5f613248", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:fc3b552857d80ad5c7b22763dc77a8c9ca74b4b22dcf7ce13fc87c9d5f613248", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:fc3b552857d80ad5c7b22763dc77a8c9ca74b4b22dcf7ce13fc87c9d5f613248" + }, "platform": { "architecture": "ppc64le", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff" + }, "platform": { "architecture": "ppc64le", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -1747,7 +1950,7 @@ "source": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -1762,11 +1965,10 @@ }, "arches": { "ppc64le": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "ppc64le/notary:server-0.7.0", + "ppc64le/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -1797,13 +1999,16 @@ "build": { "img": "oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11", "resolved": { - "manifest": { - "ref": "oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -1813,15 +2018,25 @@ "architecture": "s390x", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:c35c2d748647d9150a218c6f9bba1ba76b2857c71608e21de4dea7e277400a5f", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:c35c2d748647d9150a218c6f9bba1ba76b2857c71608e21de4dea7e277400a5f", + "vnd.docker.reference.digest": "sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:8b50da43831c731e8504c0b11dfb1573b3096428c780539b77db32ae76653199", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:8b50da43831c731e8504c0b11dfb1573b3096428c780539b77db32ae76653199", - "size": 1265 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:8b50da43831c731e8504c0b11dfb1573b3096428c780539b77db32ae76653199" } }, "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", @@ -1832,47 +2047,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:b6e5dbb93caec9210c116a2b8f0ca160152c319112f34a06f53ea393805261e3", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:b6e5dbb93caec9210c116a2b8f0ca160152c319112f34a06f53ea393805261e3", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:b6e5dbb93caec9210c116a2b8f0ca160152c319112f34a06f53ea393805261e3" + }, "platform": { "architecture": "s390x", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5" + }, "platform": { "architecture": "s390x", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -1880,7 +2095,7 @@ "source": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -1895,11 +2110,10 @@ }, "arches": { "s390x": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "s390x/notary:server-0.7.0", + "s390x/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -1930,13 +2144,16 @@ "build": { "img": "oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9", "resolved": { - "manifest": { - "ref": "oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -1946,15 +2163,25 @@ "architecture": "amd64", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:9346c6fe8bf3d29a34e0e1d10f1730feff4461a2e4e2cec704a90490be890d77", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:9346c6fe8bf3d29a34e0e1d10f1730feff4461a2e4e2cec704a90490be890d77", + "vnd.docker.reference.digest": "sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:0c0a250eb8a93d1d576e112f03c43c475748df50c007685863c5bf04d45ca3f3", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:0c0a250eb8a93d1d576e112f03c43c475748df50c007685863c5bf04d45ca3f3", - "size": 1265 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:0c0a250eb8a93d1d576e112f03c43c475748df50c007685863c5bf04d45ca3f3" } }, "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", @@ -1965,47 +2192,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:e785cd4ee42f2c1d3845bae90e43b13d82d580843b1666207a9508807500e69f", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:e785cd4ee42f2c1d3845bae90e43b13d82d580843b1666207a9508807500e69f", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:e785cd4ee42f2c1d3845bae90e43b13d82d580843b1666207a9508807500e69f" + }, "platform": { "architecture": "amd64", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330" + }, "platform": { "architecture": "amd64", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -2013,7 +2240,7 @@ "source": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -2028,11 +2255,10 @@ }, "arches": { "amd64": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "amd64/notary:signer-0.7.0", + "amd64/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -2063,18 +2289,26 @@ "build": { "img": "oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f@sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53", "size": 1774, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f@sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f@sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53" } }, "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", @@ -2085,49 +2319,49 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:172d83c61d65e51e1fe432994122a4f61de1d6535fae0cfbfb71927cc6f8d828", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:172d83c61d65e51e1fe432994122a4f61de1d6535fae0cfbfb71927cc6f8d828", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:172d83c61d65e51e1fe432994122a4f61de1d6535fae0cfbfb71927cc6f8d828" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6" + }, "platform": { "architecture": "arm", "os": "linux", "variant": "v6" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -2135,7 +2369,7 @@ "source": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -2150,11 +2384,10 @@ }, "arches": { "arm32v6": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "arm32v6/notary:signer-0.7.0", + "arm32v6/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -2186,13 +2419,16 @@ "build": { "img": "oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691", "resolved": { - "manifest": { - "ref": "oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -2203,15 +2439,25 @@ "os": "linux", "variant": "v8" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:f5c7a9cc6bd851167a5b945b9057ded69c1ad64e0ce9416663550867a64c5756", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:f5c7a9cc6bd851167a5b945b9057ded69c1ad64e0ce9416663550867a64c5756", + "vnd.docker.reference.digest": "sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:29e6cf08f34de4d30d19bcb21000596af6c215da8fbba5d04ae3d98b0bb665eb", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:29e6cf08f34de4d30d19bcb21000596af6c215da8fbba5d04ae3d98b0bb665eb", - "size": 1265 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:29e6cf08f34de4d30d19bcb21000596af6c215da8fbba5d04ae3d98b0bb665eb" } }, "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", @@ -2222,49 +2468,49 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:9c10ae7a280cab3092646406901f65a60722cf8f6db3a338f4ef471fd884fd84", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:9c10ae7a280cab3092646406901f65a60722cf8f6db3a338f4ef471fd884fd84", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:9c10ae7a280cab3092646406901f65a60722cf8f6db3a338f4ef471fd884fd84" + }, "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85" + }, "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -2272,7 +2518,7 @@ "source": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -2287,11 +2533,10 @@ }, "arches": { "arm64v8": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "arm64v8/notary:signer-0.7.0", + "arm64v8/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -2323,13 +2568,16 @@ "build": { "img": "oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd", "resolved": { - "manifest": { - "ref": "oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -2339,15 +2587,25 @@ "architecture": "386", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:35cff7b9737739368b4f6b47a2dc15f00f3d42ce52226c5298097ded29bf1a44", + "size": 567, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:35cff7b9737739368b4f6b47a2dc15f00f3d42ce52226c5298097ded29bf1a44", + "vnd.docker.reference.digest": "sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:e56f38e952dd40f4f3e5d6f970e8868239e199efba77c43c8ad5f387f24de2fa", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:e56f38e952dd40f4f3e5d6f970e8868239e199efba77c43c8ad5f387f24de2fa", - "size": 1263 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:e56f38e952dd40f4f3e5d6f970e8868239e199efba77c43c8ad5f387f24de2fa" } }, "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", @@ -2358,47 +2616,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:f1de15aa95b3c59b5afbe3ae6feedc5ae5277deb24ef55a7ae2e5863efc43ae9", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:f1de15aa95b3c59b5afbe3ae6feedc5ae5277deb24ef55a7ae2e5863efc43ae9", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:f1de15aa95b3c59b5afbe3ae6feedc5ae5277deb24ef55a7ae2e5863efc43ae9" + }, "platform": { "architecture": "386", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b" + }, "platform": { "architecture": "386", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -2406,7 +2664,7 @@ "source": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -2421,11 +2679,10 @@ }, "arches": { "i386": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "i386/notary:signer-0.7.0", + "i386/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -2456,13 +2713,16 @@ "build": { "img": "oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f", "resolved": { - "manifest": { - "ref": "oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -2472,15 +2732,25 @@ "architecture": "ppc64le", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:d777a1b17cf821e4518af7210ec644a565bb09521fc8fed18cbb00b146457adc", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:d777a1b17cf821e4518af7210ec644a565bb09521fc8fed18cbb00b146457adc", + "vnd.docker.reference.digest": "sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:63b53ff8f8a08587f2dfe1f9dfbfd3bb3dc1e99ccf00cdf4c7c879ff947d50b3", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:63b53ff8f8a08587f2dfe1f9dfbfd3bb3dc1e99ccf00cdf4c7c879ff947d50b3", - "size": 1267 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:63b53ff8f8a08587f2dfe1f9dfbfd3bb3dc1e99ccf00cdf4c7c879ff947d50b3" } }, "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", @@ -2491,47 +2761,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:fc3b552857d80ad5c7b22763dc77a8c9ca74b4b22dcf7ce13fc87c9d5f613248", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:fc3b552857d80ad5c7b22763dc77a8c9ca74b4b22dcf7ce13fc87c9d5f613248", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:fc3b552857d80ad5c7b22763dc77a8c9ca74b4b22dcf7ce13fc87c9d5f613248" + }, "platform": { "architecture": "ppc64le", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff" + }, "platform": { "architecture": "ppc64le", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -2539,7 +2809,7 @@ "source": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -2554,11 +2824,10 @@ }, "arches": { "ppc64le": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "ppc64le/notary:signer-0.7.0", + "ppc64le/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -2589,13 +2858,16 @@ "build": { "img": "oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60", "resolved": { - "manifest": { - "ref": "oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", "size": 1998, "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", "org.opencontainers.image.url": "https://hub.docker.com/_/notary", @@ -2605,15 +2877,25 @@ "architecture": "s390x", "os": "linux" } + }, + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:c84dbdb9b42aafc6e1def960ec053709e57577b1eb06ea6cdb66da0e94acc640", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:c84dbdb9b42aafc6e1def960ec053709e57577b1eb06ea6cdb66da0e94acc640", + "vnd.docker.reference.digest": "sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } } - }, - "index": { - "ref": "oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:562fb5f01ca7174dc55991dbfab646c5c742a2079f5792762700b25fef76bfbd", - "desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:562fb5f01ca7174dc55991dbfab646c5c742a2079f5792762700b25fef76bfbd", - "size": 1265 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:562fb5f01ca7174dc55991dbfab646c5c742a2079f5792762700b25fef76bfbd" } }, "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", @@ -2624,47 +2906,47 @@ }, "resolvedParents": { "golang:1.19-alpine3.16": { - "manifest": { - "ref": "golang:1.19-alpine3.16@sha256:b6e5dbb93caec9210c116a2b8f0ca160152c319112f34a06f53ea393805261e3", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:b6e5dbb93caec9210c116a2b8f0ca160152c319112f34a06f53ea393805261e3", "size": 1158, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:b6e5dbb93caec9210c116a2b8f0ca160152c319112f34a06f53ea393805261e3" + }, "platform": { "architecture": "s390x", "os": "linux" } } - }, - "index": { - "ref": "golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39", - "size": 1645 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/golang:1.19-alpine3.16@sha256:7d7cc4682f31c69ac36c34cdbd2a5d1963c7c007ed423b7b58b73613ae085e39" } }, "alpine:3.16": { - "manifest": { - "ref": "alpine:3.16@sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5", - "desc": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5", "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5" + }, "platform": { "architecture": "s390x", "os": "linux" } } - }, - "index": { - "ref": "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 - } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } } } @@ -2672,7 +2954,7 @@ "source": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -2687,11 +2969,10 @@ }, "arches": { "s390x": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "s390x/notary:signer-0.7.0", + "s390x/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -2730,7 +3011,7 @@ "source": { "sourceId": "a7e4b56dd1e5dde4c9d988092cb8639987559f13c5c92210664a4ffb880f222b", "reproducibleGitChecksum": "0ea17ff707666270e1fcb3edd76545906c68714d658ccde88c22d1606b2d7e4f", - "allTags": [ + "tags": [ "ubuntu:22.04", "ubuntu:jammy-20240111", "ubuntu:jammy", @@ -2747,13 +3028,12 @@ }, "arches": { "amd64": { - "tags": [ - "ubuntu:22.04", - "ubuntu:jammy-20240111", - "ubuntu:jammy", - "ubuntu:latest" + "archTags": [ + "amd64/ubuntu:22.04", + "amd64/ubuntu:jammy-20240111", + "amd64/ubuntu:jammy", + "amd64/ubuntu:latest" ], - "archTags": [], "froms": [ "scratch" ], diff --git a/.test/cache-builds.json b/.test/cache-builds.json index 8e791e3..44d4327 100644 --- a/.test/cache-builds.json +++ b/.test/cache-builds.json @@ -1,969 +1,1061 @@ { - "resolve": { - "alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b", - "size": 1638 + "indexes": { + "docker.io/library/alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - }, - "arches": { - "amd64": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330", - "size": 528, - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ], - "arm32v6": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6", - "size": 528, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v6" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ], - "arm32v7": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:b5a8cebd2749e0b4601d6c0f0bbf9734d87a64f80f1c20100070756531925069", - "size": 528, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v7" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ], - "arm64v8": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85", - "size": 528, - "platform": { - "architecture": "arm64", - "os": "linux", - "variant": "v8" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ], - "i386": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b", - "size": 528, - "platform": { - "architecture": "386", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ], - "ppc64le": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff", - "size": 528, - "platform": { - "architecture": "ppc64le", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ], - "s390x": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5", - "size": 528, - "platform": { - "architecture": "s390x", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.16@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" - } - ] - } - }, - "alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0", - "size": 1638 + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:1832ef473ede9a923cc6affdf13b54a1be6561ad2ce3c3684910260a7582d36b", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:1832ef473ede9a923cc6affdf13b54a1be6561ad2ce3c3684910260a7582d36b" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v6" + } }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - }, - "arches": { - "amd64": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389", - "size": 528, - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ], - "arm32v6": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:1832ef473ede9a923cc6affdf13b54a1be6561ad2ce3c3684910260a7582d36b", - "size": 528, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v6" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ], - "arm32v7": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:211fe64069acea47ea680c0943b5a77be1819d0e85365011595391f7562caf27", - "size": 528, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v7" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ], - "arm64v8": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:d4ade3639c27579321046d78cc44ec978cea8357d56932611984f601d27e30ac", - "size": 528, - "platform": { - "architecture": "arm64", - "os": "linux", - "variant": "v8" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ], - "i386": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:5ece42cd6ca30ec1a4cc5e1e10a260ad4906e1d4588ae0ef486874d72b3857ad", - "size": 528, - "platform": { - "architecture": "386", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ], - "ppc64le": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:1698bcd6bf339e1578dfb9f0034dff615e3eec8404517045046ecbeb84ad01d6", - "size": 528, - "platform": { - "architecture": "ppc64le", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ], - "s390x": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:5c63479aeed37522de78284d99dcd32f9ad288b04a56236f44e78b3b3f62ebd2", - "size": 528, - "platform": { - "architecture": "s390x", - "os": "linux" - } - }, - "ImageRef": "docker.io/library/alpine:3.18@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" - } - ] - } - }, - "mcr.microsoft.com/windows/servercore:1809@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b", - "size": 375 + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:211fe64069acea47ea680c0943b5a77be1819d0e85365011595391f7562caf27", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:211fe64069acea47ea680c0943b5a77be1819d0e85365011595391f7562caf27" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v7" + } }, - "ImageRef": "mcr.microsoft.com/windows/servercore:1809@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b" - }, - "arches": { - "windows-amd64": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:603e3b4f1d0d2565ad4945575a9fb5cd6b90cb6b4981fe551de509f09853ffc5", - "size": 596, - "platform": { - "architecture": "amd64", - "os": "windows", - "os.version": "10.0.17763.5122", - "os.features": [ - "win32k" - ] - } - }, - "ImageRef": "mcr.microsoft.com/windows/servercore:1809@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b" - } - ] + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:d4ade3639c27579321046d78cc44ec978cea8357d56932611984f601d27e30ac", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:d4ade3639c27579321046d78cc44ec978cea8357d56932611984f601d27e30ac" + }, + "platform": { + "architecture": "arm64", + "os": "linux", + "variant": "v8" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:5ece42cd6ca30ec1a4cc5e1e10a260ad4906e1d4588ae0ef486874d72b3857ad", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:5ece42cd6ca30ec1a4cc5e1e10a260ad4906e1d4588ae0ef486874d72b3857ad" + }, + "platform": { + "architecture": "386", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:1698bcd6bf339e1578dfb9f0034dff615e3eec8404517045046ecbeb84ad01d6", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:1698bcd6bf339e1578dfb9f0034dff615e3eec8404517045046ecbeb84ad01d6" + }, + "platform": { + "architecture": "ppc64le", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:5c63479aeed37522de78284d99dcd32f9ad288b04a56236f44e78b3b3f62ebd2", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:5c63479aeed37522de78284d99dcd32f9ad288b04a56236f44e78b3b3f62ebd2" + }, + "platform": { + "architecture": "s390x", + "os": "linux" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0" } }, - "mcr.microsoft.com/windows/servercore:ltsc2022@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", - "digest": "sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a", - "size": 375 + "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:ca452b8ab373e6de9c39d030870a52b8f0d3a9cf998c43183fd114660ae96330" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } }, - "ImageRef": "mcr.microsoft.com/windows/servercore:ltsc2022@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a" - }, - "arches": { - "windows-amd64": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4", - "size": 596, - "platform": { - "architecture": "amd64", - "os": "windows", - "os.version": "10.0.20348.2113", - "os.features": [ - "win32k" - ] - } - }, - "ImageRef": "mcr.microsoft.com/windows/servercore:ltsc2022@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a" - } - ] + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:50b367e964ca2624aaa480a693df28fdbc240e0c888c13f978e30f4efc2e7ae6" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v6" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:b5a8cebd2749e0b4601d6c0f0bbf9734d87a64f80f1c20100070756531925069", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:b5a8cebd2749e0b4601d6c0f0bbf9734d87a64f80f1c20100070756531925069" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v7" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:9796bcac681e439af8e4276c7849dcf38612bff029b3b66e4999d5625b6aef85" + }, + "platform": { + "architecture": "arm64", + "os": "linux", + "variant": "v8" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:69d5211febf80ceb758b09bed56969ca0b00560f812d58406dd8a31b65942b2b" + }, + "platform": { + "architecture": "386", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:b1da5b7282cab6b45d04b6da5185060bb7e17b3b70a48994c87f2c4cc97141ff" + }, + "platform": { + "architecture": "ppc64le", + "os": "linux" + } + }, + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5", + "size": 528, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:4fac498c31f00cb2289eae7cca6cfbefb923927d9b0fa9209aec4731c8bf1ea5" + }, + "platform": { + "architecture": "s390x", + "os": "linux" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/library/alpine@sha256:e4cdb7d47b06ba0a062ad2a97a7d154967c8f83934594d9f2bd3efa89292996b" } }, - "oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2", - "size": 1248 + "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", + "size": 2372, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", + "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", + "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", + "org.opencontainers.image.url": "https://hub.docker.com/_/docker", + "org.opencontainers.image.version": "24.0.7-cli" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43" - }, - "arches": { - "amd64": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", - "size": 2372, - "annotations": { - "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", - "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", - "org.opencontainers.image.url": "https://hub.docker.com/_/docker", - "org.opencontainers.image.version": "24.0.7-cli" - }, - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:061239943a7c3d3068527dbdac796118a9f0530d0478a48623f1a49d6aeb21e6", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:061239943a7c3d3068527dbdac796118a9f0530d0478a48623f1a49d6aeb21e6", + "vnd.docker.reference.digest": "sha256:0432a4d379794811b4a2e01d0d3e67a9bcf95d6c2bf71545f03bce3f1d60f401", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43@sha256:153793dfbac130679ad1eebd9e88b3772c47d3903a3f299c49d5c3f23a6e35d2" } }, - "oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:b41b0f3fcaf8866e4907a9104ece79aef61328789f3a3b4b9bf92eea5124a728", - "size": 1250 + "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", + "size": 3327, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", + "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", + "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", + "org.opencontainers.image.url": "https://hub.docker.com/_/docker", + "org.opencontainers.image.version": "24.0.7-dind" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621" - }, - "arches": { - "amd64": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", - "size": 3327, - "annotations": { - "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", - "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", - "org.opencontainers.image.url": "https://hub.docker.com/_/docker", - "org.opencontainers.image.version": "24.0.7-dind" - }, - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:bd33f1033e5aa789410574b03beda7415cfc5b7826beba9148d9ca45395029a7", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:bd33f1033e5aa789410574b03beda7415cfc5b7826beba9148d9ca45395029a7", + "vnd.docker.reference.digest": "sha256:4c92bd9328191f76e8eec6592ceb2e248aa7406dfc9505870812cf8ebee9326a", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:52e3bf2e5ae5606b777f60a7205b338af7ecf70bfebf714e52979dbf9a055621@sha256:b41b0f3fcaf8866e4907a9104ece79aef61328789f3a3b4b9bf92eea5124a728" } }, - "oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:0c0a250eb8a93d1d576e112f03c43c475748df50c007685863c5bf04d45ca3f3", - "size": 1265 + "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "signer-0.7.0" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9" - }, - "arches": { - "amd64": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "signer-0.7.0" - }, - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:9346c6fe8bf3d29a34e0e1d10f1730feff4461a2e4e2cec704a90490be890d77", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:9346c6fe8bf3d29a34e0e1d10f1730feff4461a2e4e2cec704a90490be890d77", + "vnd.docker.reference.digest": "sha256:a5f3cf14ec1f9dbe64f5038168764468bf8cf36023f8c1d763abd3bcbe2a5952", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:57c2ee0d050ffb54c7f2b50c57b807cce8a8c478648c2eb6bbdf1604b34dd1b9@sha256:0c0a250eb8a93d1d576e112f03c43c475748df50c007685863c5bf04d45ca3f3" } }, - "oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:09dd1c0183f992a4507d6e562a8e079b8583d19aaf8d991b0d22711c6b4525d7", - "size": 1265 + "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "server-0.7.0" + }, + "platform": { + "architecture": "amd64", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694" - }, - "arches": { - "amd64": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "server-0.7.0" - }, - "platform": { - "architecture": "amd64", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:692819af7e57efe94abadb451e05aa5eb042a540a2eae7095d37507dbd66dc94", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:692819af7e57efe94abadb451e05aa5eb042a540a2eae7095d37507dbd66dc94", + "vnd.docker.reference.digest": "sha256:4c3d07b2fed560ab0012452aa8a6f58533ddf2d4a3845fa89b74d9455816b454", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-amd64:71756dd75e41c4bc5144b64d36b4834a5a960c495470915eb69f96e9f2cb6694@sha256:09dd1c0183f992a4507d6e562a8e079b8583d19aaf8d991b0d22711c6b4525d7" } }, - "oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89": { - "resolved": { - "Desc": { + "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981", - "size": 2203 - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89" - }, - "arches": { - "arm32v6": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981", - "size": 2203, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v6" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89" - } - ] + "size": 2203, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v6" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:2fa4ebddfdbb2318be99958b867533429ec9fbff92c1e3ee53658609e5490a89@sha256:8afe342ba4d38a2924c9853d4fc812cebbfe56ad8509b80f752e04c4d0ec3981" } }, - "oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04": { - "resolved": { - "Desc": { + "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38", - "size": 3251 - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04" - }, - "arches": { - "arm32v6": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38", - "size": 3251, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v6" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04" - } - ] + "size": 3251, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04@sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v6" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:4e98c0f9e21663851c8cf186fb114fd2440f3de0b0a8d52f6154e23730d0ca04@sha256:db900d48c4071b64779ab61dbc65f20a01dfc9955eec6013c575c6df2c178f38" } }, - "oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1": { - "resolved": { - "Desc": { + "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e", - "size": 1774 - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1" - }, - "arches": { - "arm32v6": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e", - "size": 1774, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v6" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1" - } - ] + "size": 1774, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1@sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v6" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:d5ab9c988abb75a0da68a726aefdade29331f16f154bd15d41942f8d3476d3d1@sha256:9f245d4b08cfa9f6934e315f60699db5caacbf638d012c4c6f16dfa10066ae4e" } }, - "oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f": { - "resolved": { - "Desc": { + "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53", - "size": 1774 - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f" - }, - "arches": { - "arm32v6": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53", - "size": 1774, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v6" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f" - } - ] + "size": 1774, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v6", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f@sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v6" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v6:fe9c7d0064f7451bf4c72ab5a82845860a0a49af27fb3ffd0a00a1c20eeccc5f@sha256:65861e496c2a89861f24aae1e230413422204f5d85529405e213e137c03ddf53" } }, - "oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:c36ec6ddcbe0e9b0b9a2d957fc0521b01fbeca74d74aea790d3ca7a7dea690a3", - "size": 1273 + "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", + "size": 3327, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", + "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", + "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", + "org.opencontainers.image.url": "https://hub.docker.com/_/docker", + "org.opencontainers.image.version": "24.0.7-dind" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v7" + } }, - "ImageRef": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff" - }, - "arches": { - "arm32v7": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", - "size": 3327, - "annotations": { - "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", - "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", - "org.opencontainers.image.url": "https://hub.docker.com/_/docker", - "org.opencontainers.image.version": "24.0.7-dind" - }, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v7" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:9b19df42d31ff6d0bad19c17186093b153048b53ef33c7de0c9e76ae9a4412d0", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:9b19df42d31ff6d0bad19c17186093b153048b53ef33c7de0c9e76ae9a4412d0", + "vnd.docker.reference.digest": "sha256:dff21d22d9a1e8a1d927234ae319bbeb724737a921dc1a843fd218012b96e993", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:c87eaae1c3107315f6579700fcecec376d90c8d76e3fa59d5f3d2a18b81c44ff@sha256:c36ec6ddcbe0e9b0b9a2d957fc0521b01fbeca74d74aea790d3ca7a7dea690a3" } }, - "oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24", - "size": 1271 + "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", + "size": 2372, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", + "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", + "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", + "org.opencontainers.image.url": "https://hub.docker.com/_/docker", + "org.opencontainers.image.version": "24.0.7-cli" + }, + "platform": { + "architecture": "arm", + "os": "linux", + "variant": "v7" + } }, - "ImageRef": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9" - }, - "arches": { - "arm32v7": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", - "size": 2372, - "annotations": { - "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", - "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", - "org.opencontainers.image.url": "https://hub.docker.com/_/docker", - "org.opencontainers.image.version": "24.0.7-cli" - }, - "platform": { - "architecture": "arm", - "os": "linux", - "variant": "v7" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:a7d0fac0c3a8f3b752720cb1649fe2f42d8f487dda1f1fe1992500f5a9173073", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm32v7", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:a7d0fac0c3a8f3b752720cb1649fe2f42d8f487dda1f1fe1992500f5a9173073", + "vnd.docker.reference.digest": "sha256:8a0f2a979b051d037be8ada354394105ee3dbfe4bad4e5cf101047cdc2da3abf", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm32v7:f21b47c585fce7db3ff4f646bc87f483fecb3c920d6ec5fbf8a2d76a03ef7ae9@sha256:b6ebc3e33976b79e335395f06a860b09bb9482165ca7869a46f8411957eacf24" } }, - "oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:8a65a848a3d45898b726849eb47ddaa199e71d3962133f107a45f51fb74fd73a", - "size": 1265 + "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "server-0.7.0" + }, + "platform": { + "architecture": "arm64", + "os": "linux", + "variant": "v8" + } }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3" - }, - "arches": { - "arm64v8": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "server-0.7.0" - }, - "platform": { - "architecture": "arm64", - "os": "linux", - "variant": "v8" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:c854751d0900f72cc6aaa35d5219de9528cc80a236cac79febb9c6a8bcd451de", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:c854751d0900f72cc6aaa35d5219de9528cc80a236cac79febb9c6a8bcd451de", + "vnd.docker.reference.digest": "sha256:7cb971c2293a1784f771970101a6f7a684bee811b6ebd0cd9587fecf90d7ee8a", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:535b37066c5ad0d2d9684589705db75f5f33494fbae845627bc8d77f636769e3@sha256:8a65a848a3d45898b726849eb47ddaa199e71d3962133f107a45f51fb74fd73a" } }, - "oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca", - "size": 1248 + "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", + "size": 2372, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", + "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", + "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", + "org.opencontainers.image.url": "https://hub.docker.com/_/docker", + "org.opencontainers.image.version": "24.0.7-cli" + }, + "platform": { + "architecture": "arm64", + "os": "linux", + "variant": "v8" + } }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea" - }, - "arches": { - "arm64v8": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", - "size": 2372, - "annotations": { - "org.opencontainers.image.revision": "6d541d27b5dd12639e5a33a675ebca04d3837d74", - "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli", - "org.opencontainers.image.url": "https://hub.docker.com/_/docker", - "org.opencontainers.image.version": "24.0.7-cli" - }, - "platform": { - "architecture": "arm64", - "os": "linux", - "variant": "v8" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:0effa0c52019fb2ed38d7242c78931aebeab58ac3027747be88e499e0cdd3461", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:0effa0c52019fb2ed38d7242c78931aebeab58ac3027747be88e499e0cdd3461", + "vnd.docker.reference.digest": "sha256:bd9404aaf047e27974c67bac58a4b7c2975235056a67c4959d4565f8e2389b4b", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:bf4deeb14c5a100aed6a596cc974bb4db704d8189d9a09fb433e12644e3274ea@sha256:7f3e5197835a12756f5233447dbab9a5d67ab5e094a939308299a15edf5eefca" } }, - "oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:29e6cf08f34de4d30d19bcb21000596af6c215da8fbba5d04ae3d98b0bb665eb", - "size": 1265 + "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "signer-0.7.0" + }, + "platform": { + "architecture": "arm64", + "os": "linux", + "variant": "v8" + } }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691" - }, - "arches": { - "arm64v8": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "signer-0.7.0" - }, - "platform": { - "architecture": "arm64", - "os": "linux", - "variant": "v8" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:f5c7a9cc6bd851167a5b945b9057ded69c1ad64e0ce9416663550867a64c5756", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:f5c7a9cc6bd851167a5b945b9057ded69c1ad64e0ce9416663550867a64c5756", + "vnd.docker.reference.digest": "sha256:974493bb14128e55fa9a95615788a430df892ca0dcdba0141c81a543f7597ecb", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:d20c425b32e42806dff6d00acb99a8c95e14b773b978f44587f472aa38336691@sha256:29e6cf08f34de4d30d19bcb21000596af6c215da8fbba5d04ae3d98b0bb665eb" } }, - "oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:8cbf87eb14de4783e139d5cc69578f424754a0d7479175997aa30b0b49d436e3", - "size": 1250 + "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", + "size": 3327, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", + "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", + "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", + "org.opencontainers.image.url": "https://hub.docker.com/_/docker", + "org.opencontainers.image.version": "24.0.7-dind" + }, + "platform": { + "architecture": "arm64", + "os": "linux", + "variant": "v8" + } }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a" - }, - "arches": { - "arm64v8": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", - "size": 3327, - "annotations": { - "org.opencontainers.image.revision": "99073a3b6be3aa7e6b5af1e69509e8c532254500", - "org.opencontainers.image.source": "https://github.com/docker-library/docker.git#99073a3b6be3aa7e6b5af1e69509e8c532254500:24/dind", - "org.opencontainers.image.url": "https://hub.docker.com/_/docker", - "org.opencontainers.image.version": "24.0.7-dind" - }, - "platform": { - "architecture": "arm64", - "os": "linux", - "variant": "v8" - } - }, - "ImageRef": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:885deeb2bb863dbcf0b80bceb8b5be84de59c6132926911ed0d591fa8232935d", + "size": 840, + "annotations": { + "com.docker.official-images.bashbrew.arch": "arm64v8", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:885deeb2bb863dbcf0b80bceb8b5be84de59c6132926911ed0d591fa8232935d", + "vnd.docker.reference.digest": "sha256:2afeb0c1357ac43eb81976a3a84995645872ab18644f6799677cd786de54cf40", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-arm64v8:e8e572b413236b909b53fe962f2b91a981cfe91514f0f81b251b65e14a06e60a@sha256:8cbf87eb14de4783e139d5cc69578f424754a0d7479175997aa30b0b49d436e3" } }, - "oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:16f71e74b992a74d7c8e9dff93036f10aaf29f0e44a9ceb5b739d8113e82fcf7", - "size": 1263 + "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "server-0.7.0" + }, + "platform": { + "architecture": "386", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb" - }, - "arches": { - "i386": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "server-0.7.0" - }, - "platform": { - "architecture": "386", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:0b8400d1572fdb0f4c7543b5b66713df78a4c35200f8d147e8d424cc79def783", + "size": 567, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:0b8400d1572fdb0f4c7543b5b66713df78a4c35200f8d147e8d424cc79def783", + "vnd.docker.reference.digest": "sha256:e6d16088d6a27939ccbde71947f57ef7db02215049c18b82ccbc58ffc19875ab", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:7d563d914d72c37cc7a59c0ef9d5ede304412f9c5417b72e82d1963c70e8cbfb@sha256:16f71e74b992a74d7c8e9dff93036f10aaf29f0e44a9ceb5b739d8113e82fcf7" } }, - "oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:e56f38e952dd40f4f3e5d6f970e8868239e199efba77c43c8ad5f387f24de2fa", - "size": 1263 + "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "signer-0.7.0" + }, + "platform": { + "architecture": "386", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd" - }, - "arches": { - "i386": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "signer-0.7.0" - }, - "platform": { - "architecture": "386", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:35cff7b9737739368b4f6b47a2dc15f00f3d42ce52226c5298097ded29bf1a44", + "size": 567, + "annotations": { + "com.docker.official-images.bashbrew.arch": "i386", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:35cff7b9737739368b4f6b47a2dc15f00f3d42ce52226c5298097ded29bf1a44", + "vnd.docker.reference.digest": "sha256:b4dab61b2d4468f7afa31ff7fa2156ae7f053044df4c43aa2bad831dc166694c", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-i386:8a39d1f803b6bd6db6a5a231b5a4e2fc1d7fc13a10e22dd28cb25e16429b16fd@sha256:e56f38e952dd40f4f3e5d6f970e8868239e199efba77c43c8ad5f387f24de2fa" } }, - "oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:f4e1aff8b7e19c3842fb78b2be1e65ec9290e7c6783f087c813987b36400587a", - "size": 1267 + "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "server-0.7.0" + }, + "platform": { + "architecture": "ppc64le", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918" - }, - "arches": { - "ppc64le": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "server-0.7.0" - }, - "platform": { - "architecture": "ppc64le", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:6235a23c8e809f36b0e6a6ef45efe0079f9a92ddb62d4ac397241074b79d42c7", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:6235a23c8e809f36b0e6a6ef45efe0079f9a92ddb62d4ac397241074b79d42c7", + "vnd.docker.reference.digest": "sha256:ead953dd52edeea966545664b2c9fec2e1bb4d3a79671f95190819095351f641", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:c72366c942fc80dc984291207128f5df861e483aa0233ce6495c8a6e1c5d0918@sha256:f4e1aff8b7e19c3842fb78b2be1e65ec9290e7c6783f087c813987b36400587a" } }, - "oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:63b53ff8f8a08587f2dfe1f9dfbfd3bb3dc1e99ccf00cdf4c7c879ff947d50b3", - "size": 1267 + "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "signer-0.7.0" + }, + "platform": { + "architecture": "ppc64le", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f" - }, - "arches": { - "ppc64le": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "signer-0.7.0" - }, - "platform": { - "architecture": "ppc64le", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:d777a1b17cf821e4518af7210ec644a565bb09521fc8fed18cbb00b146457adc", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "ppc64le", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:d777a1b17cf821e4518af7210ec644a565bb09521fc8fed18cbb00b146457adc", + "vnd.docker.reference.digest": "sha256:8eb5fb1e9d7895f95d2c6485df3c1d62ae867114699be79bf388b931c587865d", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-ppc64le:fe5b5efb1e03f722dcda7652bd3f61f4f727dc2e9fe52d03ca626a9cf1ac849f@sha256:63b53ff8f8a08587f2dfe1f9dfbfd3bb3dc1e99ccf00cdf4c7c879ff947d50b3" } }, - "oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:562fb5f01ca7174dc55991dbfab646c5c742a2079f5792762700b25fef76bfbd", - "size": 1265 + "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "signer-0.7.0" + }, + "platform": { + "architecture": "s390x", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60" - }, - "arches": { - "s390x": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-signer", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "signer-0.7.0" - }, - "platform": { - "architecture": "s390x", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:c84dbdb9b42aafc6e1def960ec053709e57577b1eb06ea6cdb66da0e94acc640", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:c84dbdb9b42aafc6e1def960ec053709e57577b1eb06ea6cdb66da0e94acc640", + "vnd.docker.reference.digest": "sha256:23b5119f61f785a5bc3d0e08d81069495e7b7812a69f15f6894ff355737dee38", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:7ea69d395a11993aaef4cd29dd58bbcfe6189e984c367ed781fb4dd4bdb9ff60@sha256:562fb5f01ca7174dc55991dbfab646c5c742a2079f5792762700b25fef76bfbd" } }, - "oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11": { - "resolved": { - "Desc": { - "mediaType": "application/vnd.oci.image.index.v1+json", - "digest": "sha256:8b50da43831c731e8504c0b11dfb1573b3096428c780539b77db32ae76653199", - "size": 1265 + "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11": { + "schemaVersion": 2, + "mediaType": "application/vnd.oci.image.index.v1+json", + "manifests": [ + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", + "size": 1998, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", + "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", + "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", + "org.opencontainers.image.url": "https://hub.docker.com/_/notary", + "org.opencontainers.image.version": "server-0.7.0" + }, + "platform": { + "architecture": "s390x", + "os": "linux" + } }, - "ImageRef": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11" - }, - "arches": { - "s390x": [ - { - "Desc": { - "mediaType": "application/vnd.oci.image.manifest.v1+json", - "digest": "sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", - "size": 1998, - "annotations": { - "org.opencontainers.image.revision": "77b9b7833f8dd6be07104b214193788795a320ff", - "org.opencontainers.image.source": "https://github.com/docker/notary-official-images.git#77b9b7833f8dd6be07104b214193788795a320ff:notary-server", - "org.opencontainers.image.url": "https://hub.docker.com/_/notary", - "org.opencontainers.image.version": "server-0.7.0" - }, - "platform": { - "architecture": "s390x", - "os": "linux" - } - }, - "ImageRef": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11" - } - ] + { + "mediaType": "application/vnd.oci.image.manifest.v1+json", + "digest": "sha256:c35c2d748647d9150a218c6f9bba1ba76b2857c71608e21de4dea7e277400a5f", + "size": 839, + "annotations": { + "com.docker.official-images.bashbrew.arch": "s390x", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:c35c2d748647d9150a218c6f9bba1ba76b2857c71608e21de4dea7e277400a5f", + "vnd.docker.reference.digest": "sha256:66118e7982bb814a9d939808797fc0e073194732d5bcdb0afaa98c515d17ab23", + "vnd.docker.reference.type": "attestation-manifest" + }, + "platform": { + "architecture": "unknown", + "os": "unknown" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-s390x:bcf9a20ccb4e460c190294d900a06bfce1b9d9c703358b3f87ae0de4b30abf11@sha256:8b50da43831c731e8504c0b11dfb1573b3096428c780539b77db32ae76653199" } }, - "oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf": { - "resolved": { - "Desc": { + "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021", - "size": 3462 - }, - "ImageRef": "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf" - }, - "arches": { - "windows-amd64": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021", - "size": 3462, - "platform": { - "architecture": "amd64", - "os": "windows", - "os.version": "10.0.17763.5122" - } - }, - "ImageRef": "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf" - } - ] + "size": 3462, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf@sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021" + }, + "platform": { + "architecture": "amd64", + "os": "windows", + "os.version": "10.0.17763.5122" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:5efe68ed819e46db05a9b50e99c758feaf96df829939aca311b55e42df521acf@sha256:040cdf6cf38b4693b30bb38cae806e8b456d4458c2c257fb26d48e45c83b1021" } }, - "oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e": { - "resolved": { - "Desc": { + "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce", - "size": 3462 - }, - "ImageRef": "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e" - }, - "arches": { - "windows-amd64": [ - { - "Desc": { - "mediaType": "application/vnd.docker.distribution.manifest.v2+json", - "digest": "sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce", - "size": 3462, - "platform": { - "architecture": "amd64", - "os": "windows", - "os.version": "10.0.20348.2113" - } - }, - "ImageRef": "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e" - } - ] + "size": 3462, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e@sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce" + }, + "platform": { + "architecture": "amd64", + "os": "windows", + "os.version": "10.0.20348.2113" + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "docker.io/oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e@sha256:69aba7120e3f4014bfa80f4eae2cfc9698dcb6b8a5d64daf06de4039a19846ce" + } + }, + "mcr.microsoft.com/windows/servercore@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4", + "size": 596, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4" + }, + "platform": { + "architecture": "amd64", + "os": "windows", + "os.version": "10.0.20348.2113", + "os.features": [ + "win32k" + ] + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a" + } + }, + "mcr.microsoft.com/windows/servercore@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b": { + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "manifests": [ + { + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "digest": "sha256:603e3b4f1d0d2565ad4945575a9fb5cd6b90cb6b4981fe551de509f09853ffc5", + "size": 596, + "annotations": { + "com.docker.official-images.bashbrew.arch": "windows-amd64", + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:603e3b4f1d0d2565ad4945575a9fb5cd6b90cb6b4981fe551de509f09853ffc5" + }, + "platform": { + "architecture": "amd64", + "os": "windows", + "os.version": "10.0.17763.5122", + "os.features": [ + "win32k" + ] + } + } + ], + "annotations": { + "org.opencontainers.image.ref.name": "mcr.microsoft.com/windows/servercore@sha256:4fe58f25a157ea749c7b770acebfdbd70c3cb2088c446943e90fe89ea059558b" } } } diff --git a/.test/example-commands.sh b/.test/example-commands.sh index 6362482..da128a1 100644 --- a/.test/example-commands.sh +++ b/.test/example-commands.sh @@ -29,9 +29,14 @@ SOURCE_DATE_EPOCH=1700741054 \ --tag 'docker:24-cli' \ --tag 'docker:cli' \ --tag 'docker:24.0.7-cli-alpine3.18' \ + --tag 'amd64/docker:24.0.7-cli' \ + --tag 'amd64/docker:24.0-cli' \ + --tag 'amd64/docker:24-cli' \ + --tag 'amd64/docker:cli' \ + --tag 'amd64/docker:24.0.7-cli-alpine3.18' \ --tag 'oisupport/staging-amd64:4b199ac326c74b3058a147e14f553af9e8e1659abc29bd3e82c9c9807b66ee43' \ --platform 'linux/amd64' \ - --build-context 'alpine:3.18=docker-image://alpine:3.18@sha256:d695c3de6fcd8cfe3a6222b0358425d40adfd129a8a47c3416faff1a8aece389' \ + --build-context 'alpine:3.18=docker-image://alpine@sha256:34871e7290500828b39e22294660bee86d966bc0017544e848dd9a255cdf59e0' \ --build-arg BUILDKIT_SYNTAX="$BASHBREW_BUILDKIT_SYNTAX" \ --file 'Dockerfile' \ 'https://github.com/docker-library/docker.git#6d541d27b5dd12639e5a33a675ebca04d3837d74:24/cli' @@ -56,8 +61,8 @@ rm -rf temp # docker:24.0.7-windowsservercore-ltsc2022 [windows-amd64] # -docker pull 'mcr.microsoft.com/windows/servercore:ltsc2022@sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4' -docker tag 'mcr.microsoft.com/windows/servercore:ltsc2022@sha256:d4ab2dd7d3d0fce6edc5df459565a4c96bbb1d0148065b215ab5ddcab1e42eb4' 'mcr.microsoft.com/windows/servercore:ltsc2022' +docker pull 'mcr.microsoft.com/windows/servercore@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a' +docker tag 'mcr.microsoft.com/windows/servercore@sha256:308ef3f8ee3e9c9a1bdec460009c1e6394b329db13eb3149461f8841be5b538a' 'mcr.microsoft.com/windows/servercore:ltsc2022' # # SOURCE_DATE_EPOCH=1700741054 \ @@ -71,6 +76,14 @@ SOURCE_DATE_EPOCH=1700741054 \ --tag 'docker:24.0-windowsservercore' \ --tag 'docker:24-windowsservercore' \ --tag 'docker:windowsservercore' \ + --tag 'winamd64/docker:24.0.7-windowsservercore-ltsc2022' \ + --tag 'winamd64/docker:24.0-windowsservercore-ltsc2022' \ + --tag 'winamd64/docker:24-windowsservercore-ltsc2022' \ + --tag 'winamd64/docker:windowsservercore-ltsc2022' \ + --tag 'winamd64/docker:24.0.7-windowsservercore' \ + --tag 'winamd64/docker:24.0-windowsservercore' \ + --tag 'winamd64/docker:24-windowsservercore' \ + --tag 'winamd64/docker:windowsservercore' \ --tag 'oisupport/staging-windows-amd64:9b405cfa5b88ba65121aabdb95ae90fd2e1fee7582174de82ae861613ae3072e' \ --platform 'windows/amd64' \ --file 'Dockerfile' \ diff --git a/.test/sources.json b/.test/sources.json index ef54049..75646f4 100644 --- a/.test/sources.json +++ b/.test/sources.json @@ -2,7 +2,7 @@ "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b": { "sourceId": "76d7d7d66aeb62eb797c8475407e6cd2b6ad262957a622035f81fb93e532b36b", "reproducibleGitChecksum": "52d3d61b1e9d12310646ec3935698a5825bf568cecc5b5fbbf4e4c4a59e53e8b", - "allTags": [ + "tags": [ "docker:24.0.7-cli", "docker:24.0-cli", "docker:24-cli", @@ -20,14 +20,13 @@ }, "arches": { "amd64": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "amd64/docker:24.0.7-cli", + "amd64/docker:24.0-cli", + "amd64/docker:24-cli", + "amd64/docker:cli", + "amd64/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -45,14 +44,13 @@ } }, "arm32v6": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v6/docker:24.0.7-cli", + "arm32v6/docker:24.0-cli", + "arm32v6/docker:24-cli", + "arm32v6/docker:cli", + "arm32v6/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -71,14 +69,13 @@ } }, "arm32v7": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v7/docker:24.0.7-cli", + "arm32v7/docker:24.0-cli", + "arm32v7/docker:24-cli", + "arm32v7/docker:cli", + "arm32v7/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -97,14 +94,13 @@ } }, "arm64v8": { - "tags": [ - "docker:24.0.7-cli", - "docker:24.0-cli", - "docker:24-cli", - "docker:cli", - "docker:24.0.7-cli-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm64v8/docker:24.0.7-cli", + "arm64v8/docker:24.0-cli", + "arm64v8/docker:24-cli", + "arm64v8/docker:cli", + "arm64v8/docker:24.0.7-cli-alpine3.18" + ], "froms": [ "alpine:3.18" ], @@ -127,7 +123,7 @@ "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3": { "sourceId": "1f55272eded1ab37d8303492366ef26e8757c8210b24a4cb08f4fe2d63c692e3", "reproducibleGitChecksum": "e3ba9d8210082fcd33d20c53d99fc72f7a44d0d0a8abb5a4d6f54710b91f4c46", - "allTags": [ + "tags": [ "docker:24.0.7-dind", "docker:24.0-dind", "docker:24-dind", @@ -150,19 +146,18 @@ }, "arches": { "amd64": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "amd64/docker:24.0.7-dind", + "amd64/docker:24.0-dind", + "amd64/docker:24-dind", + "amd64/docker:dind", + "amd64/docker:24.0.7-dind-alpine3.18", + "amd64/docker:24.0.7", + "amd64/docker:24.0", + "amd64/docker:24", + "amd64/docker:latest", + "amd64/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -180,19 +175,18 @@ } }, "arm32v6": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v6/docker:24.0.7-dind", + "arm32v6/docker:24.0-dind", + "arm32v6/docker:24-dind", + "arm32v6/docker:dind", + "arm32v6/docker:24.0.7-dind-alpine3.18", + "arm32v6/docker:24.0.7", + "arm32v6/docker:24.0", + "arm32v6/docker:24", + "arm32v6/docker:latest", + "arm32v6/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -211,19 +205,18 @@ } }, "arm32v7": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm32v7/docker:24.0.7-dind", + "arm32v7/docker:24.0-dind", + "arm32v7/docker:24-dind", + "arm32v7/docker:dind", + "arm32v7/docker:24.0.7-dind-alpine3.18", + "arm32v7/docker:24.0.7", + "arm32v7/docker:24.0", + "arm32v7/docker:24", + "arm32v7/docker:latest", + "arm32v7/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -242,19 +235,18 @@ } }, "arm64v8": { - "tags": [ - "docker:24.0.7-dind", - "docker:24.0-dind", - "docker:24-dind", - "docker:dind", - "docker:24.0.7-dind-alpine3.18", - "docker:24.0.7", - "docker:24.0", - "docker:24", - "docker:latest", - "docker:24.0.7-alpine3.18" - ], - "archTags": [], + "archTags": [ + "arm64v8/docker:24.0.7-dind", + "arm64v8/docker:24.0-dind", + "arm64v8/docker:24-dind", + "arm64v8/docker:dind", + "arm64v8/docker:24.0.7-dind-alpine3.18", + "arm64v8/docker:24.0.7", + "arm64v8/docker:24.0", + "arm64v8/docker:24", + "arm64v8/docker:latest", + "arm64v8/docker:24.0.7-alpine3.18" + ], "froms": [ "docker:24-cli" ], @@ -277,7 +269,7 @@ "fc50de1b0dedf55655271fc22721b7d94e09a12d0e6ff6b76871ba6b808f5984": { "sourceId": "fc50de1b0dedf55655271fc22721b7d94e09a12d0e6ff6b76871ba6b808f5984", "reproducibleGitChecksum": "1711f6dcb5def8e2e6ce88e3a12c24e2dd37bf967a79ae86128c4d45429c0a2c", - "allTags": [ + "tags": [ "docker:24.0.7-windowsservercore-ltsc2022", "docker:24.0-windowsservercore-ltsc2022", "docker:24-windowsservercore-ltsc2022", @@ -298,17 +290,16 @@ }, "arches": { "windows-amd64": { - "tags": [ - "docker:24.0.7-windowsservercore-ltsc2022", - "docker:24.0-windowsservercore-ltsc2022", - "docker:24-windowsservercore-ltsc2022", - "docker:windowsservercore-ltsc2022", - "docker:24.0.7-windowsservercore", - "docker:24.0-windowsservercore", - "docker:24-windowsservercore", - "docker:windowsservercore" - ], - "archTags": [], + "archTags": [ + "winamd64/docker:24.0.7-windowsservercore-ltsc2022", + "winamd64/docker:24.0-windowsservercore-ltsc2022", + "winamd64/docker:24-windowsservercore-ltsc2022", + "winamd64/docker:windowsservercore-ltsc2022", + "winamd64/docker:24.0.7-windowsservercore", + "winamd64/docker:24.0-windowsservercore", + "winamd64/docker:24-windowsservercore", + "winamd64/docker:windowsservercore" + ], "froms": [ "mcr.microsoft.com/windows/servercore:ltsc2022" ], @@ -330,7 +321,7 @@ "10083d7e3bfbe4f9bdb3e38e4846b88d0bea1896caca9ef70de6478b3c20fe9a": { "sourceId": "10083d7e3bfbe4f9bdb3e38e4846b88d0bea1896caca9ef70de6478b3c20fe9a", "reproducibleGitChecksum": "40dcbc9e7a451cfc7f2bd12400074f3f21bc6c0331e249019623aeb617d18747", - "allTags": [ + "tags": [ "docker:24.0.7-windowsservercore-1809", "docker:24.0-windowsservercore-1809", "docker:24-windowsservercore-1809", @@ -351,17 +342,16 @@ }, "arches": { "windows-amd64": { - "tags": [ - "docker:24.0.7-windowsservercore-1809", - "docker:24.0-windowsservercore-1809", - "docker:24-windowsservercore-1809", - "docker:windowsservercore-1809", - "docker:24.0.7-windowsservercore", - "docker:24.0-windowsservercore", - "docker:24-windowsservercore", - "docker:windowsservercore" - ], - "archTags": [], + "archTags": [ + "winamd64/docker:24.0.7-windowsservercore-1809", + "winamd64/docker:24.0-windowsservercore-1809", + "winamd64/docker:24-windowsservercore-1809", + "winamd64/docker:windowsservercore-1809", + "winamd64/docker:24.0.7-windowsservercore", + "winamd64/docker:24.0-windowsservercore", + "winamd64/docker:24-windowsservercore", + "winamd64/docker:windowsservercore" + ], "froms": [ "mcr.microsoft.com/windows/servercore:1809" ], @@ -383,7 +373,7 @@ "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4": { "sourceId": "a9f3e362f7d26c466c22529d0a01d527e8900cbd9e0fabd2cc0ce342868768c4", "reproducibleGitChecksum": "63f1341601bbdd5930b9ce39f12c2a8c176d581e2687f9997444287b469409b0", - "allTags": [ + "tags": [ "notary:server-0.7.0", "notary:server" ], @@ -398,11 +388,10 @@ }, "arches": { "amd64": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "amd64/notary:server-0.7.0", + "amd64/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -426,11 +415,10 @@ } }, "arm32v6": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "arm32v6/notary:server-0.7.0", + "arm32v6/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -455,11 +443,10 @@ } }, "arm64v8": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "arm64v8/notary:server-0.7.0", + "arm64v8/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -484,11 +471,10 @@ } }, "i386": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "i386/notary:server-0.7.0", + "i386/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -512,11 +498,10 @@ } }, "ppc64le": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "ppc64le/notary:server-0.7.0", + "ppc64le/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -540,11 +525,10 @@ } }, "s390x": { - "tags": [ - "notary:server-0.7.0", - "notary:server" + "archTags": [ + "s390x/notary:server-0.7.0", + "s390x/notary:server" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -572,7 +556,7 @@ "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8": { "sourceId": "ae57bf4b8a7a08916ab01ec22da5d389716f39e9040d2c6f711283d7f8600da8", "reproducibleGitChecksum": "1af0a47c1f09f04f907156b2c6ee9df1eb2a71185bcddb9880ecf38b1fd69956", - "allTags": [ + "tags": [ "notary:signer-0.7.0", "notary:signer" ], @@ -587,11 +571,10 @@ }, "arches": { "amd64": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "amd64/notary:signer-0.7.0", + "amd64/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -615,11 +598,10 @@ } }, "arm32v6": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "arm32v6/notary:signer-0.7.0", + "arm32v6/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -644,11 +626,10 @@ } }, "arm64v8": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "arm64v8/notary:signer-0.7.0", + "arm64v8/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -673,11 +654,10 @@ } }, "i386": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "i386/notary:signer-0.7.0", + "i386/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -701,11 +681,10 @@ } }, "ppc64le": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "ppc64le/notary:signer-0.7.0", + "ppc64le/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -729,11 +708,10 @@ } }, "s390x": { - "tags": [ - "notary:signer-0.7.0", - "notary:signer" + "archTags": [ + "s390x/notary:signer-0.7.0", + "s390x/notary:signer" ], - "archTags": [], "froms": [ "golang:1.19-alpine3.16", "alpine:3.16", @@ -761,7 +739,7 @@ "a7e4b56dd1e5dde4c9d988092cb8639987559f13c5c92210664a4ffb880f222b": { "sourceId": "a7e4b56dd1e5dde4c9d988092cb8639987559f13c5c92210664a4ffb880f222b", "reproducibleGitChecksum": "0ea17ff707666270e1fcb3edd76545906c68714d658ccde88c22d1606b2d7e4f", - "allTags": [ + "tags": [ "ubuntu:22.04", "ubuntu:jammy-20240111", "ubuntu:jammy", @@ -778,13 +756,12 @@ }, "arches": { "amd64": { - "tags": [ - "ubuntu:22.04", - "ubuntu:jammy-20240111", - "ubuntu:jammy", - "ubuntu:latest" + "archTags": [ + "amd64/ubuntu:22.04", + "amd64/ubuntu:jammy-20240111", + "amd64/ubuntu:jammy", + "amd64/ubuntu:latest" ], - "archTags": [], "froms": [ "scratch" ], diff --git a/.test/test.sh b/.test/test.sh index 0a64f9d..4dbabeb 100755 --- a/.test/test.sh +++ b/.test/test.sh @@ -1,7 +1,19 @@ #!/usr/bin/env bash set -Eeuo pipefail -export BASHBREW_ARCH_NAMESPACES= +export BASHBREW_ARCH_NAMESPACES=' + amd64 = amd64, + arm32v5 = arm32v5, + arm32v6 = arm32v6, + arm32v7 = arm32v7, + arm64v8 = arm64v8, + i386 = i386, + mips64le = mips64le, + ppc64le = ppc64le, + riscv64 = riscv64, + s390x = s390x, + windows-amd64 = winamd64, +' export BASHBREW_STAGING_TEMPLATE='oisupport/staging-ARCH:BUILD' dir="$(dirname "$BASH_SOURCE")" @@ -32,7 +44,7 @@ SOURCE_DATE_EPOCH=0 jq -r -L "$dir/.." ' | commands | to_entries | map("# <\(.key)>\n\(.value)\n# ") - | "# \(first($b.source.allTags[])) [\($b.build.arch)]\n" + join("\n") + | "# \($b.source.tags[0]) [\($b.build.arch)]\n" + join("\n") ) | join("\n\n") ' "$dir/builds.json" > "$dir/example-commands.sh" diff --git a/Jenkinsfile.build b/Jenkinsfile.build index 5b4e6ec..114333e 100644 --- a/Jenkinsfile.build +++ b/Jenkinsfile.build @@ -77,7 +77,7 @@ node('multiarch-' + env.BASHBREW_ARCH) { ansiColor('xterm') { } if (obj) { obj = readJSON(text: obj) - currentBuild.displayName = obj.source.allTags[0] + ' (#' + currentBuild.number + ')' + currentBuild.displayName = obj.source.tags[0] + ' (#' + currentBuild.number + ')' currentBuild.description = '' + obj.build.img + '' } else { currentBuild.displayName = 'nothing to do (#' + currentBuild.number + ')' diff --git a/Jenkinsfile.trigger b/Jenkinsfile.trigger index 4984c3a..8c3a991 100644 --- a/Jenkinsfile.trigger +++ b/Jenkinsfile.trigger @@ -95,7 +95,7 @@ node { ), ]) { for (buildObj in queue) { - def identifier = buildObj.source.allTags[0] + ' (' + buildObj.build.arch + ')' + def identifier = buildObj.source.tags[0] + ' (' + buildObj.build.arch + ')' def json = writeJSON(json: buildObj, returnText: true) withEnv([ 'json=' + json, @@ -116,7 +116,7 @@ node { { buildId: .buildId, bashbrewArch: .build.arch, - firstTag: .source.allTags[0], + firstTag: .source.tags[0], } + ( [ .build.resolvedParents[].manifest.desc.platform? | select(has("os.version")) | ."os.version" ][0] // "" | if . != "" then @@ -166,7 +166,7 @@ def pastFailedJobs = readJSON(text: pastFailedJobsJson) def newFailedJobs = [:] for (buildObj in queue) { - def identifier = buildObj.source.allTags[0] + def identifier = buildObj.source.tags[0] def json = writeJSON(json: buildObj, returnText: true) withEnv([ 'json=' + json, diff --git a/builds.go b/builds.go index 9e00b87..3fa6583 100644 --- a/builds.go +++ b/builds.go @@ -4,30 +4,25 @@ import ( "context" "crypto/sha256" "encoding/json" - "errors" "fmt" "io" "os" "os/exec" + "os/signal" "strings" "sync" - "time" "github.com/docker-library/meta-scripts/om" + "github.com/docker-library/meta-scripts/registry" - c8derrdefs "github.com/containerd/containerd/errdefs" - c8derrs "github.com/containerd/containerd/remotes/errors" - "github.com/docker-library/bashbrew/registry" ocispec "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/sirupsen/logrus" // this is used by containerd libraries, so we need to set the default log level for it - "golang.org/x/time/rate" ) var concurrency = 1000 type MetaSource struct { SourceID string `json:"sourceId"` - AllTags []string `json:"allTags"` + Tags []string `json:"tags"` Arches map[string]struct { Parents om.OrderedMap[struct { SourceID *string `json:"sourceId"` @@ -36,16 +31,6 @@ type MetaSource struct { } } -type RemoteResolved struct { - Ref string `json:"ref"` - Desc ocispec.Descriptor `json:"desc"` -} - -type RemoteResolvedFull struct { - Manifest RemoteResolved `json:"manifest"` - Index *RemoteResolved `json:"index,omitempty"` -} - type BuildIDParts struct { SourceID string `json:"sourceId"` Arch string `json:"arch"` @@ -55,156 +40,104 @@ type BuildIDParts struct { type MetaBuild struct { BuildID string `json:"buildId"` Build struct { - Img string `json:"img"` - Resolved *RemoteResolvedFull `json:"resolved"` + Img string `json:"img"` + Resolved *ocispec.Index `json:"resolved"` BuildIDParts - ResolvedParents om.OrderedMap[RemoteResolvedFull] `json:"resolvedParents"` + ResolvedParents om.OrderedMap[ocispec.Index] `json:"resolvedParents"` } `json:"build"` Source json.RawMessage `json:"source"` } var ( - // keys are image/tag names, values are functions that return either cacheResolveType or error + // keys are image/tag names, values are functions that return either *ocispec.Index or error cacheResolve = sync.Map{} cacheFile string - - registryRateLimiter = rate.NewLimiter(100/rate.Limit((1*time.Minute).Seconds()), 100) // stick to at most 100/min in registry/Hub requests (and allow an immediate burst of 100) ) -type cacheResolveType struct { - Resolved *registry.ResolvedObject `json:"resolved"` - Arches map[string][]registry.ResolvedObject `json:"arches"` -} - -func resolveRemoteArch(ctx context.Context, img string, arch string, diskCacheForSure bool) (*RemoteResolvedFull, error) { - cacheFunc, wasCached := cacheResolve.LoadOrStore(img, sync.OnceValues(func() (*cacheResolveType, error) { - var ( - ret = cacheResolveType{} - err error - individualLookupLimiter = rate.NewLimiter(rate.Every(time.Second), 2) // only do each image lookup at most once per second - ) - - shouldRetry := func(err error) bool { - if err == nil { - return false - } - var ret bool - var statusErr *c8derrs.ErrUnexpectedStatus - if errors.As(err, &statusErr) { - // "Too Many Requests" (new-style containerd error) - ret = statusErr.StatusCode == 429 - } else { - // another (older) flavor of 429; https://github.com/containerd/containerd/tree/v1.6.19/remotes/docker/resolver.go#L302 - ret = strings.Contains(err.Error(), "429 Too Many Requests") - } - if ret { - for i := registryRateLimiter.Tokens(); i > 0; i-- { - // just eat all available tokens and starve out the rate limiter - _ = registryRateLimiter.Allow() - } - } - return ret - } - - for { - if err := individualLookupLimiter.Wait(ctx); err != nil { - return nil, err - } - if err := registryRateLimiter.Wait(ctx); err != nil { - return nil, err - } - - ret.Resolved, err = registry.Resolve(ctx, img) - if c8derrdefs.IsNotFound(err) { - return nil, nil - } else if shouldRetry(err) { - fmt.Fprintf(os.Stderr, "warning: lookup %q errored (%q); will retry...\n", img, err) - continue - } else if err != nil { - return nil, err - } - - break - } - - for { - if err := individualLookupLimiter.Wait(ctx); err != nil { - return nil, err - } - if err := registryRateLimiter.Wait(ctx); err != nil { - return nil, err - } - - // TODO more efficient lookup of single architecture? (probably doesn't matter much, and then we have to have two independent caches) - ret.Arches, err = ret.Resolved.Architectures(ctx) - if shouldRetry(err) { - fmt.Fprintf(os.Stderr, "warning: lookup arches for %q errored (%q); will retry...\n", img, err) - continue - } else if err != nil { - return nil, err - } - - break - } +func resolveIndex(ctx context.Context, img string, diskCacheForSure bool) (*ocispec.Index, error) { + ref, err := registry.ParseRefNormalized(img) + if err != nil { + return nil, err + } + if ref.Digest != "" { + // we use "ref" as a cache key, so if we have an explicit digest, ditch any tag data + ref.Tag = "" + } else if ref.Tag == "" { + ref.Tag = "latest" + } + refString := ref.String() - return &ret, nil + cacheFunc, wasCached := cacheResolve.LoadOrStore(refString, sync.OnceValues(func() (*ocispec.Index, error) { + return registry.SynthesizeIndex(ctx, ref) })) - cache, err := cacheFunc.(func() (*cacheResolveType, error))() + + index, err := cacheFunc.(func() (*ocispec.Index, error))() if err != nil { return nil, err } - if cache == nil { + if index == nil { return nil, nil } - r := cache.Resolved - rArches := cache.Arches - if !wasCached { - fmt.Fprintf(os.Stderr, "NOTE: lookup %s -> %s\n", img, r.Desc.Digest) + fmt.Fprintf(os.Stderr, "NOTE: lookup %s -> %s\n", img, strings.TrimPrefix(index.Annotations[ocispec.AnnotationRefName], refString)) } if !diskCacheForSure { // if we don't know we should cache this lookup for sure, the answer is whether it's a by-digest lookup :) - diskCacheForSure = strings.Contains(img, "@") + diskCacheForSure = (ref.Digest != "") } if diskCacheForSure { saveCacheMutex.Lock() if saveCache != nil { - saveCache.Resolve[img] = cache + saveCache.Indexes[refString] = index } saveCacheMutex.Unlock() } - if _, ok := rArches[arch]; !ok { - // TODO this should probably be just like a 404, right? (it's effectively a 404, even if it's not literally a 404) - return nil, fmt.Errorf("%s missing %s arch", img, arch) - } - // TODO warn/error on multiple entries for arch? (would mean something like index/manifest list with multiple os.version values for Windows - we avoid this in DOI today, but we don't have any automated *checks* for it, so the current state is a little precarious) + return index, nil +} - ref := func(obj *registry.ResolvedObject) string { - base, _, _ := strings.Cut(obj.ImageRef, "@") - base = strings.TrimPrefix(base, "docker.io/") - base = strings.TrimPrefix(base, "library/") - return base + "@" + string(obj.Desc.Digest) +func resolveArchIndex(ctx context.Context, img string, arch string, diskCacheForSure bool) (*ocispec.Index, error) { + index, err := resolveIndex(ctx, img, diskCacheForSure) + if err != nil { + return nil, err } - resolved := &RemoteResolvedFull{ - Manifest: RemoteResolved{ - Ref: ref(&rArches[arch][0]), - Desc: rArches[arch][0].Desc, - }, + if index == nil { + return index, nil } - if r.IsImageIndex() { - resolved.Index = &RemoteResolved{ - Ref: ref(r), - Desc: r.Desc, + + // janky little "deep copy" to avoid mutating the original index (and screwing up our cache / other arch lookups of the same image) + indexCopy := *index + indexCopy.Manifests = nil + indexCopy.Manifests = append(indexCopy.Manifests, index.Manifests...) + // TODO top-level *and* nested Annotations/URLs/Platform also? (we don't currently mutate any of those, so not critical) + index = &indexCopy + + i := 0 // https://go.dev/wiki/SliceTricks#filter-in-place (used to delete references that don't belong to the selected architecture) + for _, m := range index.Manifests { + if m.Annotations[registry.AnnotationBashbrewArch] != arch { + continue } + index.Manifests[i] = m + i++ + } + index.Manifests = index.Manifests[:i] // https://go.dev/wiki/SliceTricks#filter-in-place + + // TODO set an annotation on the index to specify whether or not we actually filtered anything (or whether it's safe to copy the original index as-is during arch-specific deploy instead of reconstructing it from all the parts); maybe a list of digests that were skipped/excluded? + // see matching TODO over in registry.SynthesizeIndex (which this needs to also respect/keep/supplement, if/when we implement it here) + + if len(index.Manifests) == 0 { + return nil, nil } - return resolved, nil + + // TODO if we have more than one *actual* image match for arch (not just an attestation), this should error!! (would mean something like index/manifest list with multiple os.version values for Windows - we avoid this in DOI today, but we don't have any automated *checks* for it, so the current state is a little precarious) + + return index, nil } type cacheFileContents struct { - Resolve map[string]*cacheResolveType `json:"resolve"` + Indexes map[string]*ocispec.Index `json:"indexes"` } var ( @@ -219,7 +152,7 @@ func loadCacheFromFile() error { // now that we know we have a file we want cache to go into (and come from), let's initialize the "saveCache" (which will be written when the whole process is done / we're successful, and *only* caches staging images) saveCacheMutex.Lock() - saveCache = &cacheFileContents{Resolve: map[string]*cacheResolveType{}} + saveCache = &cacheFileContents{Indexes: map[string]*ocispec.Index{}} saveCacheMutex.Unlock() f, err := os.Open(cacheFile) @@ -236,18 +169,18 @@ func loadCacheFromFile() error { return err } - for img, r := range cache.Resolve { - r := r // https://github.com/golang/go/issues/60078 - fun, _ := cacheResolve.LoadOrStore(img, sync.OnceValues(func() (*cacheResolveType, error) { - return r, nil + for img, index := range cache.Indexes { + index := index // https://github.com/golang/go/issues/60078 + fun, _ := cacheResolve.LoadOrStore(img, sync.OnceValues(func() (*ocispec.Index, error) { + return index, nil })) - r2, err := fun.(func() (*cacheResolveType, error))() + index2, err := fun.(func() (*ocispec.Index, error))() if err != nil { // this should never happen (hence panic vs return) 🙈 panic(err) } - if r2 != r { - panic("r2 != r??? " + img) + if index2 != index { + panic("index2 != index??? " + img) } } @@ -280,6 +213,9 @@ func saveCacheToFile() error { } func main() { + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) + defer stop() + sourcesJsonFile := os.Args[1] // "sources.json" // support "--cache foo.json" and "--cache=foo.json" @@ -299,9 +235,6 @@ func main() { panic("invalid BASHBREW_STAGING_TEMPLATE (missing BUILD)") } - // containerd uses logrus, but it defaults to "info" (which is a bit leaky where we use containerd) - logrus.SetLevel(logrus.WarnLevel) - type out struct { buildId string json []byte @@ -321,7 +254,7 @@ func main() { panic(err) } - sourceArchResolved := map[string](func() *RemoteResolvedFull){} + sourceArchResolved := map[string](func() *ocispec.Index){} sourceArchResolvedMutex := sync.RWMutex{} decoder := json.NewDecoder(stdout) @@ -352,13 +285,13 @@ func main() { outChan := make(chan out, 1) outs <- outChan - sourceArchResolvedFunc := sync.OnceValue(func() *RemoteResolvedFull { + sourceArchResolvedFunc := sync.OnceValue(func() *ocispec.Index { for _, from := range source.Arches[build.Build.Arch].Parents.Keys() { - parent := source.Arches[build.Build.Arch].Parents.Get(from) if from == "scratch" { continue } - var resolved *RemoteResolvedFull + var resolved *ocispec.Index + parent := source.Arches[build.Build.Arch].Parents.Get(from) if parent.SourceID != nil { sourceArchResolvedMutex.RLock() resolvedFunc, ok := sourceArchResolved[*parent.SourceID+"-"+build.Build.Arch] @@ -373,18 +306,18 @@ func main() { lookup += "@" + *parent.Pin } - resolved, err = resolveRemoteArch(context.TODO(), lookup, build.Build.Arch, false) + resolved, err = resolveArchIndex(ctx, lookup, build.Build.Arch, false) if err != nil { panic(err) } } if resolved == nil { - fmt.Fprintf(os.Stderr, "%s (%s) -> not yet! [%s]\n", source.SourceID, source.AllTags[0], build.Build.Arch) + fmt.Fprintf(os.Stderr, "%s (%s) -> not yet! [%s]\n", source.SourceID, source.Tags[0], build.Build.Arch) close(outChan) return nil } build.Build.ResolvedParents.Set(from, *resolved) - build.Build.Parents.Set(from, string(resolved.Manifest.Desc.Digest)) + build.Build.Parents.Set(from, string(resolved.Manifests[0].Digest)) } // buildId calculation @@ -396,11 +329,11 @@ func main() { // TODO if we ever have a bigger "buildId break" event (like adding major base images that force the whole tree to rebuild), we should probably ditch this newline build.BuildID = fmt.Sprintf("%x", sha256.Sum256(buildIDJSON)) - fmt.Fprintf(os.Stderr, "%s (%s) -> %s [%s]\n", source.SourceID, source.AllTags[0], build.BuildID, build.Build.Arch) + fmt.Fprintf(os.Stderr, "%s (%s) -> %s [%s]\n", source.SourceID, source.Tags[0], build.BuildID, build.Build.Arch) build.Build.Img = strings.ReplaceAll(strings.ReplaceAll(stagingTemplate, "BUILD", build.BuildID), "ARCH", build.Build.Arch) // "oisupport/staging-amd64:xxxx" - build.Build.Resolved, err = resolveRemoteArch(context.TODO(), build.Build.Img, build.Build.Arch, true) + build.Build.Resolved, err = resolveArchIndex(ctx, build.Build.Img, build.Build.Arch, true) if err != nil { panic(err) } diff --git a/go.mod b/go.mod index beaa74f..f900ad9 100644 --- a/go.mod +++ b/go.mod @@ -3,22 +3,22 @@ module github.com/docker-library/meta-scripts go 1.21 require ( - github.com/containerd/containerd v1.6.19 + cuelabs.dev/go/oci/ociregistry v0.0.0-20240214163758-5ebe80b0a9a6 github.com/docker-library/bashbrew v0.1.11 - github.com/opencontainers/image-spec v1.1.0-rc2.0.20221013174636-8159c8264e2e - github.com/sirupsen/logrus v1.9.0 + github.com/opencontainers/go-digest v1.0.0 + github.com/opencontainers/image-spec v1.1.0 golang.org/x/time v0.5.0 ) require ( + github.com/containerd/containerd v1.6.19 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/klauspost/compress v1.15.13 // indirect - github.com/moby/locker v1.0.1 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.5.0 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + golang.org/x/sys v0.13.0 // indirect google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect google.golang.org/grpc v1.51.0 // indirect google.golang.org/protobuf v1.28.1 // indirect ) + +// https://github.com/cue-labs/oci/pull/27 +replace cuelabs.dev/go/oci/ociregistry => github.com/tianon/cuelabs-oci/ociregistry v0.0.0-20240216044210-8aa0c990bd77 diff --git a/go.sum b/go.sum index d1160f4..d3d7a29 100644 --- a/go.sum +++ b/go.sum @@ -5,43 +5,47 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker-library/bashbrew v0.1.11 h1:9S6jYFu0+RaqEAfvS2lh7jcaDkcvFi2maB2aU3yb0TM= github.com/docker-library/bashbrew v0.1.11/go.mod h1:6fyRRSm4vgBAgTw87EsfOT7wXKsc4JA9I5cdQJmwOm8= +github.com/go-quicktest/qt v1.100.0 h1:I7iSLgIwNp0E0UnSvKJzs7ig0jg/Iq83zsZjtQNW7jY= +github.com/go-quicktest/qt v1.100.0/go.mod h1:leyLsQ4jksGmF1KaQEyabnqGIiJTbOU5S46QegToEj4= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= -github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0-rc2.0.20221013174636-8159c8264e2e h1:s/Yjbl65/SrXqrMXDSP7eeC1vGZP3mOpya4rNeTwTKY= -github.com/opencontainers/image-spec v1.1.0-rc2.0.20221013174636-8159c8264e2e/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97 h1:3RPlVWzZ/PDqmVuf/FKHARG5EMid/tl7cv54Sw/QRVY= +github.com/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tianon/cuelabs-oci/ociregistry v0.0.0-20240216044210-8aa0c990bd77 h1:9EPZm+sGlYHo6LleMXWR6s3P8SJEYA7/aovpJ76JSpw= +github.com/tianon/cuelabs-oci/ociregistry v0.0.0-20240216044210-8aa0c990bd77/go.mod h1:ApHceQLLwcOkCEXM1+DyCXTHEJhNGDpJ2kmV6axsx24= golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 h1:jmIfw8+gSvXcZSgaFAGyInDXeWzUhvYH57G/5GKMn70= google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= diff --git a/jenkins.jq b/jenkins.jq index 6e88445..9bb2e6d 100644 --- a/jenkins.jq +++ b/jenkins.jq @@ -2,9 +2,9 @@ # output: stream of crane copy command strings def crane_deploy_commands: reduce (.[] | select(.build.resolved and .build.arch == env.BASHBREW_ARCH)) as $i ({}; - .[ $i.source.arches[].archTags[] ] += [ - $i.build.resolved - | .index.ref // .manifest.ref + .[ $i.source.arches[$i.build.arch].archTags[] ] += [ + $i.build.resolved.annotations["org.opencontainers.image.ref.name"] // error("\($i.build.img) missing a resolved ref") + # TODO ideally we'd use .manifests[] here to take advantage of the filtering we've done at previous steps, but then we lose in-index annotations because `crane index append` can't really do that ] ) | to_entries[] diff --git a/lookup.go b/lookup.go new file mode 100644 index 0000000..46123fe --- /dev/null +++ b/lookup.go @@ -0,0 +1,35 @@ +package main + +// a simple utility for debugging "registry.SynthesizeIndex" (similar to / the next evolution of "bashbrew remote arches --json") + +import ( + "context" + "encoding/json" + "os" + "os/signal" + + "github.com/docker-library/meta-scripts/registry" +) + +func main() { + ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) + defer stop() + + img := os.Args[1] + + ref, err := registry.ParseRefNormalized(img) + if err != nil { + panic(err) + } + + index, err := registry.SynthesizeIndex(ctx, ref) + if err != nil { + panic(err) + } + + e := json.NewEncoder(os.Stdout) + e.SetIndent("", "\t") + if err := e.Encode(index); err != nil { + panic(err) + } +} diff --git a/meta.jq b/meta.jq index 828c565..3372567 100644 --- a/meta.jq +++ b/meta.jq @@ -38,6 +38,12 @@ def should_use_docker_buildx_driver: ) ) ; +# input: "docker.io/library/foo:bar" +# output: "foo:bar" +def normalize_ref_to_docker: + ltrimstr("docker.io/") + | ltrimstr("library/") +; # input: "build" object (with "buildId" top level key) # output: string "pull command" ("docker pull ..."), may be multiple lines, expects to run in Bash with "set -Eeuo pipefail", might be empty def pull_command: @@ -45,9 +51,14 @@ def pull_command: | if $builder == "classic" or should_use_docker_buildx_driver then [ ( - .build.resolvedParents | to_entries[] | - @sh "docker pull \(.value.manifest.ref)", - @sh "docker tag \(.value.manifest.ref) \(.key)" + .build.resolvedParents + | to_entries[] + | ( + .value.annotations["org.opencontainers.image.ref.name"] // error("parent \(.key) missing ref") + | normalize_ref_to_docker + ) as $ref + | @sh "docker pull \($ref)", + @sh "docker tag \($ref) \(.key)" ), empty ] | join("\n") @@ -81,19 +92,19 @@ def git_build_url: # output: map of annotations to set def build_annotations($buildUrl): { - # https://github.com/opencontainers/image-spec/blob/v1.1.0-rc4/annotations.md#pre-defined-annotation-keys + # https://github.com/opencontainers/image-spec/blob/v1.1.0/annotations.md#pre-defined-annotation-keys "org.opencontainers.image.source": $buildUrl, "org.opencontainers.image.revision": .source.entry.GitCommit, "org.opencontainers.image.created": (.source.entry.SOURCE_DATE_EPOCH | strftime("%FT%TZ")), # see notes below about image index vs image manifest # TODO come up with less assuming values here? (Docker Hub assumption, tag ordering assumption) "org.opencontainers.image.version": ( # value of the first image tag - first(.source.allTags[] | select(contains(":"))) + first(.source.tags[] | select(contains(":"))) | sub("^.*:"; "") # TODO maybe we should do the first, longest, non-latest tag instead of just the first tag? ), "org.opencontainers.image.url": ( # URL to Docker Hub - first(.source.allTags[] | select(contains(":"))) + first(.source.tags[] | select(contains(":"))) | sub(":.*$"; "") | if contains("/") then "r/" + . @@ -199,7 +210,7 @@ def build_command: else empty end ), ( - .source.arches[.build.arch].tags[], + .source.tags[], .source.arches[.build.arch].archTags[], .build.img | "--tag " + @sh @@ -208,7 +219,10 @@ def build_command: ( .build.resolvedParents | to_entries[] - | .key + "=docker-image://" + .value.manifest.ref + | .key + "=docker-image://" + ( + .value.annotations["org.opencontainers.image.ref.name"] // error("parent \(.key) missing ref") + | normalize_ref_to_docker + ) | "--build-context " + @sh ), "--build-arg BUILDKIT_SYNTAX=\"$BASHBREW_BUILDKIT_SYNTAX\"", # TODO .doi/.bin/bashbrew-buildkit-env-setup.sh @@ -251,7 +265,7 @@ def build_command: "DOCKER_BUILDKIT=0", "docker build", ( - .source.arches[.build.arch].tags[], + .source.tags[], .source.arches[.build.arch].archTags[], .build.img | "--tag " + @sh diff --git a/registry/annotations.go b/registry/annotations.go new file mode 100644 index 0000000..3666827 --- /dev/null +++ b/registry/annotations.go @@ -0,0 +1,15 @@ +package registry + +const ( + AnnotationBashbrewArch = "com.docker.official-images.bashbrew.arch" + + // https://docs.docker.com/build/attestations/attestation-storage/ + annotationBuildkitReferenceType = "vnd.docker.reference.type" + annotationBuildkitReferenceTypeAttestation = "attestation-manifest" + annotationBuildkitReferenceDigest = "vnd.docker.reference.digest" + + // https://github.com/distribution/distribution/blob/v3.0.0-alpha.1/docs/content/spec/manifest-v2-2.md + mediaTypeDockerManifestList = "application/vnd.docker.distribution.manifest.list.v2+json" + mediaTypeDockerImageManifest = "application/vnd.docker.distribution.manifest.v2+json" + mediaTypeDockerImageConfig = "application/vnd.docker.container.image.v1+json" +) diff --git a/registry/cache.go b/registry/cache.go new file mode 100644 index 0000000..3346d84 --- /dev/null +++ b/registry/cache.go @@ -0,0 +1,146 @@ +package registry + +import ( + "context" + "io" + "sync" + + "cuelabs.dev/go/oci/ociregistry" + "cuelabs.dev/go/oci/ociregistry/ocimem" +) + +// https://github.com/opencontainers/distribution-spec/pull/293#issuecomment-1452780554 +// TODO this should probably be submitted as a "const" in the image-spec ("ocispec.SuggestedManifestSizeLimit" or somesuch) +const manifestSizeLimit = 4 * 1024 * 1024 + +// this implements a transparent in-memory cache on top of objects less than 4MiB in size from the given registry -- it (currently) assumes a short lifecycle, not a long-running program, so use with care! +// +// TODO options (so we can control *what* gets cached, such as our size limit, whether to cache tag lookups, whether cached data should have a TTL, etc; see manifestSizeLimit and getBlob) +func RegistryCache(r ociregistry.Interface) ociregistry.Interface { + return ®istryCache{ + registry: r, // TODO support "nil" here so this can be a poor-man's ocimem implementation? 👀 see also https://github.com/cue-labs/oci/issues/24 + has: map[string]bool{}, + tags: map[string]ociregistry.Digest{}, + types: map[ociregistry.Digest]string{}, + data: map[ociregistry.Digest][]byte{}, + } +} + +type registryCache struct { + *ociregistry.Funcs + + registry ociregistry.Interface + + // https://github.com/cue-labs/oci/issues/24 + mu sync.Mutex // TODO some kind of per-object/name/digest mutex so we don't request the same object from the upstream registry concurrently (on *top* of our maps mutex)? + has map[string]bool // "repo/name@digest" => true (whether a given repo has the given digest) + tags map[string]ociregistry.Digest // "repo/name:tag" => digest + types map[ociregistry.Digest]string // digest => "mediaType" (most recent *storing* / "cache-miss" lookup wins, in the case of upstream/cross-repo ambiguity) + data map[ociregistry.Digest][]byte // digest => data +} + +func cacheKeyDigest(repo string, digest ociregistry.Digest) string { + return repo + "@" + digest.String() +} + +func cacheKeyTag(repo, tag string) string { + return repo + ":" + tag +} + +// a helper that implements GetBlob and GetManifest generically (since they're the same function signature and it doesn't really help *us* to treat those object types differently here) +func (rc *registryCache) getBlob(ctx context.Context, repo string, digest ociregistry.Digest, f func(ctx context.Context, repo string, digest ociregistry.Digest) (ociregistry.BlobReader, error)) (ociregistry.BlobReader, error) { + rc.mu.Lock() + defer rc.mu.Unlock() + + if b, ok := rc.data[digest]; ok && rc.has[cacheKeyDigest(repo, digest)] { + return ocimem.NewBytesReader(b, ociregistry.Descriptor{ + MediaType: rc.types[digest], + Digest: digest, + Size: int64(len(b)), + }), nil + } + + r, err := f(ctx, repo, digest) + if err != nil { + return nil, err + } + //defer r.Close() + + desc := r.Descriptor() + + rc.has[cacheKeyDigest(repo, desc.Digest)] = true + rc.types[desc.Digest] = desc.MediaType + + b, err := io.ReadAll(r) + if err != nil { + r.Close() + return nil, err + } + if err := r.Close(); err != nil { + return nil, err + } + + if len(b) <= manifestSizeLimit { + rc.data[desc.Digest] = b + } else { + delete(rc.data, desc.Digest) + } + + return ocimem.NewBytesReader(b, desc), nil +} + +func (rc *registryCache) GetBlob(ctx context.Context, repo string, digest ociregistry.Digest) (ociregistry.BlobReader, error) { + return rc.getBlob(ctx, repo, digest, rc.registry.GetBlob) +} + +func (rc *registryCache) GetManifest(ctx context.Context, repo string, digest ociregistry.Digest) (ociregistry.BlobReader, error) { + return rc.getBlob(ctx, repo, digest, rc.registry.GetManifest) +} + +func (rc *registryCache) GetTag(ctx context.Context, repo string, tag string) (ociregistry.BlobReader, error) { + rc.mu.Lock() + defer rc.mu.Unlock() + + tagKey := cacheKeyTag(repo, tag) + + if digest, ok := rc.tags[tagKey]; ok { + if b, ok := rc.data[digest]; ok { + return ocimem.NewBytesReader(b, ociregistry.Descriptor{ + MediaType: rc.types[digest], + Digest: digest, + Size: int64(len(b)), + }), nil + } + } + + r, err := rc.registry.GetTag(ctx, repo, tag) + if err != nil { + return nil, err + } + //defer r.Close() + + desc := r.Descriptor() + + rc.has[cacheKeyDigest(repo, desc.Digest)] = true + rc.tags[tagKey] = desc.Digest + rc.types[desc.Digest] = desc.MediaType + + b, err := io.ReadAll(r) + if err != nil { + r.Close() + return nil, err + } + if err := r.Close(); err != nil { + return nil, err + } + + if len(b) <= manifestSizeLimit { + rc.data[desc.Digest] = b + } else { + delete(rc.data, desc.Digest) + } + + return ocimem.NewBytesReader(b, desc), nil +} + +// TODO more methods (currently only implements what's actually necessary for SynthesizeIndex) diff --git a/registry/client.go b/registry/client.go new file mode 100644 index 0000000..a355a90 --- /dev/null +++ b/registry/client.go @@ -0,0 +1,164 @@ +package registry + +import ( + "fmt" + "net/http" + "net/url" + "os" + "strings" + "sync" + + "cuelabs.dev/go/oci/ociregistry" + "cuelabs.dev/go/oci/ociregistry/ociauth" + "cuelabs.dev/go/oci/ociregistry/ociclient" +) + +// returns an [ociregistry.Interface] that automatically implements an in-memory cache (see [RegistryCache]) *and* transparent rate limiting + retry (see [registryRateLimiters]/[rateLimitedRetryingDoer]) / `DOCKERHUB_PUBLIC_PROXY` support for Docker Hub (cached such that multiple calls for the same registry transparently return the same client object / in-memory registry cache) +func Client(host string, opts *ociclient.Options) (ociregistry.Interface, error) { + f, _ := clientCache.LoadOrStore(host, sync.OnceValues(func() (ociregistry.Interface, error) { + authConfig, err := authConfigFunc() + if err != nil { + return nil, err + } + + var clientOptions ociclient.Options + if opts != nil { + clientOptions = *opts + } + if clientOptions.HTTPClient == nil { + clientOptions.HTTPClient = http.DefaultClient + } + + // if we have a rate limiter configured for this registry, shim it in + if limiter, ok := registryRateLimiters[host]; ok { + clientOptions.HTTPClient = &rateLimitedRetryingDoer{ + doer: clientOptions.HTTPClient, + limiter: limiter, + } + } + + connectHost := host + if host == dockerHubCanonical { + connectHost = dockerHubConnect + } else if host == "localhost" || strings.HasPrefix(host, "localhost:") { + // assume localhost means HTTP + clientOptions.Insecure = true + // TODO some way for callers to specify that their "localhost" *does* require TLS (maybe only do this if `opts == nil`, but then users cannot supply *any* options and still get help setting Insecure for localhost 🤔 -- at least this is a more narrow use case than the opposite of not having a way to have non-localhost insecure registries) + } + + if clientOptions.Authorizer == nil { + // TODO https://github.com/cue-labs/oci/pull/28 -- ideally we'd set this sooner, but https://github.com/cue-labs/oci/blob/5ebe80b0a9a67ae83802d1fb1a189a8f0d089fb0/ociregistry/ociclient/client.go#L278-L282 means we have to do it late in case we installed a rate limiting HTTPClient (or the caller provided a custom one) + clientOptions.Authorizer = ociauth.NewStdAuthorizer(ociauth.StdAuthorizerParams{ + Config: authConfig, + HTTPClient: clientOptions.HTTPClient, + }) + } + + hostOptions := clientOptions // make a copy, since "ociclient.New" mutates it (such that sharing the object afterwards probably isn't the best idea -- they'll have the same DebugID if so, which isn't ideal) + client, err := ociclient.New(connectHost, &hostOptions) + if err != nil { + return nil, err + } + + if host == dockerHubCanonical { + var proxyHost string + proxyOptions := clientOptions + if proxy := os.Getenv("DOCKERHUB_PUBLIC_PROXY"); proxy != "" { + proxyUrl, err := url.Parse(proxy) + if err != nil { + return nil, fmt.Errorf("error parsing DOCKERHUB_PUBLIC_PROXY: %w", err) + } + if proxyUrl.Host == "" { + return nil, fmt.Errorf("DOCKERHUB_PUBLIC_PROXY was set, but has no host") + } + proxyHost = proxyUrl.Host + switch proxyUrl.Scheme { + case "", "https": + proxyOptions.Insecure = false + case "http": + proxyOptions.Insecure = true + default: + return nil, fmt.Errorf("unknown DOCKERHUB_PUBLIC_PROXY scheme: %q", proxyUrl.Scheme) + } + switch proxyUrl.Path { + case "", "/": + // do nothing, this is fine + default: + return nil, fmt.Errorf("unsupported DOCKERHUB_PUBLIC_PROXY (with path)") + } + // TODO complain about other URL bits (unsupported by "ociclient" except via custom "HTTPClient" / "HTTPDoer") + } else if proxy := os.Getenv("DOCKERHUB_PUBLIC_PROXY_HOST"); proxy != "" { + proxyHost = proxy + } + if proxyHost != "" { + proxyClient, err := ociclient.New(proxyHost, &proxyOptions) + if err != nil { + return nil, err + } + + // see https://github.com/cue-labs/oci/blob/8cd71b4d542c55ae2ab515d4a0408ffafe41b549/ociregistry/ocifilter/readonly.go#L22 for the inspiration of this amazing hack (DOCKERHUB_PUBLIC_PROXY is designed for *only* reading content, but is a "pure" mirror in that even a 404 from the proxy is considered authoritative / accurate) + // TODO *technically*, a non-404/429 error from the proxy should probably result in a fallback to Docker Hub, but this should be fine for now + type deeper struct { + // "If you're writing your own implementation of Funcs, you'll need to embed a *Funcs value to get an implementation of the private method. This means that it will be possible to add members to Interface in the future without breaking compatibility." + *ociregistry.Funcs + } + client = struct { + // see also https://pkg.go.dev/cuelabs.dev/go/oci/ociregistry#Interface + ociregistry.Reader + ociregistry.Lister + ociregistry.Writer + ociregistry.Deleter + deeper // "One level deeper so the Reader and Lister values take precedence, following Go's shallower-method-wins rules." + }{ + Reader: proxyClient, + Lister: proxyClient, + Writer: client, + Deleter: client, + } + } + } + + // make sure this registry gets a dedicated in-memory cache (so we never look up the same repo@digest or repo:tag twice for the lifetime of our program) + client = RegistryCache(client) + // TODO some way for callers of this to *not* get a RegistryCache instance? (or to provide options to the one we create -- see TODO on RegistryCache constructor function) + + return client, nil + })) + return f.(func() (ociregistry.Interface, error))() +} + +type dockerAuthConfigWrapper struct { + ociauth.Config +} + +// for Docker Hub, display should be docker.io, auth should be index.docker.io, and requests should be registry-1.docker.io (thanks to a lot of mostly uninteresting historical facts), so this hacks up ociauth to handle that case more cleanly by wrapping the actual auth config (see "dockerHubHosts" map) +func (c dockerAuthConfigWrapper) EntryForRegistry(host string) (ociauth.ConfigEntry, error) { + var zero ociauth.ConfigEntry // "EntryForRegistry" doesn't return an error on a miss - it just returns an empty object (so we create this to have something to trivially compare against for our fallback) + if entry, err := c.Config.EntryForRegistry(host); err == nil && entry != zero { + return entry, err + } else if dockerHubHosts[host] { + // TODO this will iterate in a random order -- maybe that's fine, but maybe we want something more stable? (the new "SortedKeys" iterator that we might get in go1.23? I guess that was rejected, so "slices.Sorted(maps.Keys)") + for dockerHubHost := range dockerHubHosts { + if dockerHubHost == "" { + continue + } + if entry, err := c.Config.EntryForRegistry(dockerHubHost); err == nil && entry != zero { + return entry, err + } + } + return entry, err + } else { + return entry, err + } +} + +var ( + authConfigFunc = sync.OnceValues(func() (ociauth.Config, error) { + config, err := ociauth.Load(nil) + if err != nil { + return nil, fmt.Errorf("cannot load auth configuration: %w", err) + } + return dockerAuthConfigWrapper{config}, nil + }) + clientCache = sync.Map{} // "(normalized) host" => OnceValues() => ociregistry.Interface, error +) diff --git a/registry/docker-hub.go b/registry/docker-hub.go new file mode 100644 index 0000000..d7cf641 --- /dev/null +++ b/registry/docker-hub.go @@ -0,0 +1,19 @@ +package registry + +const ( + dockerHubCanonical = "docker.io" + dockerHubConnect = "registry-1.docker.io" // https://github.com/moby/moby/blob/bf053be997f87af233919a76e6ecbd7d17390e62/registry/config.go#L42 +) + +var ( + dockerHubHosts = map[string]bool{ + // both dockerHub values above should be listed here (not using variables so this list stays prettier and so we don't miss any if dockerHubConnect changes in the future) + "": true, + "docker.io": true, + "index.docker.io": true, + "registry-1.docker.io": true, + "registry.hub.docker.com": true, + } +) + +// see also "rate-limits.go" for per-registry rate limits (of which Docker Hub is the primary use case) diff --git a/registry/rate-limits.go b/registry/rate-limits.go new file mode 100644 index 0000000..eb9e331 --- /dev/null +++ b/registry/rate-limits.go @@ -0,0 +1,69 @@ +package registry + +import ( + "net/http" + "time" + + "cuelabs.dev/go/oci/ociregistry/ociclient" + "golang.org/x/time/rate" +) + +var ( + registryRateLimiters = map[string]*rate.Limiter{ + dockerHubCanonical: rate.NewLimiter(100/rate.Limit((1*time.Minute).Seconds()), 100), // stick to at most 100/min in registry/Hub requests (and allow an immediate burst of 100) + } +) + +// an implementation of [ociclient.HTTPDoer] that transparently adds a total requests rate limit and 429-retrying behavior +type rateLimitedRetryingDoer struct { + doer ociclient.HTTPDoer + limiter *rate.Limiter +} + +func (d *rateLimitedRetryingDoer) Do(req *http.Request) (*http.Response, error) { + requestRetryLimiter := rate.NewLimiter(rate.Every(time.Second), 1) // cap request retries at once per second + firstTry := true + ctx := req.Context() + for { + if err := requestRetryLimiter.Wait(ctx); err != nil { + return nil, err + } + if err := d.limiter.Wait(ctx); err != nil { + return nil, err + } + + if !firstTry && req.GetBody != nil { + var err error + req.Body, err = req.GetBody() + if err != nil { + return nil, err + } + } + firstTry = false + + res, err := d.doer.Do(req) + if err != nil { + return nil, err + } + + // TODO 503 should probably result in at least one or two auto-retries (especially with the automatic retry delay this injects) + if res.StatusCode == 429 { + // satisfy the big scary warning on https://pkg.go.dev/net/http#Client.Do about the downsides of failing to Close the response body + if err := res.Body.Close(); err != nil { + return nil, err + } + + // just eat all available tokens and starve out the rate limiter (any 429 means we need to slow down, so our whole "bucket" is shot) + for i := d.limiter.Tokens(); i > 0; i-- { + _ = d.limiter.Allow() + } + + // TODO some way to notify upwards that we retried? + // TODO maximum number of retries? (perhaps a deadline instead? req.WithContext to inject a deadline? 👀) + // TODO implement more backoff logic than just one retry per second + docker hub rate limit? + continue + } + + return res, nil + } +} diff --git a/registry/read-helpers.go b/registry/read-helpers.go new file mode 100644 index 0000000..6fdac08 --- /dev/null +++ b/registry/read-helpers.go @@ -0,0 +1,69 @@ +package registry + +import ( + "encoding/json" + "fmt" + "io" + "unicode" + + "cuelabs.dev/go/oci/ociregistry" +) + +// reads a JSON object from the given [ociregistry.BlobReader], but also validating the [ociregistry.Descriptor.Digest] and [ociregistry.Descriptor.Size] from [ociregistry.BlobReader.Descriptor] (and returning appropriate errors) +// +// TODO split this up for reading raw objects ~safely too? (https://github.com/docker-library/bashbrew/commit/0f3f0042d0da95affb75e250a77100b4ae58832f) -- maybe even a separate `io.Reader`+`Descriptor` interface that doesn't require a BlobReader specifically? +func readJSONHelper(r ociregistry.BlobReader, v interface{}) error { + desc := r.Descriptor() + + // prevent go-digest panics later + if err := desc.Digest.Validate(); err != nil { + return err + } + + // make sure we can't possibly read (much) more than we're supposed to + limited := &io.LimitedReader{ + R: r, + N: desc.Size + 1, // +1 to allow us to detect if we read too much (see verification below) + } + + // copy all read data into the digest verifier so we can validate afterwards + verifier := desc.Digest.Verifier() + tee := io.TeeReader(limited, verifier) + + // decode directly! (mostly avoids double memory hit for big objects) + // (TODO protect against malicious objects somehow?) + if err := json.NewDecoder(tee).Decode(v); err != nil { + return err + } + + // read anything leftover ... + bs, err := io.ReadAll(tee) + if err != nil { + return err + } + // ... and make sure it was just whitespace, if anything + for _, b := range bs { + if !unicode.IsSpace(rune(b)) { + return fmt.Errorf("unexpected non-whitespace at the end of %q: %+v\n", string(desc.Digest), rune(b)) + } + } + + // now that we know we've read everything, we're safe to close the original reader + if err := r.Close(); err != nil { + return err + } + + // after reading *everything*, we should have exactly one byte left in our LimitedReader (anything else is an error) + if limited.N < 1 { + return fmt.Errorf("size of %q is bigger than it should be (%d)", string(desc.Digest), desc.Size) + } else if limited.N > 1 { + return fmt.Errorf("size of %q is %d bytes smaller than it should be (%d)", string(desc.Digest), limited.N-1, desc.Size) + } + + // and finally, let's verify our checksum + if !verifier.Verified() { + return fmt.Errorf("digest of %q not correct", string(desc.Digest)) + } + + return nil +} diff --git a/registry/ref.go b/registry/ref.go new file mode 100644 index 0000000..dfb75d2 --- /dev/null +++ b/registry/ref.go @@ -0,0 +1,33 @@ +package registry + +import ( + "strings" + + // thanks, go-digest... + _ "crypto/sha256" + _ "crypto/sha512" + + "cuelabs.dev/go/oci/ociregistry" + "cuelabs.dev/go/oci/ociregistry/ociref" +) + +// parse a ref like `hello-world:latest` into an [ociref.Reference] object, with Docker Hub canonicalization applied: `docker.io/library/hello-world:latest` +// +// See also [ociref.ParseRelative] +// +// NOTE: this explicitly does *not* normalize Tag to `:latest` because it's useful to be able to parse a reference and know it did not specify either tag or digest (and `if ref.Tag == "" { ref.Tag = "latest" }` is really trivial code outside this for that case) +func ParseRefNormalized(img string) (ociref.Reference, error) { + ref, err := ociref.ParseRelative(img) + if err != nil { + return ociref.Reference{}, err + } + if dockerHubHosts[ref.Host] { + // normalize Docker Hub host value + ref.Host = dockerHubCanonical + // normalize Docker Official Images to library/ prefix + if !strings.Contains(ref.Repository, "/") { + ref.Repository = "library/" + ref.Repository + } + } + return ref, nil +} diff --git a/registry/synthesize-index.go b/registry/synthesize-index.go new file mode 100644 index 0000000..777d2e3 --- /dev/null +++ b/registry/synthesize-index.go @@ -0,0 +1,199 @@ +package registry + +import ( + "context" + "errors" + "fmt" + "strings" + + "github.com/docker-library/bashbrew/architecture" + + "cuelabs.dev/go/oci/ociregistry" + "cuelabs.dev/go/oci/ociregistry/ociref" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" +) + +// returns a synthesized [ocispec.Index] object for the given reference that includes automatically pulling up [ocispec.Platform] objects for entries missing them plus annotations for bashbrew architecture ([AnnotationBashbrewArch]) and where to find the "upstream" object if it needs to be copied/pulled ([ocispec.AnnotationRefName]) +func SynthesizeIndex(ctx context.Context, ref ociref.Reference) (*ocispec.Index, error) { + // consider making this a full ociregistry.Interface object? GetManifest(digest) not returning an object with that digest would certainly be Weird though so maybe that's a misguided idea (with very minimal actual benefit, at least right now) + + client, err := Client(ref.Host, nil) + if err != nil { + return nil, fmt.Errorf("%s: failed getting client: %w", ref, err) + } + + var r ociregistry.BlobReader = nil + if ref.Digest != "" { + r, err = client.GetManifest(ctx, ref.Repository, ref.Digest) + } else { + tag := ref.Tag + if tag == "" { + tag = "latest" + } + r, err = client.GetTag(ctx, ref.Repository, tag) + } + if err != nil { + // https://github.com/cue-labs/oci/issues/26 + if errors.Is(err, ociregistry.ErrBlobUnknown) || + errors.Is(err, ociregistry.ErrManifestUnknown) || + errors.Is(err, ociregistry.ErrNameUnknown) || + strings.HasPrefix(err.Error(), "404 ") { + return nil, nil + } + return nil, fmt.Errorf("%s: failed GET: %w", ref, err) + } + defer r.Close() + + desc := r.Descriptor() + + var index ocispec.Index + + switch desc.MediaType { + case ocispec.MediaTypeImageManifest, mediaTypeDockerImageManifest: + if err := normalizeManifestPlatform(ctx, &desc, r, client, ref); err != nil { + return nil, fmt.Errorf("%s: failed normalizing manifest platform: %w", ref, err) + } + + index.Manifests = append(index.Manifests, desc) + + case ocispec.MediaTypeImageIndex, mediaTypeDockerManifestList: + if err := readJSONHelper(r, &index); err != nil { + return nil, fmt.Errorf("%s: failed reading index: %w", ref, err) + } + + default: + return nil, fmt.Errorf("unsupported mediaType: %q", desc.MediaType) + } + + switch index.SchemaVersion { + case 0: + index.SchemaVersion = 2 + case 2: + // all good, do nothing! + default: + return nil, fmt.Errorf("unsupported index schemaVersion: %q", index.SchemaVersion) + } + + switch index.MediaType { + case "": + index.MediaType = ocispec.MediaTypeImageIndex + if len(index.Manifests) >= 1 { + // if the first item in our list is a Docker media type, our list should probably be too + if index.Manifests[0].MediaType == mediaTypeDockerImageManifest { + index.MediaType = mediaTypeDockerManifestList + } + } + case ocispec.MediaTypeImageIndex, mediaTypeDockerManifestList: + // all good, do nothing! + default: + return nil, fmt.Errorf("unsupported index mediaType: %q", index.MediaType) + } + + setRefAnnotation(&index.Annotations, ref, desc.Digest) + + seen := map[string]*ociregistry.Descriptor{} + i := 0 // https://go.dev/wiki/SliceTricks#filter-in-place (used to delete references we don't have the subject of) + for _, m := range index.Manifests { + if seen[string(m.Digest)] != nil { + // skip digests we've already seen (de-dupe), since we have a map already for dropping dangling attestations + continue + // if there was unique data on this lower entry (different annotations, etc), perhaps we should merge/overwrite? OCI spec technically says "first match SHOULD win", so this is probably fine/sane + // https://github.com/opencontainers/image-spec/blob/v1.1.0/image-index.md#:~:text=If%20multiple%20manifests%20match%20a%20client%20or%20runtime%27s%20requirements%2C%20the%20first%20matching%20entry%20SHOULD%20be%20used. + } + + setRefAnnotation(&m.Annotations, ref, m.Digest) + + if err := normalizeManifestPlatform(ctx, &m, nil, client, ref); err != nil { + return nil, fmt.Errorf("%s: failed normalizing manifest platform: %w", m.Annotations[ocispec.AnnotationRefName], err) + } + + delete(m.Annotations, AnnotationBashbrewArch) // don't trust any remote-provided value for bashbrew arch (since it's really inexpensive for us to calculate fresh and it's only a hint anyhow) + if m.Annotations[annotationBuildkitReferenceType] == annotationBuildkitReferenceTypeAttestation { + if subject := seen[m.Annotations[annotationBuildkitReferenceDigest]]; subject != nil && subject.Annotations[AnnotationBashbrewArch] != "" { + m.Annotations[AnnotationBashbrewArch] = subject.Annotations[AnnotationBashbrewArch] + } else { + // if our subject is missing, delete this entry from the index (see "i") + continue + } + } else if m.Platform != nil { + imagePlatform := architecture.OCIPlatform(*m.Platform) + // match "platform" to bashbrew arch and set an appropriate annotation + for bashbrewArch, supportedPlatform := range architecture.SupportedArches { + if imagePlatform.Is(supportedPlatform) { + m.Annotations[AnnotationBashbrewArch] = bashbrewArch + break + } + } + } + + index.Manifests[i] = m + seen[string(m.Digest)] = &index.Manifests[i] + i++ + } + index.Manifests = index.Manifests[:i] // https://go.dev/wiki/SliceTricks#filter-in-place + + // TODO set an annotation on the index to specify whether or not we actually filtered anything (or whether it's safe to copy the original index as-is during arch-specific deploy instead of reconstructing it from all the parts); maybe a list of digests that were skipped/excluded? + + return &index, nil +} + +// given a (potentially `nil`) map of annotations, add [ocispec.AnnotationRefName] including the supplied [ociref.Reference] (but with [ociref.Reference.Digest] set to a new value) +func setRefAnnotation(annotations *map[string]string, ref ociref.Reference, digest ociregistry.Digest) { + if *annotations == nil { + // "assignment to nil map" 🙃 + *annotations = map[string]string{} + } + ref.Digest = digest // since ref is already copied by value, we're safe to modify it to inject the new digest + (*annotations)[ocispec.AnnotationRefName] = ref.String() +} + +// given a manifest descriptor (and optionally an existing [ociregistry.BlobReader] on the manifest object itself), make sure it has a valid [ocispec.Platform] object if possible, querying down into the [ocispec.Image] ("config" blob) if necessary +func normalizeManifestPlatform(ctx context.Context, m *ocispec.Descriptor, r ociregistry.BlobReader, client ociregistry.Interface, ref ociref.Reference) error { + if m.Platform == nil || m.Platform.OS == "" || m.Platform.Architecture == "" { + // if missing (or obviously invalid) "platform", we need to (maybe) reach downwards and synthesize + m.Platform = nil + + switch m.MediaType { + case ocispec.MediaTypeImageManifest, mediaTypeDockerImageManifest: + var err error + if r == nil { + r, err = client.GetManifest(ctx, ref.Repository, m.Digest) + if err != nil { + return err + } + defer r.Close() + } + + var manifest ocispec.Manifest + if err := readJSONHelper(r, &manifest); err != nil { + return err + } + + switch manifest.Config.MediaType { + case ocispec.MediaTypeImageConfig, mediaTypeDockerImageConfig: + r, err := client.GetBlob(ctx, ref.Repository, manifest.Config.Digest) + if err != nil { + return err + } + defer r.Close() + + var config ocispec.Image + if err := readJSONHelper(r, &config); err != nil { + return err + } + + if config.Platform.OS != "" && config.Platform.Architecture != "" { + m.Platform = &config.Platform + } + } + } + } + + if m.Platform != nil { + // if we have a platform object now, let's normalize it + normal := architecture.Normalize(*m.Platform) + m.Platform = &normal + } + + return nil +} diff --git a/sources.sh b/sources.sh index 0c3cc9e..cf86934 100755 --- a/sources.sh +++ b/sources.sh @@ -50,7 +50,7 @@ bashbrew cat --build-order --format ' { "sourceId": {{ join "\n" $sum $file $builder "" | sha256sum | json }}, "reproducibleGitChecksum": {{ $sum | json }}, - "allTags": [], + "tags": {{ $.Tags namespace false . | json }}, "entry": { "GitRepo": {{ .ArchGitRepo $a | json }}, "GitFetch": {{ .ArchGitFetch $a | json }}, @@ -62,7 +62,6 @@ bashbrew cat --build-order --format ' }, "arches": { {{ $a | json }}: { - "tags": {{ $.Tags namespace false . | json }}, "archTags": {{ if $archNs -}} {{ $.Tags $archNs false . | json }} {{- else -}} [] {{- end }}, "froms": {{ $.ArchDockerFroms $a . | json }}, "lastStageFrom": {{ if eq $builder "oci-import" -}} @@ -83,7 +82,7 @@ bashbrew cat --build-order --format ' ' "$@" | jq 3>&1 1>&2 2>&3- -r ' # https://github.com/jqlang/jq/issues/2063 - "stderr" cannot functionally output a string correctly until jq 1.7+ (which is very very recent), so we hack around it to get some progress output by using Bash to swap stdout and stderr so we can output our objects to stderr and our progress text to stdout and "fix it in post" # TODO balk / error at multiple arches entries - first(.arches[].tags[], .arches[].archTags[]) as $tag + .tags[0] as $tag | first(.arches | keys_unsorted[]) as $arch | stderr | "\($tag) (\($arch)): \(.sourceId)" @@ -94,21 +93,18 @@ bashbrew cat --build-order --format ' reduce .[] as $a ([]; if IN(.[]; $a) then . else . += [$a] end) ; reduce inputs as $in ({}; - # TODO if we can get support for joining two arrays directly in bashbrew (sprig?) then we can avoid this .arches[] nonsense - ($in | .allTags = ([ $in.arches[].tags[], $in.arches[].archTags[] ] | unique_unsorted)) as $in - | .[$in.sourceId] |= + .[$in.sourceId] |= if . == null then $in else - .allTags |= (. + $in.allTags | unique_unsorted) + .tags |= (. + $in.tags | unique_unsorted) | .arches |= ( reduce ($in.arches | to_entries[]) as {$key, $value} (.; if has($key) then # if we already have this architecture, this must be a weird edge case (same sourceId, but different Architectures: lists, for example), so we should validate that the metadata is the same and then do a smart combination of the tags - if (.[$key] | del(.tags, .archTags)) != ($value | del(.tags, .archTags)) then + if (.[$key] | del(.archTags)) != ($value | del(.archTags)) then error("duplicate architecture \($key) for \($in.sourceId), but mismatched objects: \(.[$key]) vs \($value)") else . end - | .[$key].tags |= (. + $value.tags | unique_unsorted) | .[$key].archTags |= (. + $value.archTags | unique_unsorted) else .[$key] = $value @@ -126,7 +122,7 @@ bashbrew cat --build-order --format ' | ( reduce to_entries[] as $e ({}; $e.key as $sourceId - | .[$e.value.allTags[]] |= ( + | .[ $e.value.tags[], $e.value.arches[].archTags[] ] |= ( .[$e.value.arches | keys[]] |= ( . + [$sourceId] | unique_unsorted )