(ctx context.Context, dockerCli command.Cli, opts configOptions, services []string)
| 266 | } |
| 267 | |
| 268 | func runConfigNoInterpolate(ctx context.Context, dockerCli command.Cli, opts configOptions, services []string) ([]byte, error) { |
| 269 | // we can't use ToProject, so the model we render here is only partially resolved |
| 270 | model, err := opts.ToModel(ctx, dockerCli, services) |
| 271 | if err != nil { |
| 272 | return nil, err |
| 273 | } |
| 274 | |
| 275 | if opts.resolveImageDigests { |
| 276 | err = resolveImageDigests(ctx, dockerCli, model) |
| 277 | if err != nil { |
| 278 | return nil, err |
| 279 | } |
| 280 | } |
| 281 | |
| 282 | if opts.lockImageDigests { |
| 283 | for key, e := range model { |
| 284 | if key != "services" { |
| 285 | delete(model, key) |
| 286 | } else { |
| 287 | for _, s := range e.(map[string]any) { |
| 288 | service := s.(map[string]any) |
| 289 | for key := range service { |
| 290 | if key != "image" { |
| 291 | delete(service, key) |
| 292 | } |
| 293 | } |
| 294 | } |
| 295 | } |
| 296 | } |
| 297 | } |
| 298 | |
| 299 | return formatModel(model, opts.Format) |
| 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 |
no test coverage detected