@@ -20,17 +20,17 @@ import (
2020 "context"
2121 "encoding/json"
2222 "fmt"
23+ "io"
2324 "os"
2425 "path/filepath"
2526 "strconv"
2627 "strings"
2728
2829 "github.com/compose-spec/compose-go/v2/loader"
30+ "github.com/containerd/containerd/v2/core/remotes"
2931 "github.com/distribution/reference"
30- "github.com/docker/buildx/store/storeutil"
31- "github.com/docker/buildx/util/imagetools"
3232 "github.com/docker/cli/cli/command"
33- "github.com/docker/compose/v2/internal/ocipush "
33+ "github.com/docker/compose/v2/internal/oci "
3434 v1 "github.com/opencontainers/image-spec/specs-go/v1"
3535)
3636
@@ -88,13 +88,9 @@ func (g ociRemoteLoader) Load(ctx context.Context, path string) (string, error)
8888 return "" , err
8989 }
9090
91- opt , err := storeutil .GetImageConfig (g .dockerCli , nil )
92- if err != nil {
93- return "" , err
94- }
95- resolver := imagetools .New (opt )
91+ resolver := oci .NewResolver (g .dockerCli .ConfigFile ())
9692
97- content , descriptor , err := resolver . Get (ctx , ref . String () )
93+ descriptor , content , err := g . get (ctx , resolver , ref )
9894 if err != nil {
9995 return "" , err
10096 }
@@ -124,11 +120,32 @@ func (g ociRemoteLoader) Load(ctx context.Context, path string) (string, error)
124120 return filepath .Join (local , "compose.yaml" ), nil
125121}
126122
123+ func (g ociRemoteLoader ) get (ctx context.Context , resolver remotes.Resolver , ref reference.Named ) (v1.Descriptor , []byte , error ) {
124+ _ , descriptor , err := resolver .Resolve (ctx , ref .String ())
125+ if err != nil {
126+ return v1.Descriptor {}, nil , err
127+ }
128+
129+ fetcher , err := resolver .Fetcher (ctx , ref .String ())
130+ if err != nil {
131+ return v1.Descriptor {}, nil , err
132+ }
133+ fetch , err := fetcher .Fetch (ctx , descriptor )
134+ if err != nil {
135+ return v1.Descriptor {}, nil , err
136+ }
137+ content , err := io .ReadAll (fetch )
138+ if err != nil {
139+ return v1.Descriptor {}, nil , err
140+ }
141+ return descriptor , content , nil
142+ }
143+
127144func (g ociRemoteLoader ) Dir (path string ) string {
128145 return g .known [path ]
129146}
130147
131- func (g ociRemoteLoader ) pullComposeFiles (ctx context.Context , local string , manifest v1.Manifest , ref reference.Named , resolver * imagetools .Resolver ) error { //nolint:gocyclo
148+ func (g ociRemoteLoader ) pullComposeFiles (ctx context.Context , local string , manifest v1.Manifest , ref reference.Named , resolver remotes .Resolver ) error { //nolint:gocyclo
132149 err := os .MkdirAll (local , 0o700 )
133150 if err != nil {
134151 return err
@@ -139,8 +156,8 @@ func (g ociRemoteLoader) pullComposeFiles(ctx context.Context, local string, man
139156 return err
140157 }
141158 defer f .Close () //nolint:errcheck
142- if (manifest .ArtifactType != "" && manifest .ArtifactType != ocipush .ComposeProjectArtifactType ) ||
143- (manifest .ArtifactType == "" && manifest .Config .MediaType != ocipush .ComposeEmptyConfigMediaType ) {
159+ if (manifest .ArtifactType != "" && manifest .ArtifactType != oci .ComposeProjectArtifactType ) ||
160+ (manifest .ArtifactType == "" && manifest .Config .MediaType != oci .ComposeEmptyConfigMediaType ) {
144161 return fmt .Errorf ("%s is not a compose project OCI artifact, but %s" , ref .String (), manifest .ArtifactType )
145162 }
146163
@@ -149,13 +166,14 @@ func (g ociRemoteLoader) pullComposeFiles(ctx context.Context, local string, man
149166 if err != nil {
150167 return err
151168 }
152- content , _ , err := resolver .Get (ctx , digested .String ())
169+
170+ _ , content , err := g .get (ctx , resolver , digested )
153171 if err != nil {
154172 return err
155173 }
156174
157175 switch layer .MediaType {
158- case ocipush .ComposeYAMLMediaType :
176+ case oci .ComposeYAMLMediaType :
159177 target := f
160178 _ , extends := layer .Annotations ["com.docker.compose.extends" ]
161179 if extends {
@@ -167,11 +185,11 @@ func (g ociRemoteLoader) pullComposeFiles(ctx context.Context, local string, man
167185 if err := writeComposeFile (layer , i , target , content ); err != nil {
168186 return err
169187 }
170- case ocipush .ComposeEnvFileMediaType :
188+ case oci .ComposeEnvFileMediaType :
171189 if err := writeEnvFile (layer , local , content ); err != nil {
172190 return err
173191 }
174- case ocipush .ComposeEmptyConfigMediaType :
192+ case oci .ComposeEmptyConfigMediaType :
175193 }
176194 }
177195 return nil
0 commit comments