(ctx context.Context, dockerCli command.Cli, model map[string]any)
| 300 | } |
| 301 | |
| 302 | func resolveImageDigests(ctx context.Context, dockerCli command.Cli, model map[string]any) (err error) { |
| 303 | // create a pseudo-project so we can rely on WithImagesResolved to resolve images |
| 304 | p := &types.Project{ |
| 305 | Services: types.Services{}, |
| 306 | } |
| 307 | services := model["services"].(map[string]any) |
| 308 | for name, s := range services { |
| 309 | service := s.(map[string]any) |
| 310 | if image, ok := service["image"]; ok { |
| 311 | p.Services[name] = types.ServiceConfig{ |
| 312 | Image: image.(string), |
| 313 | } |
| 314 | } |
| 315 | } |
| 316 | |
| 317 | p, err = p.WithImagesResolved(compose.ImageDigestResolver(ctx, dockerCli.ConfigFile(), dockerCli.Client())) |
| 318 | if err != nil { |
| 319 | return err |
| 320 | } |
| 321 | |
| 322 | // Collect image resolved with digest and update model accordingly |
| 323 | for name, s := range services { |
| 324 | service := s.(map[string]any) |
| 325 | config := p.Services[name] |
| 326 | if config.Image != "" { |
| 327 | service["image"] = config.Image |
| 328 | } |
| 329 | services[name] = service |
| 330 | } |
| 331 | model["services"] = services |
| 332 | return nil |
| 333 | } |
| 334 | |
| 335 | func formatModel(model map[string]any, format string) (content []byte, err error) { |
| 336 | switch format { |
no test coverage detected