@@ -108,50 +108,57 @@ func (g ociRemoteLoader) Load(ctx context.Context, path string) (string, error)
108108 local := filepath .Join (g .cache , descriptor .Digest .Hex ())
109109 composeFile := filepath .Join (local , "compose.yaml" )
110110 if _ , err = os .Stat (local ); os .IsNotExist (err ) {
111-
112- err = os . MkdirAll ( local , 0o700 )
111+ var manifest v1. Manifest
112+ err = json . Unmarshal ( content , & manifest )
113113 if err != nil {
114114 return "" , err
115115 }
116116
117- f , err := os . Create ( composeFile )
118- if err != nil {
119- return "" , err
117+ s , err2 := g . pullComposeFiles ( ctx , local , composeFile , manifest , ref , resolver )
118+ if err2 != nil {
119+ return s , err2
120120 }
121- defer f .Close () //nolint:errcheck
121+ }
122+ return composeFile , nil
123+ }
122124
123- var manifest v1.Manifest
124- err = json .Unmarshal (content , & manifest )
125+ func (g ociRemoteLoader ) pullComposeFiles (ctx context.Context , local string , composeFile string , manifest v1.Manifest , ref reference.Named , resolver * imagetools.Resolver ) (string , error ) {
126+ err := os .MkdirAll (local , 0o700 )
127+ if err != nil {
128+ return "" , err
129+ }
130+
131+ f , err := os .Create (composeFile )
132+ if err != nil {
133+ return "" , err
134+ }
135+ defer f .Close () //nolint:errcheck
136+
137+ if manifest .ArtifactType != "application/vnd.docker.compose.project" {
138+ return "" , fmt .Errorf ("%s is not a compose project OCI artifact, but %s" , ref .String (), manifest .ArtifactType )
139+ }
140+
141+ for i , layer := range manifest .Layers {
142+ digested , err := reference .WithDigest (ref , layer .Digest )
125143 if err != nil {
126144 return "" , err
127145 }
128-
129- if manifest . ArtifactType != "application/vnd.docker.compose.project" {
130- return "" , fmt . Errorf ( "%s is not a compose project OCI artifact, but %s" , ref . String (), manifest . ArtifactType )
146+ content , _ , err := resolver . Get ( ctx , digested . String ())
147+ if err != nil {
148+ return "" , err
131149 }
132-
133- for i , layer := range manifest .Layers {
134- digested , err := reference .WithDigest (ref , layer .Digest )
135- if err != nil {
136- return "" , err
137- }
138- content , _ , err := resolver .Get (ctx , digested .String ())
139- if err != nil {
140- return "" , err
141- }
142- if i > 0 {
143- _ , err = f .Write ([]byte ("\n ---\n " ))
144- if err != nil {
145- return "" , err
146- }
147- }
148- _ , err = f .Write (content )
150+ if i > 0 {
151+ _ , err = f .Write ([]byte ("\n ---\n " ))
149152 if err != nil {
150153 return "" , err
151154 }
152155 }
156+ _ , err = f .Write (content )
157+ if err != nil {
158+ return "" , err
159+ }
153160 }
154- return composeFile , nil
161+ return "" , nil
155162}
156163
157164var _ loader.ResourceLoader = ociRemoteLoader {}
0 commit comments