From 958e2dd8193d11b43eddb892a45531391e343a08 Mon Sep 17 00:00:00 2001 From: "zhuangbowei.zbw" Date: Thu, 25 Jul 2024 16:19:27 +0800 Subject: [PATCH] convertor: support reference API Signed-off-by: zhuangbowei.zbw --- .github/workflows/ci-userspace-convertor.yml | 17 ++ ci/e2e/convert/referrer_test.go | 182 ++++++++++++++++++ ci/e2e/go.mod | 27 +++ ci/e2e/go.sum | 51 +++++ ...7505756f17088de7889c83891e9bc69d749fa3690e | 16 ++ ...f05d0d9c2d2f82ccaab629c0e39792b24682970040 | 16 ++ ...f6ba7046f1a2c099597dbd9643592fa8eb99981402 | 16 ++ ...b4f8922b73f2ea3689cf9970150afee8a5a026db30 | Bin 0 -> 3658 bytes ...77a18bdc2d03c9b58cb45b79902bf648885e23b9f4 | 1 + ...84fccd58558900bd382ffbde49778906172aa135fb | Bin 0 -> 4065 bytes ...72b1c8e09ba01f2adeea0a44f8f3758d185e95e918 | Bin 0 -> 3922 bytes ...af3f0d2e6567697caecbebb5d3f2934d8d37f32d2d | 1 + ...036aee2e2da5cf7097ac06513f9f01f41e03365399 | 16 ++ ...27920737dba3e5aaa4fbe20cdd0fc70c0591b7a639 | Bin 0 -> 2716 bytes ...ff4678084ebcc215809506e4b8cd9e509660417205 | Bin 0 -> 3190 bytes ...3eacab360bf551a1491c05b85806ed8f1b08d792f6 | Bin 0 -> 2457 bytes ...6d48090539042cb822531c6b751b1f6dd18cb5705d | 1 + ...cd684b8389d0a1e18cf6e6d5c44c19716d25f65e20 | 16 ++ ...e214d04a7a496f8214356f41d81a6e6dcad11f11e3 | 16 ++ ...2af109fe963fde787f63f9e016fdc3384500c2823d | 1 + ...063fcdaa62d32fef2046458f57efae408eccb1f935 | 20 ++ ...3d12532b284bf37bba15ed7b4fc1a3f86605f86c63 | 16 ++ ...f9f14e216db10203deb22cc28aaa2c134f9ae2e0fd | 1 + ...a36a450e1b07c5982840f13b0d2a1048adb98571c2 | 25 +++ ...411759e4f5abe9910486c8f98534ead97befd77dd7 | 1 + ...d8d5288ceb6779bcf33b4a453c10ac4d79fb083651 | Bin 0 -> 2976 bytes ...591e1a1adf4452a9d383c4dcb63b1b7d4617d73af8 | Bin 0 -> 2979 bytes ...250ce9fa4aa882b25f8528fd2eea1b789ce136631b | 1 + ...818177c11569c5bb3c818ef45b877e7bba29a3bf7f | Bin 0 -> 3265 bytes ...da594c4a19802fda5b09bb6aef4d00e5e8c747a8df | 1 + ...b5e8a5c1bd87f0de7ed93a678d58b3a79e6f7da2e9 | 1 + ...eb4f9e12caeeae15f3ea5f39e1427c828f8fb38e5f | 1 + ...fe11121afa720abed733943e50581a9dc7540689c8 | 16 ++ ...75c737a7d2fa40b6e7f7f40c00b1dcc387b9ac0e85 | 16 ++ ci/e2e/resources/store/hello-world/index.json | 1 + ci/e2e/resources/store/hello-world/oci-layout | 1 + cmd/convertor/builder/builder.go | 32 ++- cmd/convertor/builder/builder_engine.go | 27 ++- cmd/convertor/builder/overlaybd_builder.go | 9 +- cmd/convertor/builder/turboOCI_builder.go | 12 +- cmd/convertor/main.go | 7 + docs/QUICKSTART.md | 2 +- docs/USERSPACE_CONVERTOR.md | 70 +++++++ 43 files changed, 626 insertions(+), 11 deletions(-) create mode 100644 ci/e2e/convert/referrer_test.go create mode 100644 ci/e2e/go.mod create mode 100644 ci/e2e/go.sum create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/004d23c66201b22fce069b7505756f17088de7889c83891e9bc69d749fa3690e create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/06bca41ba617acf0b3644df05d0d9c2d2f82ccaab629c0e39792b24682970040 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/084c3bdd1271adc754e2c5f6ba7046f1a2c099597dbd9643592fa8eb99981402 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/337a0e31c52265fdbab8ffb4f8922b73f2ea3689cf9970150afee8a5a026db30 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/38d49488e3b0689e88335277a18bdc2d03c9b58cb45b79902bf648885e23b9f4 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/4bf3d0e19af8069cca924c84fccd58558900bd382ffbde49778906172aa135fb create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/4f1af0faa5862569c7c76d72b1c8e09ba01f2adeea0a44f8f3758d185e95e918 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/5735de2b810bba182986adaf3f0d2e6567697caecbebb5d3f2934d8d37f32d2d create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/574efe68740d3bee2ef780036aee2e2da5cf7097ac06513f9f01f41e03365399 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/630da353b594c9ca52c67727920737dba3e5aaa4fbe20cdd0fc70c0591b7a639 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/70f5ac315c5af948332962ff4678084ebcc215809506e4b8cd9e509660417205 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/719385e32844401d57ecfd3eacab360bf551a1491c05b85806ed8f1b08d792f6 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/726023f73a8fc5103fa6776d48090539042cb822531c6b751b1f6dd18cb5705d create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/72ba79e34f1baa40cd4d9ecd684b8389d0a1e18cf6e6d5c44c19716d25f65e20 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/7e9b6e7ba2842c91cf49f3e214d04a7a496f8214356f41d81a6e6dcad11f11e3 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/9c7a54a9a43cca047013b82af109fe963fde787f63f9e016fdc3384500c2823d create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/9f32e20678dd3c4e7474ed063fcdaa62d32fef2046458f57efae408eccb1f935 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/a0a386314d69d1514d7aa63d12532b284bf37bba15ed7b4fc1a3f86605f86c63 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/a8117b42328be6ba54c594f9f14e216db10203deb22cc28aaa2c134f9ae2e0fd create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/a88a816b83f40e5d7b73eda36a450e1b07c5982840f13b0d2a1048adb98571c2 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/b038788ddb222cb7d6025b411759e4f5abe9910486c8f98534ead97befd77dd7 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/b102dd09f2b38103852530d8d5288ceb6779bcf33b4a453c10ac4d79fb083651 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/c4018b8bf4381a79e05c15591e1a1adf4452a9d383c4dcb63b1b7d4617d73af8 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/d549b3d1a2550a5e42a3f3250ce9fa4aa882b25f8528fd2eea1b789ce136631b create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/d898e3d98788d70a8f874f818177c11569c5bb3c818ef45b877e7bba29a3bf7f create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/de23d9589845285bb62b33da594c4a19802fda5b09bb6aef4d00e5e8c747a8df create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/e4728a982b0acd74e810aeb5e8a5c1bd87f0de7ed93a678d58b3a79e6f7da2e9 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/eb6f80695a28848498afd1eb4f9e12caeeae15f3ea5f39e1427c828f8fb38e5f create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/efebf0f7aee69450f99deafe11121afa720abed733943e50581a9dc7540689c8 create mode 100644 ci/e2e/resources/store/hello-world/blobs/sha256/fbe0ff1e7697da39d987a975c737a7d2fa40b6e7f7f40c00b1dcc387b9ac0e85 create mode 100644 ci/e2e/resources/store/hello-world/index.json create mode 100644 ci/e2e/resources/store/hello-world/oci-layout diff --git a/.github/workflows/ci-userspace-convertor.yml b/.github/workflows/ci-userspace-convertor.yml index 7e4795e1..9877abb0 100644 --- a/.github/workflows/ci-userspace-convertor.yml +++ b/.github/workflows/ci-userspace-convertor.yml @@ -69,3 +69,20 @@ jobs: /opt/overlaybd/snapshotter/convertor -r localhost:5000/redis -i 7.2.3 --overlaybd 7.2.3_overlaybd --turboOCI 7.2.3_turbo bash run_container.sh localhost:5000/redis:7.2.3_overlaybd bash run_container.sh localhost:5000/redis:7.2.3_turbo + + - name: install Go + uses: actions/setup-go@v5 + with: + go-version: '1.22.0' + + - name: set env + shell: bash + run: | + echo "GOPATH=${{ github.workspace }}" >> $GITHUB_ENV + echo "${{ github.workspace }}/bin" >> $GITHUB_PATH + + - name: CI - E2E Go Test + working-directory: ci/e2e + shell: bash + run: | + go test -v ./... diff --git a/ci/e2e/convert/referrer_test.go b/ci/e2e/convert/referrer_test.go new file mode 100644 index 00000000..69c73ae9 --- /dev/null +++ b/ci/e2e/convert/referrer_test.go @@ -0,0 +1,182 @@ +/* + Copyright The Accelerated Container Image Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package convert_test + +import ( + "context" + "encoding/json" + "fmt" + "io" + "os/exec" + "path/filepath" + "runtime" + "testing" + + dockerspec "github.com/containerd/containerd/v2/core/images" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/stretchr/testify/require" + "oras.land/oras-go/v2" + "oras.land/oras-go/v2/content/oci" + "oras.land/oras-go/v2/registry" + "oras.land/oras-go/v2/registry/remote" +) + +const ( + ArtifactTypeOverlaybd = "application/vnd.containerd.overlaybd.native.v1+json" + ArtifactTypeTurboOCI = "application/vnd.containerd.overlaybd.turbo.v1+json" + + TestRepository = "localhost:5000/hello-world" +) + +func TestConvertReferrer(t *testing.T) { + ctx := context.Background() + require := require.New(t) + + if err := copyImageToRegistry(ctx); err != nil { + t.Fatal(err) + } + + repo, err := remote.NewRepository(TestRepository) + require.Nil(err, err) + repo.SetReferrersCapability(true) + + fetchJSON := func(src ocispec.Descriptor, v any) { + rc, err := repo.Fetch(ctx, src) + require.Nil(err, err) + defer rc.Close() + bytes, err := io.ReadAll(rc) + require.Nil(err, err) + err = json.Unmarshal(bytes, v) + require.Nil(err, err) + + t.Logf("fetch %s, content:\n%s", src.Digest.String(), string(bytes)) + } + + var checkReferrer func(src, dst ocispec.Descriptor, artifactType string) + checkReferrer = func(src, dst ocispec.Descriptor, artifactType string) { + t.Logf("checking src %v to dst %v, artifact type %s", src, dst, artifactType) + require.Equal(isIndex(src.MediaType), isIndex(dst.MediaType)) + + switch dst.MediaType { + case ocispec.MediaTypeImageManifest, dockerspec.MediaTypeDockerSchema2Manifest: + var manifest ocispec.Manifest + fetchJSON(dst, &manifest) + require.Equal(artifactType, manifest.ArtifactType) + require.Equal(src.Digest, manifest.Subject.Digest) + require.Equal(src.Size, manifest.Subject.Size) + require.Equal(src.MediaType, manifest.Subject.MediaType) + + case ocispec.MediaTypeImageIndex, dockerspec.MediaTypeDockerSchema2ManifestList: + var index ocispec.Index + fetchJSON(dst, &index) + require.Equal(artifactType, index.ArtifactType) + require.Equal(src.Digest, index.Subject.Digest) + require.Equal(src.Size, index.Subject.Size) + require.Equal(src.MediaType, index.Subject.MediaType) + + var srcIndex ocispec.Index + fetchJSON(src, &srcIndex) + require.Equal(len(srcIndex.Manifests), len(index.Manifests)) + for idx := range index.Manifests { + checkReferrer(srcIndex.Manifests[idx], index.Manifests[idx], artifactType) + } + } + } + + testcases := []struct { + name string + reference string + }{ + { + name: "simple", + reference: TestRepository + ":amd64", + }, + { + name: "index", + reference: TestRepository + ":multi-arch", + }, + { + name: "nested index", + reference: TestRepository + ":nested-index", + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + err := convert(ctx, tc.reference) + require.Nil(err, err) + + src, err := repo.Resolve(ctx, tc.reference) + require.Nil(err, err) + + obd, err := repo.Resolve(ctx, tc.reference+"_overlaybd") + require.Nil(err, err) + + turbo, err := repo.Resolve(ctx, tc.reference+"_turbo") + require.Nil(err, err) + + checkReferrer(src, obd, ArtifactTypeOverlaybd) + checkReferrer(src, turbo, ArtifactTypeTurboOCI) + }) + } +} + +const convertBin = "/opt/overlaybd/snapshotter/convertor" + +func convert(ctx context.Context, refspec string) error { + ref, err := registry.ParseReference(refspec) + if err != nil { + return err + } + cmd := exec.CommandContext(ctx, convertBin, + "-r", fmt.Sprintf("%s/%s", ref.Registry, ref.Repository), + "-i", ref.Reference, + "--overlaybd", ref.Reference+"_overlaybd", + "--turboOCI", ref.Reference+"_turbo", + "--referrer", + ) + if out, err := cmd.CombinedOutput(); err != nil { + return fmt.Errorf("failed to convert: %w, output: %s", err, out) + } + return nil +} + +func copyImageToRegistry(ctx context.Context) error { + _, filename, _, _ := runtime.Caller(0) + local, err := oci.New(filepath.Join(filepath.Dir(filename), "..", "resources", "store", "hello-world")) + if err != nil { + return err + } + repo, err := remote.NewRepository(TestRepository) + if err != nil { + return err + } + + images := []string{"amd64", "arm64", "multi-arch", "nested-index"} + for _, img := range images { + src := img + dst := TestRepository + ":" + img + if _, err := oras.Copy(ctx, local, src, repo, dst, oras.CopyOptions{}); err != nil { + return err + } + } + return nil +} + +func isIndex(mediaType string) bool { + return mediaType == ocispec.MediaTypeImageIndex || mediaType == dockerspec.MediaTypeDockerSchema2ManifestList +} diff --git a/ci/e2e/go.mod b/ci/e2e/go.mod new file mode 100644 index 00000000..dd51a51b --- /dev/null +++ b/ci/e2e/go.mod @@ -0,0 +1,27 @@ +module github.com/containerd/accelerated-container-image/ci/e2e + +go 1.22.2 + +require ( + github.com/containerd/containerd/v2 v2.0.0-rc.3 + github.com/opencontainers/image-spec v1.1.0 + github.com/stretchr/testify v1.9.0 + oras.land/oras-go/v2 v2.5.0 +) + +require ( + github.com/containerd/errdefs v0.1.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/platforms v0.2.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/klauspost/compress v1.17.8 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.21.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect + google.golang.org/grpc v1.63.2 // indirect + google.golang.org/protobuf v1.34.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/ci/e2e/go.sum b/ci/e2e/go.sum new file mode 100644 index 00000000..4935075c --- /dev/null +++ b/ci/e2e/go.sum @@ -0,0 +1,51 @@ +github.com/containerd/containerd/v2 v2.0.0-rc.3 h1:rRISeKYnunLx8Byw8FQ/a62mTMtcr6ESGptS4+MwLaQ= +github.com/containerd/containerd/v2 v2.0.0-rc.3/go.mod h1:UBHR1DgWRQcEOINFkR94m0VC0MgKd3qg9LVPnudv9vs= +github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= +github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +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 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +oras.land/oras-go/v2 v2.5.0 h1:o8Me9kLY74Vp5uw07QXPiitjsw7qNXi8Twd+19Zf02c= +oras.land/oras-go/v2 v2.5.0/go.mod h1:z4eisnLP530vwIOUOJeBIj0aGI0L1C3d53atvCBqZHg= diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/004d23c66201b22fce069b7505756f17088de7889c83891e9bc69d749fa3690e b/ci/e2e/resources/store/hello-world/blobs/sha256/004d23c66201b22fce069b7505756f17088de7889c83891e9bc69d749fa3690e new file mode 100644 index 00000000..6c74c418 --- /dev/null +++ b/ci/e2e/resources/store/hello-world/blobs/sha256/004d23c66201b22fce069b7505756f17088de7889c83891e9bc69d749fa3690e @@ -0,0 +1,16 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 1468, + "digest": "sha256:a8117b42328be6ba54c594f9f14e216db10203deb22cc28aaa2c134f9ae2e0fd" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 2716, + "digest": "sha256:630da353b594c9ca52c67727920737dba3e5aaa4fbe20cdd0fc70c0591b7a639" + } + ] +} \ No newline at end of file diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/06bca41ba617acf0b3644df05d0d9c2d2f82ccaab629c0e39792b24682970040 b/ci/e2e/resources/store/hello-world/blobs/sha256/06bca41ba617acf0b3644df05d0d9c2d2f82ccaab629c0e39792b24682970040 new file mode 100644 index 00000000..3765e46f --- /dev/null +++ b/ci/e2e/resources/store/hello-world/blobs/sha256/06bca41ba617acf0b3644df05d0d9c2d2f82ccaab629c0e39792b24682970040 @@ -0,0 +1,16 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 1473, + "digest": "sha256:e4728a982b0acd74e810aeb5e8a5c1bd87f0de7ed93a678d58b3a79e6f7da2e9" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 4065, + "digest": "sha256:4bf3d0e19af8069cca924c84fccd58558900bd382ffbde49778906172aa135fb" + } + ] +} \ No newline at end of file diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/084c3bdd1271adc754e2c5f6ba7046f1a2c099597dbd9643592fa8eb99981402 b/ci/e2e/resources/store/hello-world/blobs/sha256/084c3bdd1271adc754e2c5f6ba7046f1a2c099597dbd9643592fa8eb99981402 new file mode 100644 index 00000000..72e864d6 --- /dev/null +++ b/ci/e2e/resources/store/hello-world/blobs/sha256/084c3bdd1271adc754e2c5f6ba7046f1a2c099597dbd9643592fa8eb99981402 @@ -0,0 +1,16 @@ +{ + "schemaVersion": 2, + "mediaType": "application/vnd.docker.distribution.manifest.v2+json", + "config": { + "mediaType": "application/vnd.docker.container.image.v1+json", + "size": 1483, + "digest": "sha256:de23d9589845285bb62b33da594c4a19802fda5b09bb6aef4d00e5e8c747a8df" + }, + "layers": [ + { + "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", + "size": 3658, + "digest": "sha256:337a0e31c52265fdbab8ffb4f8922b73f2ea3689cf9970150afee8a5a026db30" + } + ] +} \ No newline at end of file diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/337a0e31c52265fdbab8ffb4f8922b73f2ea3689cf9970150afee8a5a026db30 b/ci/e2e/resources/store/hello-world/blobs/sha256/337a0e31c52265fdbab8ffb4f8922b73f2ea3689cf9970150afee8a5a026db30 new file mode 100644 index 0000000000000000000000000000000000000000..d85451c89cd0d67ca22b37cb6b183da094cd00ab GIT binary patch literal 3658 zcmV-Q4z=+giwFP!00000|Ll5gY#hgV|8Mq|fE;<0Ee9ebil!kLCT?5!gAwEd?FvO2fWWzK z`ymAy3C@?I`LMIADc{|PNKL6Z%AlAOx&r7nOm1KZlwKX=k9Aq=Hm#IDGmcwjDf?2N4X5>*d$LE&8 zXQa*w4(K%*N?w$f0ZaVc^VXFQ2(w&& zJ^M&1ySKIw{QUvq`}@uT;*VRNx2Al$5o=$)dFvS`%4ZzJEpbDwg(XPL5}=m*kHGq3 zq9hj&mSpW2<%hSH5ucLa%2$?)gY(M-1qT>#KlQw(D+fyw0A^p;sx`BQCM0zet;kfAbWry zetctaYr&#~oTUYz3_XLv;iCY3>$_BkIwU{MNd)|5@FG-zQe*UPnwXj4swzQ)1#_~K* z#V_Y2$*cL|%O9ItZdG{}pY!Dn0Lw1zdEcS|MrUCr-`7^uK_>=?W=zsYhP_H z&p6GPaU!_363s5iqp=0a;|o$R&q(EiT?FgFTQkmLY-xqwnsLpNQBqozjkGAEv?!ZtSVn1BHqx-9 zG%WRUz=@Wx`1^!;(S85}F5^X|%PeD0I*bNnGY!Zn4ai0skdy{wmdWg76oURn7q~xc?t$0-kdtKq!b=nLVgt zyx`YWoli;1XJwF2$woda!+c6M^I1vxlsws`&eV$Cl>fu5D0{mq`4NuINgZ>N+H(@+ zX`8TT9h6g!M#FXxF-I>?+5x=aY7};mO*%TY<|r-Bhs#CT$cpkVFUh;8@S=RqKlA>A z79EXF+F?3r2k3|HO+4o|@`9waAP)m?D<76s{bQEv zFVVu%ji*(P#6}&&3R1@G$&SpdfS+-id4m)3ZFNdCb8RZ{&x>LM@3$fFe*Xrn zHUzAG9SyE-%{J;*p;7T?Y{1cho{h-+E9!nDVy%4Yc}EzVavngvZ*y%MKH4u9h0bSN zKZxCq>AcYTL984jsCU6{?*%XKwIfQuO5dpT`vK77%Nal81mZQ$r4KE^?3APP**iLW z(z*2FqEPxh)NP$0yxjUww{>vys@9JHJhDBSNn z@5pJON9po?peKqUx699=A$OlzTb{iWj#Z_M$TlM2b(b{i`n*M2V=(HtjPhS!b zk6EH_>^1So1xo}kye`@n-C619Vu#KS2|)Q!F-9=T|Vp!vFJyJCr5)0f5J zcPtTl^9^z2CziPH-75dy3V&8kJIe3Mj&(rKAG7oCJ@3fw7q<7A9a&hJ>Rc3r-R>j& zb}P!a4-r=GQ}0kNA8Nie<7~!8Ygb7YVwHNW>b$nA!F?16(XNuD2RD0vb&eFJ-c^$N zJ#%-f{d!QDe62XA#mFoY?^O|%Y_pyAX5-UxFeJr2AfUEi_ zjejgTf6Cc~Q|_-l@9lSaNxsXzy59|6k~i*|b3Jb@(qp>;)*uVKBn!0Kztf_;z)Oi*9+e)v1T$MJjC>#FBfeS6L3oWhkN*M*v&jZ6^&9{9xbLYwOqM)BAV zv&lOfIpAZ<5znLQthL+y&okWX6hrDv+E}>5_K>f94h{7isZ@rY&1J?}UuNVbBX=+~ zIF`(_aU-8koHJN{EOS23%&~;YUd>G8STdbA6RA|fOlHz7kod@GxcgmC^VR1=Zv(GOPB^Tx9~k$-Hn-<%uCE1GuYWoDwR2}*5^$lo9_v+ zt`0UhW^4jSQb{9ivXM;MOpKVusK2QCZZu(xXVM)Z_SjdJRHj*WB9*G*AN0RBYCoUJ zrA8lQ$#JEjulp8e{S(6-A;uVMOXS9nJ@(4uhePbxc6>*2MnVaaU}@ugMX+Sr$ZaxA znAHu=k0nROSZ*S%>}dF`jSI%egqavl85LkQml>THF?;~aOqkgT-`p&bGuX&PE@!08 z)T=CKBu10za~&bpy`4OHGiM~meN7YQCKofaRkw-}k5)y>D}yFYUm`P8@vmv*#*^tp zs^U8{_bSV0#tm~!Ic7YQGgxALIB6y`6ZxaQgd>TxQjI0j?D^q|v^lZG5a*NTSWk$x zveC-!3fG=A*+d06oXC%bLZ`-*lD?(#M_FRR%#5pGQNeUJl{v5G(xa8F6+f0>XLH6E z3jJwcPl%0~W;Wl`**P{b+)>%8VYM*^Yln7dhjwU(c4&uoXoq%ahjwU( za780%)yVcQnTB_nhMU!2`rl!ifBozM4Zi~Mue}lC|2A(i4Sh_*^lpNm?j~rA5dRMY zCyoF}7>VH|2m?^__~3U@s|U$0tzK^+jbty`7l@K3twl#iek^b1%)~G{lIf(04%4_` zqT_5bokT}2Gnz0H=rG1!Jey058x_opiCix6Y6Y`-e=cL9qXHhz=h1Ou;F*quY37o{ z6Q+^>AK2!;>i-OC0pA8U0ss5;P138^JzH>P5R?I2-2HXjzAZRqx8BJ1{0>xc%G&)A zg8m559rzNr>8(Rsa2M+dF4lj^V=KQ-07{$yHvdcUb(|Xi&;Px#f>XZz><{3cuI?MC z#t0bDw+-&(7F?enAMk(IyjQ+~>i;?v?ljYIngNV_9rtGyOm=f#;U2};?ec|eRVp&z c+%~u!+MylVp&bJLI{*Ox{|{nMpa3cW05ncNbpQYW literal 0 HcmV?d00001 diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/38d49488e3b0689e88335277a18bdc2d03c9b58cb45b79902bf648885e23b9f4 b/ci/e2e/resources/store/hello-world/blobs/sha256/38d49488e3b0689e88335277a18bdc2d03c9b58cb45b79902bf648885e23b9f4 new file mode 100644 index 00000000..52e8faf7 --- /dev/null +++ b/ci/e2e/resources/store/hello-world/blobs/sha256/38d49488e3b0689e88335277a18bdc2d03c9b58cb45b79902bf648885e23b9f4 @@ -0,0 +1 @@ +{"architecture":"arm","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/hello"],"Image":"sha256:b428cee5a856e0a27a68a92fdc79e07ce0e679444984d60dc60d09da91d3b256","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"a1cc96094ddc296dcc3e123f4153239d280bb09ade31fdbd6e430d19e9b48d76","container_config":{"Hostname":"a1cc96094ddc","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"/hello\"]"],"Image":"sha256:b428cee5a856e0a27a68a92fdc79e07ce0e679444984d60dc60d09da91d3b256","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2023-05-04T11:46:35.356328888Z","docker_version":"20.10.23","history":[{"created":"2023-05-04T11:46:35.27781596Z","created_by":"/bin/sh -c #(nop) COPY file:bf40f70af9a56eec54a66883a31493ea31545ec09ad150c432566b5e24b0528c in / "},{"created":"2023-05-04T11:46:35.356328888Z","created_by":"/bin/sh -c #(nop) CMD [\"/hello\"]","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:c8d6fe9d9f8fb6ab6e0d701141d358a8bc40b1d5c46cbdc6fd445371c895b1f6"]},"variant":"v7"} \ No newline at end of file diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/4bf3d0e19af8069cca924c84fccd58558900bd382ffbde49778906172aa135fb b/ci/e2e/resources/store/hello-world/blobs/sha256/4bf3d0e19af8069cca924c84fccd58558900bd382ffbde49778906172aa135fb new file mode 100644 index 0000000000000000000000000000000000000000..71a04f783062577bfd7c741a271b9d6b07bff69f GIT binary patch literal 4065 zcmV<74<7IziwFP!00000|Lj?RY#Y~o|J)rVQK}O^)oe-|!S>?voNFVB=faV0QG;oSG#h* zCF8GeyX$sQ5UxCn2*Q1mKsikK>zQpH>;kL=;s_vt&A1j4kPiSJvIpI16NY{ICJg$J zzw3CnC@n02kWbKr9)F&N{YMsA^UC5PLLKH;^@8$;7 z*g1pXEDK|idF#F043LQ>iMW2C_MQ0~qqV=6hO9ZKyH2I6;hgnx?rp&#IO~M5=mb%d zD9#zbhRDCsXzIb`iPq*M^*i%M-kRewupbLt-ZDFE%{j}0Cp&+)=+7-{&e@zl1y!h;F1$n&LW7noan^?X^jby$m%~xP2c@Cj&{Fs zAE}Sd8;@CYPR5#XZ0mjpn4S&dxb}oKrBxMc zq?!m%X&pE~N|Q&b66hAVb-=S3r*EZu;tHMa(#4cA-Xk&u6BCBm3d6?j77Q`7QBM|~lGkfx=6F`Ef)=|fvZ06*F zDz%O|aqA&R33J&>PHg5g;_6m$*UF>@`j^FRuiMk=oXg6ABg`>ehp29D=8vAkH|z zY1iheZ*vjiK$LtH`G+~5uU2OQdyNX)C|^yRl-AD~!@`C=1|Oa`PFr)%y}}tbB%EgQ zj0M@U!Q)&NIwKijk#%riE5NhXQAehn%iWDS2_Qeb21|qlOlfr*K$J$rCF>z4 zh{!r{w0a8?p&i)YchNfPSXgj?{S62w91#ifymib0Mj9$kIGwlJaoPz0*S%mJ zbrM#|sehWJ`Ml=h4mE&$BZfdk07)|@9*rUqTD9h!<6K5+OKZGFvEIN%l%0D~c80Ow zbm3SigR+yyg42OxApuh4Su8kvF-$VTqQjr#g3aQ>!uLf;k%V9~Rj^q?Soppwlnn_T z5m^Nu+#+h500dAYayS7Ai7>(vVqp;+ZbmYYu%;XU_AVE1nA8bBNsm>d%?=9Ql!)#47)xQX-DL5{QV`=+_g(AaXp7G zvP8i1@p%DeigY z?Gnc#Q}8sSIK#r=vA2Y%`Xk6CF9!d^&4W`6IK|^mlrJVkzK5((5tDPyJ?q@(iTC7q z7*8{TGc1VHjOV!d;Jm?k3MgyA$vH=!vB6^%_;EE#m$8ra24rgqJpW`B;=$lvgYO~J zgt(D=Pdfx>oS>^Sb@Q&7Q|-3A{Ox(8)sEbL+?F>HRqRG0l(FWV=R_~Z-_M?P=Gn8( zNcwfxo~mfK?W1792)i~s$>h2P6{lDnkFx}xV1sy)$<)T|x91I6S;7#$%Vf2Nd+`*L z~p;s=m=}HK-P@PRz z0x;A~&?^LbB?P?^cK=@1USiXgRW@CDl}%UH*mOmzm%lNfbU;?hh{g>>)ih$^3!q5# zNq+8aoF|tWL0oDOTxx`Islnr%;$`hU{-2#U!jn9gPP=`fY*_%N8owj<1}^5Ov~5TP z7z;!sBtlEpv|E3G1)J9%IyvPikiPe|&_=EC>bvg~B7#Ev-eHL8!w}b>w~jh-oYZ(7 zeheM!VTkKNkaYsG&TI9C&rUnsSIzi3&CVH#*8HEHHz=NAOV%S!9RI{r{E#X50UN|3 zYt5%H{$fSJ$O=V%h39ac?M%mJwu^BlMi?XM7&(B5C5q9RhY+<&ASkR{#HZ3h>`KGB zZWlq~I%RUs;XHut>r3ceAH<@Qz*)YpqvD5-f*&{(&s@nlnLrHsxiN%uhJssHqU3}a zC4U6q=(>UfD+IT%1aaF+l$OOO&>INi(ez91`FGDsYj4B*8m{lbZ}L9in^jZm9?@%_Wck{lE?`j1+o>fzXQ0l3$pSg_<7OI@own??(BdZe+Adzf!QDo4{u*L zWaV*q=SND5Df@+9oa|d=w%fbC%9gc#Hv}Nym=@nEA*!T=pRn^1sm z>^E7t^d{5nIxCmzOtar&<rAs5E0=hza9KjINWhoL^Rp)t_w#SUlk?gHi-V!?|SkH(7^ zK0mKcFfSiA&fg}^Q<{j38v{+hi`<`gbpr#Q-#eRr@9O~W+VFc1#~bJZ?(+P8ZPV`@ zZ{WRt|Kx}G{ip1_cGRtTk|4O}ux9hTZ@^s;qS@G5&u%jDt zA|M2iseGahFNkbqa~s|!WIUPZeqjry`c|1mc)q{NE@=Dqc0s_4u1v47^BT|XsIq{V zdI5jp%9axT@&oz_*S(# zSZ^d8&TGw{mH!@Su$`a&pdPpN{^7&!(H=YI-H{D`$Q@bFpgua9qv=9!j2_6P?$Zl5 z^c>7&i*!sc7L$ffi<#V^A~iEflOD-U6liw5XeLKTlV&zIPLuh(o-7opnWG~*J(Mfl zmmN1~Dpx4zDRcBle^1ZB95wWDy^u6@YPRt0^LL|WE_WX_GdfM@Mn`jpIDOI7^TmBV zbZ0+3n9-YvsnM)HZqih4+)SoSU2}>2cUn>(%Z>N<(9ge%#9OBMiP2FXf4h5cA3c;S zjB49yc8qK2>fXX^aAKsthf+$Fv24Ehg*yl=^N{(~YXmXr>Wn^O9oMCMV3?7>^bnP3h6xA-*=Qd0TUSG)dD1{fa_& z9N5=GGp3m@?u*4T6C?fJR{g2mSgfb#_FTcE)DI`e@}qju<(1X+WU-HaJzLD0E!0{r zRcs|UbTe8slLb@PVm&?YzWh|D(53ARDu%eU6$f1mLAuKMfY%|6~1|NZqIecoS>`}(YX!q>xxfzXxj z9UsYP+Wm{0dD}id0ilcUDxklZDVhZ{IfDK_xMS$c{mGGRdNgSi(Vrd9n&>z6!zTLE z+3_s;3pp)mCeg2F{w!Tcj_K%6nYls{{hANlw?@uHf6<$d6pQFL#wYrdrdi02OqhD{ ze@CBBxW8GDZ$@3qcP4j)+why;nVRd{TD~2jB~Ic#edc}Wn}fE|H{+n02G%Fr2-=*x zqm8~9-8&ivNo8-?KsQZq=+$37`J4Hh+;eIsUkfzL{SyY`wa??azPe zuQlbb`SdlPUJ3!00960fk8(g044wceAXkP literal 0 HcmV?d00001 diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/4f1af0faa5862569c7c76d72b1c8e09ba01f2adeea0a44f8f3758d185e95e918 b/ci/e2e/resources/store/hello-world/blobs/sha256/4f1af0faa5862569c7c76d72b1c8e09ba01f2adeea0a44f8f3758d185e95e918 new file mode 100644 index 0000000000000000000000000000000000000000..b5d091211c5082ea943c7938ebb908916cc52a18 GIT binary patch literal 3922 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 literal 0 HcmV?d00001 diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/719385e32844401d57ecfd3eacab360bf551a1491c05b85806ed8f1b08d792f6 b/ci/e2e/resources/store/hello-world/blobs/sha256/719385e32844401d57ecfd3eacab360bf551a1491c05b85806ed8f1b08d792f6 new file mode 100644 index 0000000000000000000000000000000000000000..e1b49b11e9d64a76b383187299715e016de556aa GIT binary patch literal 2457 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 Wdu;z7?SBFQ0RR8{HOQ|38UO%;h31|B literal 0 HcmV?d00001 diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/c4018b8bf4381a79e05c15591e1a1adf4452a9d383c4dcb63b1b7d4617d73af8 b/ci/e2e/resources/store/hello-world/blobs/sha256/c4018b8bf4381a79e05c15591e1a1adf4452a9d383c4dcb63b1b7d4617d73af8 new file mode 100644 index 0000000000000000000000000000000000000000..8d20e0cf2e870f998f65e5be6fc06235c7017689 GIT binary patch literal 2979 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 Z9?C;`C=aD9{~G`R|NnK|EWZF6003!T;u-(| literal 0 HcmV?d00001 diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/d549b3d1a2550a5e42a3f3250ce9fa4aa882b25f8528fd2eea1b789ce136631b b/ci/e2e/resources/store/hello-world/blobs/sha256/d549b3d1a2550a5e42a3f3250ce9fa4aa882b25f8528fd2eea1b789ce136631b new file mode 100644 index 00000000..14c43d32 --- /dev/null +++ b/ci/e2e/resources/store/hello-world/blobs/sha256/d549b3d1a2550a5e42a3f3250ce9fa4aa882b25f8528fd2eea1b789ce136631b @@ -0,0 +1 @@ +{"architecture":"s390x","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/hello"],"Image":"sha256:0a4ed120e12f159b468ae1fbdf6d7e2c053fd5547f6ad1e12019283e425a4f0c","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"16de42fe001ec70d74120e5db0a765dc7cf960bc3ecdfdd23fe034dac2b12962","container_config":{"Hostname":"16de42fe001e","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"/hello\"]"],"Image":"sha256:0a4ed120e12f159b468ae1fbdf6d7e2c053fd5547f6ad1e12019283e425a4f0c","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2023-05-05T06:04:49.524781092Z","docker_version":"20.10.23","history":[{"created":"2023-05-05T06:04:49.407407092Z","created_by":"/bin/sh -c #(nop) COPY file:2412b45fdbb28b2191d4b0d59a4c66e460863549bae786d0aaf49c123b876e0b in / "},{"created":"2023-05-05T06:04:49.524781092Z","created_by":"/bin/sh -c #(nop) CMD [\"/hello\"]","empty_layer":true}],"os":"linux","rootfs":{"type":"layers","diff_ids":["sha256:3aced21b93452b84cf84067c6ef10ea4a4841f8ca36a18300504f9b408f0082f"]}} \ No newline at end of file diff --git a/ci/e2e/resources/store/hello-world/blobs/sha256/d898e3d98788d70a8f874f818177c11569c5bb3c818ef45b877e7bba29a3bf7f b/ci/e2e/resources/store/hello-world/blobs/sha256/d898e3d98788d70a8f874f818177c11569c5bb3c818ef45b877e7bba29a3bf7f new file mode 100644 index 0000000000000000000000000000000000000000..1f7906e963a1db63c3daaf3409e476344b9297aa GIT binary patch literal 3265 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