( ctx context.Context, ref string, opts ResolveImageConfigOpts, )
| 153 | } |
| 154 | |
| 155 | func (r *Resolver) ResolveImageConfig( |
| 156 | ctx context.Context, |
| 157 | ref string, |
| 158 | opts ResolveImageConfigOpts, |
| 159 | ) (_ string, _ digest.Digest, _ []byte, rerr error) { |
| 160 | span, ctx := tracing.StartSpan(ctx, "resolving "+ref, telemetry.Encapsulated()) |
| 161 | defer func() { |
| 162 | tracing.FinishWithError(span, rerr) |
| 163 | }() |
| 164 | |
| 165 | key := ref |
| 166 | if opts.Platform != nil { |
| 167 | key += platforms.Format(platforms.Normalize(*opts.Platform)) |
| 168 | } |
| 169 | key += fmt.Sprintf(":%d", opts.ResolveMode) |
| 170 | |
| 171 | resolve := func(ctx context.Context) (*resolveImageConfigResult, error) { |
| 172 | if opts.ResolveMode == ResolveModeDefault { |
| 173 | if resolvedRef, dgst, configBytes, found, err := r.tryLocalCanonicalConfig(ctx, ref, opts); err != nil { |
| 174 | return nil, err |
| 175 | } else if found { |
| 176 | return &resolveImageConfigResult{ |
| 177 | ref: resolvedRef, |
| 178 | digest: dgst, |
| 179 | config: configBytes, |
| 180 | }, nil |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | resolvedRef, rootDesc, resolver, err := r.resolveRemoteRootDescriptor(ctx, ref, opts.Network) |
| 185 | if err != nil { |
| 186 | return nil, err |
| 187 | } |
| 188 | fetcher, err := resolver.Fetcher(ctx, resolvedRef) |
| 189 | if err != nil { |
| 190 | return nil, err |
| 191 | } |
| 192 | |
| 193 | platformMatcher := imageConfigPlatformMatcher(opts.Platform) |
| 194 | if opts.ResolveMode == ResolveModeDefault { |
| 195 | metadata, err := r.ensureImageConfigMetadata(ctx, resolvedRef, rootDesc, fetcher, platformMatcher, false) |
| 196 | if err != nil { |
| 197 | return nil, err |
| 198 | } |
| 199 | return &resolveImageConfigResult{ |
| 200 | ref: resolvedRef, |
| 201 | digest: rootDesc.Digest, |
| 202 | config: metadata.configBytes, |
| 203 | }, nil |
| 204 | } |
| 205 | |
| 206 | provider := contentutil.FromFetcher(fetcher) |
| 207 | configDesc, err := images.Config(ctx, provider, rootDesc, platformMatcher) |
| 208 | if err != nil { |
| 209 | return nil, err |
| 210 | } |
| 211 | configBytes, err := content.ReadBlob(ctx, provider, configDesc) |
| 212 | if err != nil { |
nothing calls this directly
no test coverage detected