From af9e17ec8f1219641b9c0ccf28522e51f0d6df88 Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Fri, 9 Feb 2024 22:47:16 +0100
Subject: [PATCH] build: fix docker build cache (#27209)

---
 tools/docker/bake.hcl | 73 ++++++++++++++++---------------------------
 1 file changed, 27 insertions(+), 46 deletions(-)

diff --git a/tools/docker/bake.hcl b/tools/docker/bake.hcl
index e3ad02235e..8a93f1924e 100644
--- a/tools/docker/bake.hcl
+++ b/tools/docker/bake.hcl
@@ -5,7 +5,7 @@ variable "FILE" {
   default = "renovate"
 }
 variable "RENOVATE_VERSION" {
-  default = "unknown"
+  default = ""
 }
 variable "RENOVATE_MAJOR_VERSION" {
   default = ""
@@ -43,15 +43,6 @@ group "push" {
   targets = [
     "push-slim",
     "push-full",
-    "push-cache-slim",
-    "push-cache-full",
-  ]
-}
-
-group "push-cache" {
-  targets = [
-    "push-cache-slim",
-    "push-cache-full",
   ]
 }
 
@@ -67,25 +58,31 @@ target "settings" {
 
 target "slim" {
   cache-from = [
+    "type=registry,ref=ghcr.io/${OWNER}/${FILE}",
     "type=registry,ref=ghcr.io/${OWNER}/docker-build-cache:${FILE}",
   ]
   tags = [
     "ghcr.io/${OWNER}/${FILE}",
-    "ghcr.io/${OWNER}/${FILE}:${RENOVATE_VERSION}",
     "${FILE}/${FILE}",
-    "${FILE}/${FILE}:${RENOVATE_VERSION}",
+
+    // GitHub versioned tags
+    notequal("", RENOVATE_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_VERSION}": "",
     notequal("", RENOVATE_MAJOR_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_MAJOR_VERSION}": "",
     notequal("", RENOVATE_MAJOR_MINOR_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_MAJOR_MINOR_VERSION}": "",
+
+    // Docker Hub versioned tags
+    notequal("", RENOVATE_VERSION) ? "${FILE}/${FILE}:${RENOVATE_VERSION}": "",
     notequal("", RENOVATE_MAJOR_VERSION) ? "${FILE}/${FILE}:${RENOVATE_MAJOR_VERSION}": "",
     notequal("", RENOVATE_MAJOR_MINOR_VERSION) ? "${FILE}/${FILE}:${RENOVATE_MAJOR_MINOR_VERSION}": "",
 
-    // TODO: legacy, remove on next major
-    "ghcr.io/${OWNER}/${FILE}-slim",
-    "ghcr.io/${OWNER}/${FILE}:${RENOVATE_VERSION}-slim",
+    // legacy slim tags
+    // TODO: remove on next major
+    "ghcr.io/${OWNER}/${FILE}:slim",
     "${FILE}/${FILE}:slim",
-    "${FILE}/${FILE}:${RENOVATE_VERSION}-slim",
+    notequal("", RENOVATE_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_VERSION}-slim": "",
     notequal("", RENOVATE_MAJOR_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_MAJOR_VERSION}-slim": "",
     notequal("", RENOVATE_MAJOR_MINOR_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_MAJOR_MINOR_VERSION}-slim": "",
+    notequal("", RENOVATE_VERSION) ? "${FILE}/${FILE}:${RENOVATE_VERSION}-slim": "",
     notequal("", RENOVATE_MAJOR_VERSION) ? "${FILE}/${FILE}:${RENOVATE_MAJOR_VERSION}-slim": "",
     notequal("", RENOVATE_MAJOR_MINOR_VERSION) ? "${FILE}/${FILE}:${RENOVATE_MAJOR_MINOR_VERSION}-slim": "",
   ]
@@ -96,47 +93,25 @@ target "full" {
     BASE_IMAGE_TYPE = "full"
   }
   cache-from = [
+    "type=registry,ref=ghcr.io/${OWNER}/${FILE}:full",
     "type=registry,ref=ghcr.io/${OWNER}/docker-build-cache:${FILE}-full",
   ]
-   tags = [
-    "ghcr.io/${OWNER}/${FILE}:${RENOVATE_VERSION}-full",
+  tags = [
     "ghcr.io/${OWNER}/${FILE}:full",
     "${FILE}/${FILE}:full",
-    "${FILE}/${FILE}:${RENOVATE_VERSION}-full",
+
+    // GitHub versioned tags
+    notequal("", RENOVATE_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_VERSION}-full": "",
     notequal("", RENOVATE_MAJOR_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_MAJOR_VERSION}-full": "",
     notequal("", RENOVATE_MAJOR_MINOR_VERSION) ? "ghcr.io/${OWNER}/${FILE}:${RENOVATE_MAJOR_MINOR_VERSION}-full": "",
+
+    // Docker Hub versioned tags
+    notequal("", RENOVATE_VERSION) ? "${FILE}/${FILE}:${RENOVATE_VERSION}-full": "",
     notequal("", RENOVATE_MAJOR_VERSION) ? "${FILE}/${FILE}:${RENOVATE_MAJOR_VERSION}-full": "",
     notequal("", RENOVATE_MAJOR_MINOR_VERSION) ? "${FILE}/${FILE}:${RENOVATE_MAJOR_MINOR_VERSION}-full": "",
   ]
 }
 
-target "cache" {
-  output   = ["type=registry"]
-  cache-to = ["type=inline,mode=max"]
-}
-
-target "push-cache-slim" {
-  inherits = [
-    "settings",
-    "cache",
-    "slim",
-  ]
-  tags = [
-    "ghcr.io/${OWNER}/docker-build-cache:${FILE}",
-  ]
-}
-
-target "push-cache-full" {
-  inherits = [
-    "settings",
-    "cache",
-    "full",
-  ]
-  tags = [
-    "ghcr.io/${OWNER}/docker-build-cache:${FILE}-full",
-  ]
-}
-
 target "build-slim" {
   inherits = ["settings", "slim"]
 }
@@ -148,9 +123,15 @@ target "build-full" {
 target "push-slim" {
   inherits = ["settings", "slim"]
   output   = ["type=registry"]
+  cache-to = [
+    "type=registry,ref=ghcr.io/${OWNER}/docker-build-cache:${FILE}-full,mode=max,image-manifest=true,ignore-error=true",
+  ]
 }
 
 target "push-full" {
   inherits = ["settings", "full"]
   output   = ["type=registry"]
+  cache-to = [
+    "type=registry,ref=ghcr.io/${OWNER}/docker-build-cache:${FILE}-full,mode=max,image-manifest=true,ignore-error=true",
+  ]
 }
-- 
GitLab