Skip to content

Commit

Permalink
Remove OCI MediaTypeArtifactManifest
Browse files Browse the repository at this point in the history
Signed-off-by: Jin Dong <[email protected]>
  • Loading branch information
djdongjin committed May 10, 2023
1 parent 586037f commit 690f97e
Show file tree
Hide file tree
Showing 13 changed files with 68 additions and 204 deletions.
6 changes: 3 additions & 3 deletions cmd/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ require (
github.com/docker/cli v23.0.4+incompatible
github.com/docker/go-metrics v0.0.1
github.com/opencontainers/go-digest v1.0.0
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b
github.com/opencontainers/image-spec v1.1.0-rc3
github.com/pelletier/go-toml v1.9.5
github.com/sirupsen/logrus v1.9.0
github.com/urfave/cli v1.22.12
go.etcd.io/bbolt v1.3.7
golang.org/x/sys v0.7.0
google.golang.org/grpc v1.54.0
oras.land/oras-go/v2 v2.0.2
oras.land/oras-go/v2 v2.1.0
)

require (
Expand Down Expand Up @@ -94,7 +94,7 @@ require (
golang.org/x/mod v0.10.0 // indirect
golang.org/x/net v0.9.0 // indirect
golang.org/x/oauth2 v0.5.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sync v0.2.0 // indirect
golang.org/x/term v0.7.0 // indirect
golang.org/x/text v0.9.0 // indirect
golang.org/x/time v0.3.0 // indirect
Expand Down
12 changes: 6 additions & 6 deletions cmd/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,8 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl
github.com/onsi/gomega v1.24.2 h1:J/tulyYK6JwBldPViHJReihxxZ+22FHs0piGjQAvoUE=
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.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8=
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ=
github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8=
github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
github.com/opencontainers/runc v1.1.6 h1:XbhB8IfG/EsnhNvZtNdLB0GBw92GYEFvKlhaJk9jUgA=
github.com/opencontainers/runc v1.1.6/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
github.com/opencontainers/runtime-spec v1.1.0-rc.2 h1:ucBtEms2tamYYW/SvGpvq9yUN0NEVL6oyLEwDcTSrk8=
Expand Down Expand Up @@ -339,8 +339,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -463,8 +463,8 @@ k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+O
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrDp+YEkVDAHu7Jwk=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
oras.land/oras-go/v2 v2.0.2 h1:3aSQdJ7EUC0ft2e9PjJB9Jzastz5ojPA4LzZ3Q4YbUc=
oras.land/oras-go/v2 v2.0.2/go.mod h1:PWnWc/Kyyg7wUTUsDHshrsJkzuxXzreeMd6NrfdnFSo=
oras.land/oras-go/v2 v2.1.0 h1:1nS8BIeEP6CBVQifwxrsth2bkuD+cYfjp7Hf7smUcS8=
oras.land/oras-go/v2 v2.1.0/go.mod h1:v5ZSAPIMEJYnZjZ6rTGPAyaonH+rCFmbE95IAzCTeGU=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
Expand Down
12 changes: 0 additions & 12 deletions cmd/soci/commands/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package commands

import (
"errors"
"fmt"
"os"

"github.com/awslabs/soci-snapshotter/cmd/soci/commands/internal"
Expand All @@ -45,7 +44,6 @@ var CreateCommand = cli.Command{
ArgsUsage: "[flags] <image_ref>",
Flags: append(
internal.PlatformFlags,
internal.ManifestTypeFlag,
cli.Int64Flag{
Name: spanSizeFlag,
Usage: "Span size that soci index uses to segment layer data. Default is 4 MiB",
Expand Down Expand Up @@ -108,16 +106,6 @@ var CreateCommand = cli.Command{
soci.WithBuildToolIdentifier(buildToolIdentifier),
}

manifestType := cliContext.String(internal.ManifestTypeFlagName)

if manifestType != internal.ImageManifestType && manifestType != internal.ArtifactManifestType {
return fmt.Errorf("undefined manifest type: %v. supported manifest types: [%s, %s]", manifestType, internal.ImageManifestType, internal.ArtifactManifestType)
}

if manifestType == internal.ArtifactManifestType {
builderOpts = append(builderOpts, soci.WithOCIArtifactRegistrySupport)
}

for _, plat := range ps {
builder, err := soci.NewIndexBuilder(cs, blobStore, artifactsDb, append(builderOpts, soci.WithPlatform(plat))...)

Expand Down
32 changes: 0 additions & 32 deletions cmd/soci/commands/internal/spec.go

This file was deleted.

6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,20 @@ require (
github.com/moby/sys/mountinfo v0.6.2
github.com/montanaflynn/stats v0.7.0
github.com/opencontainers/go-digest v1.0.0
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b
github.com/opencontainers/image-spec v1.1.0-rc3
github.com/prometheus/client_golang v1.15.0
github.com/rs/xid v1.5.0
github.com/sirupsen/logrus v1.9.0
go.etcd.io/bbolt v1.3.7
golang.org/x/crypto v0.8.0
golang.org/x/sync v0.1.0
golang.org/x/sync v0.2.0
golang.org/x/sys v0.7.0
golang.org/x/time v0.3.0
google.golang.org/grpc v1.54.0
k8s.io/api v0.26.3
k8s.io/apimachinery v0.26.3
k8s.io/client-go v0.26.3
oras.land/oras-go/v2 v2.0.2
oras.land/oras-go/v2 v2.1.0
)

require (
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,8 @@ github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs=
github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys=
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.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8=
github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ=
github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8=
github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
github.com/opencontainers/runc v1.1.6 h1:XbhB8IfG/EsnhNvZtNdLB0GBw92GYEFvKlhaJk9jUgA=
github.com/opencontainers/runc v1.1.6/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
github.com/opencontainers/runtime-spec v1.1.0-rc.2 h1:ucBtEms2tamYYW/SvGpvq9yUN0NEVL6oyLEwDcTSrk8=
Expand Down Expand Up @@ -295,8 +295,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down Expand Up @@ -404,8 +404,8 @@ k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+O
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5 h1:kmDqav+P+/5e1i9tFfHq1qcF3sOrDp+YEkVDAHu7Jwk=
k8s.io/utils v0.0.0-20230220204549-a5ecb0141aa5/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
oras.land/oras-go/v2 v2.0.2 h1:3aSQdJ7EUC0ft2e9PjJB9Jzastz5ojPA4LzZ3Q4YbUc=
oras.land/oras-go/v2 v2.0.2/go.mod h1:PWnWc/Kyyg7wUTUsDHshrsJkzuxXzreeMd6NrfdnFSo=
oras.land/oras-go/v2 v2.1.0 h1:1nS8BIeEP6CBVQifwxrsth2bkuD+cYfjp7Hf7smUcS8=
oras.land/oras-go/v2 v2.1.0/go.mod h1:v5ZSAPIMEJYnZjZ6rTGPAyaonH+rCFmbE95IAzCTeGU=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
Expand Down
16 changes: 5 additions & 11 deletions integration/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package integration

import (
"bytes"
"encoding/json"
"fmt"
"io"
"math"
Expand Down Expand Up @@ -350,18 +349,13 @@ func buildIndexByManipulatingZtocData(sh *shell.Shell, indexDigest string, manip
ztocDescs = append(ztocDescs, ztocDesc)
}

newIndex := soci.Index{
MediaType: ocispec.MediaTypeArtifactManifest,
ArtifactType: soci.SociIndexArtifactType,
Blobs: ztocDescs,
Subject: &ocispec.Descriptor{
MediaType: ocispec.MediaTypeArtifactManifest,
Digest: index.Subject.Digest,
Size: index.Subject.Size,
},
subject := ocispec.Descriptor{
Digest: index.Subject.Digest,
Size: index.Subject.Size,
}

b, err := json.Marshal(newIndex)
newIndex := soci.NewIndex(ztocDescs, &subject, nil)
b, err := soci.MarshalIndex(newIndex)
if err != nil {
return "", err
}
Expand Down
15 changes: 5 additions & 10 deletions integration/pull_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -448,18 +448,13 @@ func TestPullWithAribtraryBlobInvalidZtocFormat(t *testing.T) {
})
}

index := soci.Index{
MediaType: ocispec.MediaTypeArtifactManifest,
ArtifactType: soci.SociIndexArtifactType,
Blobs: ztocDescs,
Subject: &ocispec.Descriptor{
MediaType: ocispec.MediaTypeArtifactManifest,
Digest: digest.Digest(imgDigest),
Size: int64(len(imgBytes)),
},
subject := ocispec.Descriptor{
Digest: digest.Digest(imgDigest),
Size: int64(len(imgBytes)),
}
index := soci.NewIndex(ztocDescs, &subject, nil)

b, err := json.Marshal(index)
b, err := soci.MarshalIndex(index)
if err != nil {
return nil, nil, err
}
Expand Down
39 changes: 10 additions & 29 deletions integration/push_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,34 +125,19 @@ func TestPushAlwaysMostRecentlyCreatedIndex(t *testing.T) {

func TestLegacyOCI(t *testing.T) {
tests := []struct {
name string
registryImage string
supportArtifactRegistry bool
expectError bool
name string
registryImage string
expectError bool
}{
{
name: "OCI 1.1 Artifacts succeed with OCI 1.1 registry",
registryImage: oci11RegistryImage,
supportArtifactRegistry: true,
expectError: false,
name: "OCI 1.0 Artifacts succeed with OCI 1.1 registry",
registryImage: oci11RegistryImage,
expectError: false,
},
{
name: "OCI 1.0 Artifacts succeed with OCI 1.1 registry",
registryImage: oci11RegistryImage,
supportArtifactRegistry: false,
expectError: false,
},
{
name: "OCI 1.1 Artifacts fail with OCI 1.0 registry",
registryImage: oci10RegistryImage,
supportArtifactRegistry: true,
expectError: true,
},
{
name: "OCI 1.0 Artifacts succeed with OCI 1.0 registry",
registryImage: oci10RegistryImage,
supportArtifactRegistry: false,
expectError: false,
name: "OCI 1.0 Artifacts succeed with OCI 1.0 registry",
registryImage: oci10RegistryImage,
expectError: false,
},
}

Expand All @@ -168,11 +153,7 @@ func TestLegacyOCI(t *testing.T) {
imageName := ubuntuImage
copyImage(sh, dockerhub(imageName), regConfig.mirror(imageName))

var buildOpts []indexBuildOption
if tc.supportArtifactRegistry {
buildOpts = append(buildOpts, withOCIArtifactRegistrySupport)
}
indexDigest := buildIndex(sh, regConfig.mirror(imageName), buildOpts...)
indexDigest := buildIndex(sh, regConfig.mirror(imageName))
rawJSON := sh.O("soci", "index", "info", indexDigest)
var sociIndex soci.Index
if err := soci.UnmarshalIndex(rawJSON, &sociIndex); err != nil {
Expand Down
17 changes: 4 additions & 13 deletions integration/util_soci_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,8 @@ const (
// indexBuildConfig represents the values of the CLI flags that should be used
// when creating an index with `buildIndex`
type indexBuildConfig struct {
spanSize int64
minLayerSize int64
supportArtifactRegistry bool
spanSize int64
minLayerSize int64
}

// indexBuildOption is a functional argument to update `indexBuildConfig`
Expand All @@ -78,11 +77,6 @@ func withMinLayerSize(minLayerSize int64) indexBuildOption {
}
}

// withOCIArtifactRegistrySupport sets the SOCI index to built as an artifact manifest
func withOCIArtifactRegistrySupport(ibc *indexBuildConfig) {
ibc.supportArtifactRegistry = true
}

// defaultIndexBuildConfig is the default parameters when creating and index with `buildIndex`
func defaultIndexBuildConfig() indexBuildConfig {
return indexBuildConfig{
Expand All @@ -106,9 +100,6 @@ func buildIndex(sh *shell.Shell, src imageInfo, opt ...indexBuildOption) string
"--span-size", fmt.Sprintf("%d", indexBuildConfig.spanSize),
"--platform", platforms.Format(src.platform),
}
if indexBuildConfig.supportArtifactRegistry {
createArgs = append(createArgs, "--manifest-type", "artifact")
}

indexDigest := sh.
X(append([]string{"nerdctl", "pull", "-q", "--platform", platforms.Format(src.platform)}, opts[0]...)...).
Expand All @@ -120,8 +111,8 @@ func buildIndex(sh *shell.Shell, src imageInfo, opt ...indexBuildOption) string
}

func validateSociIndex(sh *shell.Shell, sociIndex soci.Index, imgManifestDigest string, includedLayers map[string]struct{}) error {
if sociIndex.MediaType != ocispec.MediaTypeArtifactManifest && sociIndex.MediaType != ocispec.MediaTypeImageManifest {
return fmt.Errorf("unexpected index media type; expected types: [%v, %v], got: %v", ocispec.MediaTypeArtifactManifest, ocispec.MediaTypeImageManifest, sociIndex.MediaType)
if sociIndex.MediaType != ocispec.MediaTypeImageManifest {
return fmt.Errorf("unexpected index media type; expected types: [%v], got: %v", ocispec.MediaTypeImageManifest, sociIndex.MediaType)
}
if sociIndex.ArtifactType != soci.SociIndexArtifactType {
return fmt.Errorf("unexpected index artifact type; expected = %v, got = %v", soci.SociIndexArtifactType, sociIndex.ArtifactType)
Expand Down
2 changes: 1 addition & 1 deletion soci/artifacts.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ func (db *ArtifactsDb) RemoveArtifactEntryByImageDigest(digest string) error {
// Determines whether a bucket represents an index, as opposed to a zTOC
func indexBucket(b *bolt.Bucket) bool {
mt := string(b.Get(bucketKeyMediaType))
return mt == ocispec.MediaTypeArtifactManifest || mt == ocispec.MediaTypeImageManifest
return mt == ocispec.MediaTypeImageManifest
}

// Determines whether a bucket's image digest is the same as digest
Expand Down
Loading

0 comments on commit 690f97e

Please sign in to comment.