@@ -51,10 +51,10 @@ func (di *demandedImages) delete(key string) {
5151}
5252
5353func OneImage (cfg Config , storeController storage.StoreController ,
54- repo , tag string , isArtifact bool , log log.Logger ,
54+ repo , reference string , isArtifact bool , log log.Logger ,
5555) error {
5656 // guard against multiple parallel requests
57- demandedImage := fmt .Sprintf ("%s:%s" , repo , tag )
57+ demandedImage := fmt .Sprintf ("%s:%s" , repo , reference )
5858 // loadOrStore image-based channel
5959 imageChannel , found := demandedImgs .loadOrStoreChan (demandedImage , make (chan error ))
6060 // if value found wait on channel receive or close
@@ -73,7 +73,7 @@ func OneImage(cfg Config, storeController storage.StoreController,
7373 defer demandedImgs .delete (demandedImage )
7474 defer close (imageChannel )
7575
76- go syncOneImage (imageChannel , cfg , storeController , repo , tag , isArtifact , log )
76+ go syncOneImage (imageChannel , cfg , storeController , repo , reference , isArtifact , log )
7777
7878 err , ok := <- imageChannel
7979 if ! ok {
@@ -84,7 +84,7 @@ func OneImage(cfg Config, storeController storage.StoreController,
8484}
8585
8686func syncOneImage (imageChannel chan error , cfg Config , storeController storage.StoreController ,
87- localRepo , tag string , isArtifact bool , log log.Logger ,
87+ localRepo , reference string , isArtifact bool , log log.Logger ,
8888) {
8989 var credentialsFile CredentialsFile
9090
@@ -161,21 +161,21 @@ func syncOneImage(imageChannel chan error, cfg Config, storeController storage.S
161161 options := getCopyOptions (upstreamCtx , localCtx )
162162
163163 // demanded 'image' is a signature
164- if isCosignTag (tag ) {
164+ if isCosignTag (reference ) {
165165 // at tis point we should already have images synced, but not their signatures.
166166 // is cosign signature
167- cosignManifest , err := sig .getCosignManifest (upstreamRepo , tag )
167+ cosignManifest , err := sig .getCosignManifest (upstreamRepo , reference )
168168 if err != nil {
169169 log .Error ().Str ("errorType" , TypeOf (err )).
170- Err (err ).Msgf ("couldn't get upstream image %s:%s:%s cosign manifest" , upstreamURL , upstreamRepo , tag )
170+ Err (err ).Msgf ("couldn't get upstream image %s:%s:%s cosign manifest" , upstreamURL , upstreamRepo , reference )
171171
172172 continue
173173 }
174174
175- err = sig .syncCosignSignature (localRepo , upstreamRepo , tag , cosignManifest )
175+ err = sig .syncCosignSignature (localRepo , upstreamRepo , reference , cosignManifest )
176176 if err != nil {
177177 log .Error ().Str ("errorType" , TypeOf (err )).
178- Err (err ).Msgf ("couldn't copy upstream image cosign signature %s/%s:%s" , upstreamURL , upstreamRepo , tag )
178+ Err (err ).Msgf ("couldn't copy upstream image cosign signature %s/%s:%s" , upstreamURL , upstreamRepo , reference )
179179
180180 continue
181181 }
@@ -185,18 +185,18 @@ func syncOneImage(imageChannel chan error, cfg Config, storeController storage.S
185185 return
186186 } else if isArtifact {
187187 // is notary signature
188- refs , err := sig .getNotaryRefs (upstreamRepo , tag )
188+ refs , err := sig .getNotaryRefs (upstreamRepo , reference )
189189 if err != nil {
190190 log .Error ().Str ("errorType" , TypeOf (err )).
191- Err (err ).Msgf ("couldn't get upstream image %s/%s:%s notary references" , upstreamURL , upstreamRepo , tag )
191+ Err (err ).Msgf ("couldn't get upstream image %s/%s:%s notary references" , upstreamURL , upstreamRepo , reference )
192192
193193 continue
194194 }
195195
196- err = sig .syncNotarySignature (localRepo , upstreamRepo , tag , refs )
196+ err = sig .syncNotarySignature (localRepo , upstreamRepo , reference , refs )
197197 if err != nil {
198198 log .Error ().Str ("errorType" , TypeOf (err )).
199- Err (err ).Msgf ("couldn't copy image signature %s/%s:%s" , upstreamURL , upstreamRepo , tag )
199+ Err (err ).Msgf ("couldn't copy image signature %s/%s:%s" , upstreamURL , upstreamRepo , reference )
200200
201201 continue
202202 }
@@ -214,13 +214,13 @@ func syncOneImage(imageChannel chan error, cfg Config, storeController storage.S
214214 copyOptions : options ,
215215 }
216216
217- skipped , copyErr := syncRun (regCfg , localRepo , upstreamRepo , tag , syncContextUtils , sig , log )
217+ skipped , copyErr := syncRun (regCfg , localRepo , upstreamRepo , reference , syncContextUtils , sig , log )
218218 if skipped {
219219 continue
220220 }
221221
222222 // key used to check if we already have a go routine syncing this image
223- demandedImageRef := fmt .Sprintf ("%s/%s:%s" , upstreamAddr , upstreamRepo , tag )
223+ demandedImageRef := fmt .Sprintf ("%s/%s:%s" , upstreamAddr , upstreamRepo , reference )
224224
225225 if copyErr != nil {
226226 // don't retry in background if maxretry is 0
@@ -249,14 +249,18 @@ func syncOneImage(imageChannel chan error, cfg Config, storeController storage.S
249249 time .Sleep (retryOptions .Delay )
250250
251251 if err = retry .RetryIfNecessary (context .Background (), func () error {
252- _ , err := syncRun (regCfg , localRepo , upstreamRepo , tag , syncContextUtils , sig , log )
252+ _ , err := syncRun (regCfg , localRepo , upstreamRepo , reference , syncContextUtils , sig , log )
253253
254254 return err
255255 }, retryOptions ); err != nil {
256256 log .Error ().Str ("errorType" , TypeOf (err )).
257257 Err (err ).Msgf ("sync routine: error while copying image %s" , demandedImageRef )
258258 }
259259 }()
260+ } else {
261+ imageChannel <- nil
262+
263+ return
260264 }
261265 }
262266 }
@@ -265,24 +269,28 @@ func syncOneImage(imageChannel chan error, cfg Config, storeController storage.S
265269}
266270
267271func syncRun (regCfg RegistryConfig ,
268- localRepo , upstreamRepo , tag string , utils syncContextUtils , sig * signaturesCopier ,
272+ localRepo , upstreamRepo , reference string , utils syncContextUtils , sig * signaturesCopier ,
269273 log log.Logger ,
270274) (bool , error ) {
271- upstreamImageRef , err := getImageRef (utils .upstreamAddr , upstreamRepo , tag )
275+ upstreamImageDigest , refIsDigest := parseDigest (reference )
276+
277+ upstreamImageRef , err := getImageRef (utils .upstreamAddr , upstreamRepo , reference )
272278 if err != nil {
273279 log .Error ().Str ("errorType" , TypeOf (err )).
274280 Err (err ).Msgf ("error creating docker reference for repository %s/%s:%s" ,
275- utils .upstreamAddr , upstreamRepo , tag )
281+ utils .upstreamAddr , upstreamRepo , reference )
276282
277283 return false , err
278284 }
279285
280- upstreamImageDigest , err := docker .GetDigest (context .Background (), utils .upstreamCtx , upstreamImageRef )
281- if err != nil {
282- log .Error ().Str ("errorType" , TypeOf (err )).
283- Err (err ).Msgf ("couldn't get upstream image %s manifest" , upstreamImageRef .DockerReference ())
286+ if ! refIsDigest {
287+ upstreamImageDigest , err = docker .GetDigest (context .Background (), utils .upstreamCtx , upstreamImageRef )
288+ if err != nil {
289+ log .Error ().Str ("errorType" , TypeOf (err )).
290+ Err (err ).Msgf ("couldn't get upstream image %s manifest" , upstreamImageRef .DockerReference ())
284291
285- return false , err
292+ return false , err
293+ }
286294 }
287295
288296 // get upstream signatures
@@ -316,11 +324,11 @@ func syncRun(regCfg RegistryConfig,
316324 log .Error ().Err (err ).Msgf ("couldn't get localCachePath for %s" , localRepo )
317325 }
318326
319- localImageRef , err := getLocalImageRef (localCachePath , localRepo , tag )
327+ localImageRef , err := getLocalImageRef (localCachePath , localRepo , reference )
320328 if err != nil {
321329 log .Error ().Str ("errorType" , TypeOf (err )).
322330 Err (err ).Msgf ("couldn't obtain a valid image reference for reference %s/%s:%s" ,
323- localCachePath , localRepo , tag )
331+ localCachePath , localRepo , reference )
324332
325333 return false , err
326334 }
@@ -338,32 +346,32 @@ func syncRun(regCfg RegistryConfig,
338346 return false , err
339347 }
340348
341- err = pushSyncedLocalImage (localRepo , tag , localCachePath , imageStore , log )
349+ err = pushSyncedLocalImage (localRepo , reference , localCachePath , imageStore , log )
342350 if err != nil {
343351 log .Error ().Str ("errorType" , TypeOf (err )).
344352 Err (err ).Msgf ("error while pushing synced cached image %s" ,
345- fmt .Sprintf ("%s/%s:%s" , localCachePath , localRepo , tag ))
353+ fmt .Sprintf ("%s/%s:%s" , localCachePath , localRepo , reference ))
346354
347355 return false , err
348356 }
349357
350358 err = sig .syncCosignSignature (localRepo , upstreamRepo , upstreamImageDigest .String (), cosignManifest )
351359 if err != nil {
352360 log .Error ().Str ("errorType" , TypeOf (err )).
353- Err (err ).Msgf ("couldn't copy image cosign signature %s/%s:%s" , utils .upstreamAddr , upstreamRepo , tag )
361+ Err (err ).Msgf ("couldn't copy image cosign signature %s/%s:%s" , utils .upstreamAddr , upstreamRepo , reference )
354362
355363 return false , err
356364 }
357365
358366 err = sig .syncNotarySignature (localRepo , upstreamRepo , upstreamImageDigest .String (), refs )
359367 if err != nil {
360368 log .Error ().Str ("errorType" , TypeOf (err )).
361- Err (err ).Msgf ("couldn't copy image notary signature %s/%s:%s" , utils .upstreamAddr , upstreamRepo , tag )
369+ Err (err ).Msgf ("couldn't copy image notary signature %s/%s:%s" , utils .upstreamAddr , upstreamRepo , reference )
362370
363371 return false , err
364372 }
365373
366- log .Info ().Msgf ("successfully synced %s/%s:%s" , utils .upstreamAddr , upstreamRepo , tag )
374+ log .Info ().Msgf ("successfully synced %s/%s:%s" , utils .upstreamAddr , upstreamRepo , reference )
367375
368376 return false , nil
369377}
0 commit comments