Skip to content

Commit 5bca44d

Browse files
committed
cmd/sync-containers: update latest and stable tags
Fixes tailscale#7251 Signed-off-by: Denton Gentry <[email protected]>
1 parent fa932fe commit 5bca44d

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

cmd/sync-containers/main.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ func main() {
8585
log.Printf("%d tags to remove: %s\n", len(remove), strings.Join(remove, ", "))
8686
log.Printf("Not removing any tags for safety.\n")
8787
}
88+
89+
var wellKnown = [...]string{"latest", "stable"}
90+
for _, tag := range wellKnown {
91+
if needsUpdate(*src, *dst, tag) {
92+
if err := copyTag(*src, *dst, tag, opts...); err != nil {
93+
log.Printf("Updating tag %q: progress error: %v", tag, err)
94+
}
95+
}
96+
}
8897
}
8998

9099
func copyTag(srcStr, dstStr, tag string, opts ...remote.Option) error {
@@ -178,3 +187,26 @@ func diffTags(src, dst []string) (add, remove []string) {
178187
sort.Strings(remove)
179188
return add, remove
180189
}
190+
191+
func needsUpdate(srcStr, dstStr, tag string) bool {
192+
src, err := name.ParseReference(fmt.Sprintf("%s:%s", srcStr, tag))
193+
if err != nil {
194+
return false
195+
}
196+
dst, err := name.ParseReference(fmt.Sprintf("%s:%s", dstStr, tag))
197+
if err != nil {
198+
return false
199+
}
200+
201+
srcDesc, err := remote.Get(src)
202+
if err != nil {
203+
return false
204+
}
205+
206+
dstDesc, err := remote.Get(dst)
207+
if err != nil {
208+
return true
209+
}
210+
211+
return srcDesc.Digest != dstDesc.Digest
212+
}

0 commit comments

Comments
 (0)