@@ -31,8 +31,7 @@ import (
3131)
3232
3333const (
34- refTag = "latest"
35-
34+ refTag = "latest"
3635 layoutStr = `{"imageLayoutVersion": "1.0.0"}`
3736
3837 configStr = `{
@@ -91,8 +90,44 @@ const (
9190)
9291
9392var (
94- refStr = `{"digest":"<manifest_digest>","mediaType":"application/vnd.oci.image.manifest.v1+json","size":<manifest_size>}`
95-
93+ indexStr = `{
94+ "schemaVersion": 2,
95+ "manifests": [
96+ {
97+ "mediaType": "application/vnd.oci.image.index.v1+json",
98+ "size": <manifest_size>,
99+ "digest": "<manifest_digest>",
100+ "annotations": {
101+ "org.opencontainers.ref.name": "v1.0"
102+ }
103+ },
104+ {
105+ "mediaType": "application/vnd.oci.image.manifest.v1+json",
106+ "size": <manifest_size>,
107+ "digest": "<manifest_digest>",
108+ "platform": {
109+ "architecture": "ppc64le",
110+ "os": "linux"
111+ },
112+ "annotations": {
113+ "org.opencontainers.ref.name": "latest"
114+ }
115+ },
116+ {
117+ "mediaType": "application/xml",
118+ "size": <manifest_size>,
119+ "digest": "<manifest_digest>",
120+ "annotations": {
121+ "org.freedesktop.specifications.metainfo.version": "1.0",
122+ "org.freedesktop.specifications.metainfo.type": "AppStream"
123+ }
124+ }
125+ ],
126+ "annotations": {
127+ "com.example.index.revision": "r124356"
128+ }
129+ }
130+ `
96131 manifestStr = `{
97132 "annotations": null,
98133 "config": {
@@ -162,11 +197,6 @@ func createImageLayoutBundle(il imageLayout) error {
162197 return err
163198 }
164199
165- err = os .MkdirAll (filepath .Join (il .rootDir , "refs" ), 0700 )
166- if err != nil {
167- return err
168- }
169-
170200 // create image layout file
171201 err = createLayoutFile (il .rootDir )
172202 if err != nil {
@@ -178,14 +208,14 @@ func createImageLayoutBundle(il imageLayout) error {
178208 if err != nil {
179209 return err
180210 }
181- il .manifest = strings .Replace (il .manifest , "<layer_digest>" , desc .Digest , 1 )
211+ il .manifest = strings .Replace (il .manifest , "<layer_digest>" , string ( desc .Digest ) , 1 )
182212 il .manifest = strings .Replace (il .manifest , "<layer_size>" , strconv .FormatInt (desc .Size , 10 ), 1 )
183213
184214 desc , err = createConfigFile (il .rootDir , il .config )
185215 if err != nil {
186216 return err
187217 }
188- il .manifest = strings .Replace (il .manifest , "<config_digest>" , desc .Digest , 1 )
218+ il .manifest = strings .Replace (il .manifest , "<config_digest>" , string ( desc .Digest ) , 1 )
189219 il .manifest = strings .Replace (il .manifest , "<config_size>" , strconv .FormatInt (desc .Size , 10 ), 1 )
190220
191221 // create manifest blob file
@@ -194,7 +224,7 @@ func createImageLayoutBundle(il imageLayout) error {
194224 return err
195225 }
196226
197- return createRefFile (il .rootDir , il . ref , desc )
227+ return createIndexFile (il .rootDir , desc )
198228}
199229
200230func createLayoutFile (root string ) error {
@@ -208,16 +238,16 @@ func createLayoutFile(root string) error {
208238 return err
209239}
210240
211- func createRefFile (root , ref string , mft descriptor ) error {
212- refpath := filepath .Join (root , "refs" , ref )
213- f , err := os .Create (refpath )
241+ func createIndexFile (root string , mft descriptor ) error {
242+ indexpath := filepath .Join (root , "index.json" )
243+ f , err := os .Create (indexpath )
214244 if err != nil {
215245 return err
216246 }
217247 defer f .Close ()
218- refStr = strings .Replace (refStr , "<manifest_digest>" , mft .Digest , - 1 )
219- refStr = strings .Replace (refStr , "<manifest_size>" , strconv .FormatInt (mft .Size , 10 ), - 1 )
220- _ , err = io .Copy (f , bytes .NewBuffer ([]byte (refStr )))
248+ indexStr = strings .Replace (indexStr , "<manifest_digest>" , string ( mft .Digest ) , - 1 )
249+ indexStr = strings .Replace (indexStr , "<manifest_size>" , strconv .FormatInt (mft .Size , 10 ), - 1 )
250+ _ , err = io .Copy (f , bytes .NewBuffer ([]byte (indexStr )))
221251 return err
222252}
223253
@@ -297,7 +327,7 @@ func createHashedBlob(name string) (descriptor, error) {
297327 return descriptor {}, err
298328 }
299329
300- parsed , err := digest .Parse (desc .Digest )
330+ parsed , err := digest .Parse (string ( desc .Digest ) )
301331 if err != nil {
302332 return descriptor {}, err
303333 }
@@ -325,7 +355,7 @@ func newDescriptor(name string) (descriptor, error) {
325355 }
326356
327357 return descriptor {
328- Digest : digester .Digest (). String () ,
358+ Digest : digester .Digest (),
329359 Size : size ,
330360 }, nil
331361}
0 commit comments