@@ -10,12 +10,12 @@ import (
1010 "os"
1111 "strings"
1212
13- "github.com/opencontainers/image-spec/oci"
1413 "github.com/opencontainers/image-spec/schema"
1514 "github.com/pkg/errors"
1615 "github.com/spf13/cobra"
1716)
1817
18+ // supported validation types
1919const (
2020 typeImageLayout = "imageLayout"
2121 typeImage = "image"
@@ -80,7 +80,7 @@ func (v *validateCmd) Run(cmd *cobra.Command, args []string) {
8080 }
8181
8282 var errs []error
83- if verr , ok := errors .Cause (err ).(oci .ValidationError ); ok {
83+ if verr , ok := errors .Cause (err ).(schema .ValidationError ); ok {
8484 errs = verr .Errs
8585 } else {
8686 v .stderr .Printf ("file %s: validation failed: %v" , arg , err )
@@ -108,15 +108,21 @@ func (v *validateCmd) validatePath(name string) error {
108108 }
109109 }
110110
111+ f , err := os .Open (name )
112+ if err != nil {
113+ return errors .Wrap (err , "unable to open file" )
114+ }
115+ defer f .Close ()
116+
111117 switch typ {
112118 case typeManifest :
113- if err := withFile ( name , oci . ValidateManifest ); err != nil {
119+ if err := schema . MediaTypeManifest . Validate ( f ); err != nil {
114120 return err
115121 }
116122
117123 return nil
118124 case typeManifestList :
119- if err := withFile ( name , oci . ValidateManifestList ); err != nil {
125+ if err := schema . MediaTypeManifestList . Validate ( f ); err != nil {
120126 return err
121127 }
122128
@@ -126,20 +132,8 @@ func (v *validateCmd) validatePath(name string) error {
126132 return fmt .Errorf ("type %q unimplemented" , typ )
127133}
128134
129- // withFile opens the named file for reading and executes the given function fn if no error occured.
130- // If the given function returns an error it will be returned.
131- func withFile (name string , fn func (f io.Reader ) error ) error {
132- f , err := os .Open (name )
133- if err != nil {
134- return errors .Wrap (err , "unable to open file" )
135- }
136- defer f .Close ()
137-
138- return fn (f )
139- }
140-
141- // autodetect returns one of the type.. constants of the content of the given path
142- // or an error if the type could not be resolved.
135+ // autodetect detects the validation type for the given path
136+ // or an error if the validation type could not be resolved.
143137func autodetect (path string ) (string , error ) {
144138 fi , err := os .Stat (path )
145139 if err != nil {
@@ -156,7 +150,7 @@ func autodetect(path string) (string, error) {
156150 }
157151 defer f .Close ()
158152
159- buf , err := ioutil .ReadAll (io .LimitReader (f , 512 )) // read up to 512 bytes for content detection
153+ buf , err := ioutil .ReadAll (io .LimitReader (f , 512 )) // read some initial bytes to detect content
160154 if err != nil {
161155 return "" , errors .Wrap (err , "unable to read" )
162156 }
@@ -192,10 +186,10 @@ func autodetect(path string) (string, error) {
192186 }
193187
194188 switch {
195- case header .MediaType == schema .MediaTypeManifest :
189+ case header .MediaType == string ( schema .MediaTypeManifest ) :
196190 return typeManifest , nil
197191
198- case header .MediaType == schema .MediaTypeManifestList :
192+ case header .MediaType == string ( schema .MediaTypeManifestList ) :
199193 return typeManifestList , nil
200194
201195 case header .MediaType == "" && header .SchemaVersion == 0 && header .Config != nil :
0 commit comments