| 215 | } |
| 216 | |
| 217 | func (f *Fetcher) fetchLayoutImage(name string, options LayoutOption) (imgutil.Image, error) { |
| 218 | var ( |
| 219 | image imgutil.Image |
| 220 | err error |
| 221 | ) |
| 222 | |
| 223 | v1Image, err := remote.NewV1Image(name, f.keychain) |
| 224 | if err != nil { |
| 225 | return nil, err |
| 226 | } |
| 227 | |
| 228 | if options.Sparse { |
| 229 | image, err = sparse.NewImage(options.Path, v1Image) |
| 230 | } else { |
| 231 | image, err = layout.NewImage(options.Path, layout.FromBaseImageInstance(v1Image)) |
| 232 | } |
| 233 | |
| 234 | if err != nil { |
| 235 | return nil, err |
| 236 | } |
| 237 | |
| 238 | err = image.Save() |
| 239 | if err != nil { |
| 240 | return nil, err |
| 241 | } |
| 242 | |
| 243 | return image, nil |
| 244 | } |
| 245 | |
| 246 | // FetchForPlatform fetches an image and resolves it to a platform-specific digest before fetching. |
| 247 | // This ensures that multi-platform images are always resolved to the correct platform-specific manifest. |