summaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorDenton Gentry <dgentry@tailscale.com>2023-02-10 20:09:27 -0800
committerDenton Gentry <denny@geekhold.com>2023-02-10 20:47:18 -0800
commit5bca44d572dfd886702eedd08845459e6def079c (patch)
treef9777c0584d15465db6ac99a498a6637d9a54191 /cmd
parentfa932fefe7ba1c826231171418bf1b6de9884649 (diff)
downloadtailscale-5bca44d572dfd886702eedd08845459e6def079c.tar.xz
tailscale-5bca44d572dfd886702eedd08845459e6def079c.zip
cmd/sync-containers: update latest and stable tags
Fixes https://github.com/tailscale/tailscale/issues/7251 Signed-off-by: Denton Gentry <dgentry@tailscale.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/sync-containers/main.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/cmd/sync-containers/main.go b/cmd/sync-containers/main.go
index f58d8e0ea..94864ff27 100644
--- a/cmd/sync-containers/main.go
+++ b/cmd/sync-containers/main.go
@@ -85,6 +85,15 @@ func main() {
log.Printf("%d tags to remove: %s\n", len(remove), strings.Join(remove, ", "))
log.Printf("Not removing any tags for safety.\n")
}
+
+ var wellKnown = [...]string{"latest", "stable"}
+ for _, tag := range wellKnown {
+ if needsUpdate(*src, *dst, tag) {
+ if err := copyTag(*src, *dst, tag, opts...); err != nil {
+ log.Printf("Updating tag %q: progress error: %v", tag, err)
+ }
+ }
+ }
}
func copyTag(srcStr, dstStr, tag string, opts ...remote.Option) error {
@@ -178,3 +187,26 @@ func diffTags(src, dst []string) (add, remove []string) {
sort.Strings(remove)
return add, remove
}
+
+func needsUpdate(srcStr, dstStr, tag string) bool {
+ src, err := name.ParseReference(fmt.Sprintf("%s:%s", srcStr, tag))
+ if err != nil {
+ return false
+ }
+ dst, err := name.ParseReference(fmt.Sprintf("%s:%s", dstStr, tag))
+ if err != nil {
+ return false
+ }
+
+ srcDesc, err := remote.Get(src)
+ if err != nil {
+ return false
+ }
+
+ dstDesc, err := remote.Get(dst)
+ if err != nil {
+ return true
+ }
+
+ return srcDesc.Digest != dstDesc.Digest
+}