@@ -108,50 +108,57 @@ func (g ociRemoteLoader) Load(ctx context.Context, path string) (string, error)
108
108
local := filepath .Join (g .cache , descriptor .Digest .Hex ())
109
109
composeFile := filepath .Join (local , "compose.yaml" )
110
110
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 )
113
113
if err != nil {
114
114
return "" , err
115
115
}
116
116
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
120
120
}
121
- defer f .Close () //nolint:errcheck
121
+ }
122
+ return composeFile , nil
123
+ }
122
124
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 )
125
143
if err != nil {
126
144
return "" , err
127
145
}
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
131
149
}
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 " ))
149
152
if err != nil {
150
153
return "" , err
151
154
}
152
155
}
156
+ _ , err = f .Write (content )
157
+ if err != nil {
158
+ return "" , err
159
+ }
153
160
}
154
- return composeFile , nil
161
+ return "" , nil
155
162
}
156
163
157
164
var _ loader.ResourceLoader = ociRemoteLoader {}
0 commit comments