From d4599f3752852a83fa623395ac3de65a5290a44f Mon Sep 17 00:00:00 2001 From: xZero707 Date: Tue, 11 Apr 2023 12:18:35 +0200 Subject: [PATCH] Update to a new template with improved caching --- .github/workflows/image.yml | 5 +- build/docker-bake.hcl | 258 ++++++++++++++++++++++-------------- 2 files changed, 160 insertions(+), 103 deletions(-) diff --git a/.github/workflows/image.yml b/.github/workflows/image.yml index 4633151..55f3a84 100644 --- a/.github/workflows/image.yml +++ b/.github/workflows/image.yml @@ -32,7 +32,4 @@ jobs: uses: docker/bake-action@v2.3.0 with: files: build/docker-bake.hcl - push: true - set: | - *.cache-from=type=gha - *.cache-to=type=gha,mode=max \ No newline at end of file + push: true \ No newline at end of file diff --git a/build/docker-bake.hcl b/build/docker-bake.hcl index 0d11fee..33ee039 100644 --- a/build/docker-bake.hcl +++ b/build/docker-bake.hcl @@ -18,158 +18,218 @@ target "build-common" { pull = true } -target "2_1_0_2" { - inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:2.1.0.2", "docker.io/nlss/s6-rootfs:2.1"] - args = { - S6_OVERLAY_VERSION = "2.1.0.2" +variable "REGISTRY_CACHE" { + default = "docker.io/nlss/s6-rootfs-cache" +} + +###################### +# Define the functions +###################### + +# Get the arguments for the build +function "get-args" { + params = [version] + result = { + S6_OVERLAY_VERSION = version } } +# Get the arguments for the build +function "get-args-with-pak-ext" { + params = [version, pak_ext] + result = { + S6_OVERLAY_VERSION = version + S6_OVERLAY_PAK_EXT = pak_ext + } +} + +# Get the cache-from configuration +function "get-cache-from" { + params = [version] + result = [ + "type=gha,scope=${version}_${BAKE_LOCAL_PLATFORM}", + "type=registry,ref=${REGISTRY_CACHE}:${sha1("${version}-${BAKE_LOCAL_PLATFORM}")}" + ] +} + +# Get the cache-to configuration +function "get-cache-to" { + params = [version] + result = [ + "type=gha,mode=max,scope=${version}_${BAKE_LOCAL_PLATFORM}", + "type=registry,mode=max,ref=${REGISTRY_CACHE}:${sha1("${version}-${BAKE_LOCAL_PLATFORM}")}" + ] +} + +# Get list of image tags and registries +# Takes a version and a list of extra versions to tag +# eg. get-tags("3.1.4.1", ["3.1", "latest"]) +function "get-tags" { + params = [version, extra_versions] + result = concat( + [ + "docker.io/nlss/s6-rootfs:${version}" + ], + flatten([ + for extra_version in extra_versions : [ + "docker.io/nlss/s6-rootfs:${extra_version}" + ] + ]) + ) +} + +########################## +# Define the build targets +########################## + +target "2_1_0_2" { + inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] + cache-from = get-cache-from("2.1.0.2") + cache-to = get-cache-to("2.1.0.2") + tags = get-tags("2.1.0.2", ["2.1"]) + args = get-args("2.1.0.2") +} + target "2_2_0_0" { - inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:2.2.0.0"] - args = { - S6_OVERLAY_VERSION = "2.2.0.0" - } + inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] + cache-from = get-cache-from("2.2.0.0") + cache-to = get-cache-to("2.2.0.0") + tags = get-tags("2.2.0.0", []) + args = get-args("2.2.0.0") } target "2_2_0_1" { - inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:2.2.0.1"] - args = { - S6_OVERLAY_VERSION = "2.2.0.1" - } + inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] + cache-from = get-cache-from("2.2.0.1") + cache-to = get-cache-to("2.2.0.1") + tags = get-tags("2.2.0.1", []) + args = get-args("2.2.0.1") } target "2_2_0_2" { - inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:2.2.0.2"] - args = { - S6_OVERLAY_VERSION = "2.2.0.2" - } + inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] + cache-from = get-cache-from("2.2.0.2") + cache-to = get-cache-to("2.2.0.2") + tags = get-tags("2.2.0.2", []) + args = get-args("2.2.0.2") } target "2_2_0_3" { - inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:2.2.0.3", "docker.io/nlss/s6-rootfs:2.2"] - args = { - S6_OVERLAY_VERSION = "2.2.0.3" - } + inherits = ["build-dockerfile-legacy", "build-platforms", "build-common"] + cache-from = get-cache-from("2.2.0.3") + cache-to = get-cache-to("2.2.0.3") + tags = get-tags("2.2.0.3", ["2.2"]) + args = get-args("2.2.0.3") } target "3_0_0_0" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.0.0.0", "docker.io/nlss/s6-rootfs:3.0.0.0-1"] - args = { - S6_OVERLAY_VERSION = "3.0.0.0-1" - S6_OVERLAY_PAK_EXT = "-3.0.0.0-1.tar.xz" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.0.0.0-1") + cache-to = get-cache-to("3.0.0.0-1") + tags = get-tags("3.0.0.0", ["3.0.0.0-1"]) + args = get-args-with-pak-ext("3.0.0.0-1", "-3.0.0.0-1.tar.xz") } target "3_0_0_1" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.0.0.1"] - args = { - S6_OVERLAY_VERSION = "3.0.0.1" - S6_OVERLAY_PAK_EXT = "-3.0.0.1.tar.xz" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.0.0.1") + cache-to = get-cache-to("3.0.0.1") + tags = get-tags("3.0.0.1", []) + args = get-args-with-pak-ext("3.0.0.1", "-3.0.0.1.tar.xz") } target "3_0_0_2" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.0.0.2"] - args = { - S6_OVERLAY_VERSION = "3.0.0.2" - S6_OVERLAY_PAK_EXT = "-3.0.0.2.tar.xz" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.0.0.2") + cache-to = get-cache-to("3.0.0.2") + tags = get-tags("3.0.0.2", []) + args = get-args-with-pak-ext("3.0.0.2", "-3.0.0.2.tar.xz") } target "3_0_0_2-2" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.0.0.2-2", "docker.io/nlss/s6-rootfs:3.0"] - args = { - S6_OVERLAY_VERSION = "3.0.0.2-2" - S6_OVERLAY_PAK_EXT = "-3.0.0.2-2.tar.xz" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.0.0.2-2") + cache-to = get-cache-to("3.0.0.2-2") + tags = get-tags("3.0.0.2-2", ["3.0"]) + args = get-args-with-pak-ext("3.0.0.2-2", "-3.0.0.2-2.tar.xz") } target "3_1_0_0" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.0.0"] - args = { - S6_OVERLAY_VERSION = "3.1.0.0" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.0.0") + cache-to = get-cache-to("3.1.0.0") + tags = get-tags("3.1.0.0", []) + args = get-args("3.1.0.0") } target "3_1_0_1" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.0.1"] - args = { - S6_OVERLAY_VERSION = "3.1.0.1" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.0.1") + cache-to = get-cache-to("3.1.0.1") + tags = get-tags("3.1.0.1", ["3.1.0"]) + args = get-args("3.1.0.1") } target "3_1_1_0" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.1.0"] - args = { - S6_OVERLAY_VERSION = "3.1.1.0" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.1.0") + cache-to = get-cache-to("3.1.1.0") + tags = get-tags("3.1.1.0", []) + args = get-args("3.1.1.0") } target "3_1_1_1" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.1.1"] - args = { - S6_OVERLAY_VERSION = "3.1.1.1" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.1.1") + cache-to = get-cache-to("3.1.1.1") + tags = get-tags("3.1.1.1", []) + args = get-args("3.1.1.1") } target "3_1_1_2" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.1.2"] - args = { - S6_OVERLAY_VERSION = "3.1.1.2" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.1.2") + cache-to = get-cache-to("3.1.1.2") + tags = get-tags("3.1.1.2", ["3.1", "3.1.1"]) + args = get-args("3.1.1.2") } target "3_1_2_0" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.2.0"] - args = { - S6_OVERLAY_VERSION = "3.1.2.0" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.2.0") + cache-to = get-cache-to("3.1.2.0") + tags = get-tags("3.1.2.0", []) + args = get-args("3.1.2.0") } target "3_1_2_1" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.2.1"] - args = { - S6_OVERLAY_VERSION = "3.1.2.1" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.2.1") + cache-to = get-cache-to("3.1.2.1") + tags = get-tags("3.1.2.1", ["3.1.2"]) + args = get-args("3.1.2.1") } target "3_1_3_0" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.3.0"] - args = { - S6_OVERLAY_VERSION = "3.1.3.0" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.3.0") + cache-to = get-cache-to("3.1.3.0") + tags = get-tags("3.1.3.0", ["3.1.3"]) + args = get-args("3.1.3.0") } target "3_1_4_0" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.4.0"] - args = { - S6_OVERLAY_VERSION = "3.1.4.0" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.4.0") + cache-to = get-cache-to("3.1.4.0") + tags = get-tags("3.1.4.0", []) + args = get-args("3.1.4.0") } target "3_1_4_1" { - inherits = ["build-dockerfile", "build-platforms", "build-common"] - tags = ["docker.io/nlss/s6-rootfs:3.1.4.1", "docker.io/nlss/s6-rootfs:3.1", "docker.io/nlss/s6-rootfs:latest"] - args = { - S6_OVERLAY_VERSION = "3.1.4.1" - } + inherits = ["build-dockerfile", "build-platforms", "build-common"] + cache-from = get-cache-from("3.1.4.1") + cache-to = get-cache-to("3.1.4.1") + tags = get-tags("3.1.4.1", ["3.1", "3.1.4", "latest"]) + args = get-args("3.1.4.1") } \ No newline at end of file