diff --git a/.github/workflows/bake.yml b/.github/workflows/bake.yml index edda8d7d..7d97098d 100644 --- a/.github/workflows/bake.yml +++ b/.github/workflows/bake.yml @@ -38,6 +38,10 @@ on: type: string default: '[]' description: Matrix inclusions + max-parallel: + type: number + default: 128 + description: Limit number of concurrent jobs. verbose_env: type: string default: ${{vars.CI_VERBOSE_ENV || false}} @@ -82,6 +86,7 @@ jobs: runs-on: ${{matrix.machine}} strategy: fail-fast: ${{inputs.fail_fast}} + max-parallel: ${{inputs.max-parallel}} matrix: exclude: ${{fromJSON(inputs.excludes)}} include: ${{fromJSON(inputs.includes)}} diff --git a/.github/workflows/deps.yml b/.github/workflows/deps.yml index 7d027685..a397d260 100644 --- a/.github/workflows/deps.yml +++ b/.github/workflows/deps.yml @@ -82,7 +82,7 @@ jobs: needs: [systems] uses: ./.github/workflows/bake.yml with: - bake_targets: '["buildsys"]' + bake_targets: '["rust"]' cargo_profiles: ${{inputs.cargo_profiles}} feat_sets: ${{inputs.feat_sets}} rust_toolchains: ${{inputs.rust_toolchains}} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6734dfba..4f30b2e6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -48,18 +48,19 @@ jobs: set -e cat < ./buildkitd.toml - [system] - platformsCacheMaxAge = "504h" - [worker.oci] - enabled = true - rootless = true - gc = true - [[worker.oci.gcpolicy]] - reservedSpace = "384GB" - maxUsedSpace = "768GB" - keepDuration = "504h" - filters = ["label!=cache==pin"] - all = true + [system] + platformsCacheMaxAge = "504h" + [worker.oci] + enabled = true + rootless = false + gc = true + reservedSpace = "256GB" + maxUsedSpace = "576GB" + [[worker.oci.gcpolicy]] + reservedSpace = "256GB" + maxUsedSpace = "576GB" + filters = ["label!=cache==pin"] + all = true EOF docker buildx create \ diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7ee64cb..a9a9b5fd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -161,7 +161,7 @@ jobs: - name: Extract id: extract env: - name: complement_tester__${{matrix.cargo_profile}}__${{matrix.rust_toolchain}}__${{matrix.rust_target}}__${{matrix.feat_set}}__${{matrix.sys_name}}__${{matrix.sys_version}}__${{matrix.sys_target}} + name: complement_tester__${{matrix.sys_name}}__${{matrix.sys_version}}__${{matrix.sys_target}} tag: latest run: | diff --git a/docker/Dockerfile.cargo.rpm b/docker/Dockerfile.cargo.rpm index 2773fabb..f1db1365 100644 --- a/docker/Dockerfile.cargo.rpm +++ b/docker/Dockerfile.cargo.rpm @@ -2,8 +2,6 @@ FROM input AS rpm ARG sys_target -ARG rust_target -ARG rust_target ARG rust_toolchain ARG RUSTUP_HOME ARG CARGO_HOME diff --git a/docker/Dockerfile.diner b/docker/Dockerfile.diner deleted file mode 100644 index ef700232..00000000 --- a/docker/Dockerfile.diner +++ /dev/null @@ -1,62 +0,0 @@ -# syntax = docker/dockerfile:1.11-labs - -ARG sys_name=debian -ARG sys_version=testing-slim - -FROM ${sys_name}:${sys_version} AS system - - -FROM input AS diner -ARG var_cache -ARG var_lib_apt -ARG packages - -WORKDIR / -COPY --link --from=input . . - -ENV packages="ca-certificates ${packages}" -RUN \ ---mount=type=cache,dst=${var_cache},sharing=locked \ ---mount=type=cache,dst=${var_lib_apt},sharing=locked \ -< /etc/apt/apt.conf.d/keep-downloaded - rm -f /etc/apt/apt.conf.d/docker-clean - - apt-get -y -U install --no-install-recommends ${packages} -EOF - - -FROM input AS valgrind -ARG var_cache -ARG var_lib_apt - -WORKDIR / -COPY --link --from=input . . - -RUN \ ---mount=type=cache,dst=${var_cache},sharing=locked \ ---mount=type=cache,dst=${var_lib_apt},sharing=locked \ -< /etc/apt/apt.conf.d/keep-downloaded + rm -f /etc/apt/apt.conf.d/docker-clean + + apt-get -y -U install --no-install-recommends ${packages} +EOF diff --git a/docker/README.md b/docker/README.md index d8366b06..29d23519 100644 --- a/docker/README.md +++ b/docker/README.md @@ -42,13 +42,31 @@ so please be patient. - To run the complement compliance suite we need the `--allow-insecure-entitlement network.host`. This requirement is probably a defect in Complement. - Finally create + - The default cache policies are usually insufficient and custom values should be used, + though the ones below are probably too much for a single or simple build. + + Finally create: ``` + cat < ./buildkitd.toml + [system] + platformsCacheMaxAge = "504h" + [worker.oci] + enabled = true + gc = true + reservedSpace = "64GB" + maxUsedSpace = "128GB" + [[worker.oci.gcpolicy]] + reservedSpace = "64GB" + maxUsedSpace = "128GB" + all = true + EOF + BKD_FLAGS="--allow-insecure-entitlement netwok.host" docker buildx create \ --name owo \ --bootstrap \ + --buildkitd-config ./buildkitd.toml \ --driver docker-container \ --buildkitd-flags "$BKD_FLAGS" ``` diff --git a/docker/bake.hcl b/docker/bake.hcl index 0c7966d0..1d3d9cc3 100644 --- a/docker/bake.hcl +++ b/docker/bake.hcl @@ -246,19 +246,6 @@ rust_feat_sys = { sys_target = jsondecode(sys_targets) } -feat_sys = { - feat_set = jsondecode(feat_sets) - sys_name = jsondecode(sys_names) - sys_version = jsondecode(sys_versions) - sys_target = jsondecode(sys_targets) -} - -sys = { - sys_name = jsondecode(sys_names) - sys_version = jsondecode(sys_versions) - sys_target = jsondecode(sys_targets) -} - # # Publish # @@ -333,7 +320,7 @@ target "complement-testee-valgrind" { ] contexts = { input = elem("target:smoketest-valgrind", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) - complement-tester = elem("target:complement-tester-valgrind", [feat_set, sys_name, sys_version, sys_target]) + complement-tester = elem("target:complement-tester-valgrind", [sys_name, sys_version, sys_target]) } } @@ -352,8 +339,8 @@ target "complement-testee" { ] contexts = { input = elem("target:install", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) - complement-tester = elem("target:complement-tester", [feat_set, sys_name, sys_version, sys_target]) - complement-config = elem("target:complement-config", [feat_set, sys_name, sys_version, sys_target]) + complement-tester = elem("target:complement-tester", [sys_name, sys_version, sys_target]) + complement-config = elem("target:complement-config", [sys_name, sys_version, sys_target]) } args = { RUST_BACKTRACE = "full" @@ -361,68 +348,68 @@ target "complement-testee" { } target "complement-tester-valgrind" { - name = elem("complement-tester-valgrind", [feat_set, sys_name, sys_version, sys_target]) + name = elem("complement-tester-valgrind", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("complement-tester-valgrind", [feat_set, sys_name, sys_version, sys_target], "latest"), + elem_tag("complement-tester-valgrind", [sys_name, sys_version, sys_target], "latest"), ] target = "complement-tester-valgrind" entitlements = ["network.host"] - matrix = feat_sys + matrix = sys inherits = [ - elem("complement-tester", [feat_set, sys_name, sys_version, sys_target]), + elem("complement-tester", [sys_name, sys_version, sys_target]), ] contexts = { - input = elem("target:complement-tester", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:complement-tester", [sys_name, sys_version, sys_target]) } } target "complement-tester" { - name = elem("complement-tester", [feat_set, sys_name, sys_version, sys_target]) + name = elem("complement-tester", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("complement-tester", [feat_set, sys_name, sys_version, sys_target], "latest"), + elem_tag("complement-tester", [sys_name, sys_version, sys_target], "latest"), ] target = "complement-tester" output = ["type=docker,compression=zstd,mode=min,compression-level=${image_compress_level}"] entitlements = ["network.host"] - matrix = feat_sys + matrix = sys inherits = [ - elem("complement-base", [feat_set, sys_name, sys_version, sys_target]) + elem("complement-base", [sys_name, sys_version, sys_target]), ] contexts = { - input = elem("target:complement-base", [feat_set, sys_name, sys_version, sys_target]) - complement-config = elem("target:complement-config", [feat_set, sys_name, sys_version, sys_target]) + complement-config = elem("target:complement-config", [sys_name, sys_version, sys_target]) + input = elem("target:complement-base", [sys_name, sys_version, sys_target]) } } target "complement-base" { - name = elem("complement-base", [feat_set, sys_name, sys_version, sys_target]) + name = elem("complement-base", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("complement-base", [feat_set, sys_name, sys_version, sys_target], "latest") + elem_tag("complement-base", [sys_name, sys_version, sys_target], "latest") ] target = "complement-base" - matrix = feat_sys + matrix = sys inherits = [ - elem("complement-config", [feat_set, sys_name, sys_version, sys_target]) + elem("complement-config", [sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:base", [sys_name, sys_version, sys_target]) } args = complement_args } target "complement-config" { - name = elem("complement-config", [feat_set, sys_name, sys_version, sys_target]) + name = elem("complement-config", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("complement-config", [feat_set, sys_name, sys_version, sys_target], "latest") + elem_tag("complement-config", [sys_name, sys_version, sys_target], "latest") ] target = "complement-config" dockerfile = "${docker_dir}/Dockerfile.complement" - matrix = feat_sys + matrix = sys inherits = [ - elem("source", [feat_set, sys_name, sys_version, sys_target]) + elem("source", [sys_name, sys_version, sys_target]) ] contexts = { - source = elem("target:source", [feat_set, sys_name, sys_version, sys_target]) + source = elem("target:source", [sys_name, sys_version, sys_target]) } } @@ -545,7 +532,7 @@ target "oci" { tags = [ elem_tag("oci", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), ] - output = ["type=oci,dest=tuwunel-oci.tar.zst,mode=min,compression-level=${image_compress_level}"] + output = ["type=oci,dest=tuwunel-oci.tar.zst,mode=min,compression=zstd,compression-level=${image_compress_level}"] matrix = cargo_rust_feat_sys inherits = [ elem("docker", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), @@ -614,7 +601,7 @@ target "install" { elem("build-bins", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), ] contexts = { - input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:runtime", [feat_set, sys_name, sys_version, sys_target]) bins = elem("target:build-bins", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) #docs = elem("target:docs", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) #book = elem("target:book", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) @@ -701,7 +688,7 @@ target "pkg-deb-install" { elem("pkg-deb", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), ] contexts = { - input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:runtime", [feat_set, sys_name, sys_version, sys_target]) pkg-deb = elem("target:pkg-deb", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), } } @@ -1227,7 +1214,8 @@ target "rocksdb-build" { elem("rocksdb-fetch", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:rocksdb-fetch", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) + rocksdb-fetch = elem("target:rocksdb-fetch", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) + input = elem("target:kitchen", [feat_set, sys_name, sys_version, sys_target]) } args = { rocksdb_zstd = contains(split(",", cargo_feat_sets[feat_set]), "zstd_compression")? 1: 0 @@ -1249,8 +1237,8 @@ target "rocksdb-fetch" { dockerfile = "${docker_dir}/Dockerfile.rocksdb" matrix = rust_feat_sys inherits = [ - elem("recipe", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), elem("kitchen", [feat_set, sys_name, sys_version, sys_target]), + elem("recipe", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), ] contexts = { input = elem("target:kitchen", [feat_set, sys_name, sys_version, sys_target]) @@ -1307,16 +1295,17 @@ target "ingredients" { elem_tag("ingredients", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), ] target = "ingredients" - dockerfile = "${docker_dir}/Dockerfile.ingredients" - cache_to = ["type=local,compression=zstd,mode=min,compression-level=${cache_compress_level}"] + cache_to = ["type=local,compression=zstd,mode=min"] matrix = rust_feat_sys inherits = [ - elem("source", [feat_set, sys_name, sys_version, sys_target]), - elem("chef", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]), + elem("kitchen", [feat_set, sys_name, sys_version, sys_target]), + elem("rust", [rust_toolchain, rust_target, sys_name, sys_version, sys_target]), + elem("source", [sys_name, sys_version, sys_target]), ] contexts = { - input = elem("target:chef", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) - source = elem("target:source", [feat_set, sys_name, sys_version, sys_target]) + rust = elem("target:rust", [rust_toolchain, rust_target, sys_name, sys_version, sys_target]) + input = elem("target:kitchen", [feat_set, sys_name, sys_version, sys_target]) + source = elem("target:source", [sys_name, sys_version, sys_target]) } args = { cargo_features = join(",", [ @@ -1337,18 +1326,18 @@ target "ingredients" { } target "source" { - name = elem("source", [feat_set, sys_name, sys_version, sys_target]) + name = elem("source", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("source", [feat_set, sys_name, sys_version, sys_target], "latest") + elem_tag("source", [sys_name, sys_version, sys_target], "latest") ] target = "source" - dockerfile = "${docker_dir}/Dockerfile.ingredients" - matrix = feat_sys + dockerfile = "${docker_dir}/Dockerfile.source" + matrix = sys inherits = [ - elem("kitchen", [feat_set, sys_name, sys_version, sys_target]) + elem("builder", [sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:kitchen", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:builder", [sys_name, sys_version, sys_target]) } args = { git_checkout = "${git_checkout}" @@ -1360,13 +1349,9 @@ target "source" { # Build Systems # -group "buildsys" { - targets = [ - "kitchen", - "cookware", - "chef", - ] -} +# +# Rust toolchain +# rustup_components = [ "clippy", @@ -1384,49 +1369,63 @@ cargo_installs = [ "typos-cli", ] -# -# Rust build environment -# - -target "chef" { - name = elem("chef", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) - tags = [ - elem_tag("chef", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), - ] - target = "chef" - matrix = rust_feat_sys - inherits = [ - elem("cookware", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) - ] - contexts = { - input = elem("target:cookware", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) - } - args = { - CARGO_TERM_VERBOSE = CARGO_TERM_VERBOSE - rustup_components = join(" ", rustup_components) - cargo_installs = join(" ", cargo_installs) - } +rust_tool_sys = { + rust_toolchain = jsondecode(rust_toolchains) + rust_target = jsondecode(rust_targets) + sys_name = jsondecode(sys_names) + sys_version = jsondecode(sys_versions) + sys_target = jsondecode(sys_targets) } -target "cookware" { - name = elem("cookware", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) +target "rust" { + name = elem("rust", [rust_toolchain, rust_target, sys_name, sys_version, sys_target]) tags = [ - elem_tag("cookware", [rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target], "latest"), + elem_tag("rust", [rust_toolchain, rust_target, sys_name, sys_version, sys_target], "latest"), ] - target = "cookware" - dockerfile = "${docker_dir}/Dockerfile.cookware" - matrix = rust_feat_sys + target = "rust" + matrix = rust_tool_sys inherits = [ - elem("kitchen", [feat_set, sys_name, sys_version, sys_target]) + elem("rustup", [rust_target, sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:kitchen", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:rustup", [rust_target, sys_name, sys_version, sys_target]) } args = { rust_toolchain = rust_toolchain + rustup_components = join(" ", rustup_components) + cargo_installs = join(" ", cargo_installs) + + CARGO_TERM_VERBOSE = CARGO_TERM_VERBOSE + RUSTUP_HOME = "/opt/rust/rustup/${sys_name}" + CARGO_HOME = "/opt/rust/cargo/${sys_name}/${sys_target}" + } +} + +rust_sys = { + rust_target = jsondecode(rust_targets) + sys_name = jsondecode(sys_names) + sys_version = jsondecode(sys_versions) + sys_target = jsondecode(sys_targets) +} + +target "rustup" { + name = elem("rustup", [rust_target, sys_name, sys_version, sys_target]) + tags = [ + elem_tag("rustup", [rust_target, sys_name, sys_version, sys_target], "latest"), + ] + target = "rustup" + dockerfile = "${docker_dir}/Dockerfile.rust" + matrix = rust_sys + inherits = [ + elem("builder", [sys_name, sys_version, sys_target]) + ] + contexts = { + input = elem("target:builder", [sys_name, sys_version, sys_target]) + } + args = { rust_target = rust_target - RUSTUP_HOME = "/opt/rustup/${sys_name}" - CARGO_HOME = "/opt/cargo/${sys_name}/${sys_target}" + CARGO_TARGET = rust_target + RUST_HOME = "/opt/rust" } } @@ -1434,34 +1433,65 @@ target "cookware" { # Base build environment # +feat_sys = { + feat_set = jsondecode(feat_sets) + sys_name = jsondecode(sys_names) + sys_version = jsondecode(sys_versions) + sys_target = jsondecode(sys_targets) +} + +kitchen_packages = [ + "clang", + "cmake", + "curl", + "git", + "libc6-dev", + "libssl-dev", + "make", + "pkg-config", + "pkgconf", + "xz-utils", +] + target "kitchen" { description = "Base build environment; sans Rust" name = elem("kitchen", [feat_set, sys_name, sys_version, sys_target]) tags = [ elem_tag("kitchen", [feat_set, sys_name, sys_version, sys_target], "latest"), ] - target = "kitchen" - dockerfile = "${docker_dir}/Dockerfile.kitchen" matrix = feat_sys inherits = [ - elem("diner", [feat_set, sys_name, sys_version, sys_target]) + elem("builder", [sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:builder", [sys_name, sys_version, sys_target]) } args = { packages = join(" ", [ - contains(split(",", cargo_feat_sets[feat_set]), "io_uring")? - "liburing-dev": "", + contains(split(",", cargo_feat_sets[feat_set]), "io_uring")? "liburing-dev": "", + contains(split(",", cargo_feat_sets[feat_set]), "zstd_compression")? "libzstd-dev": "", + contains(split(",", cargo_feat_sets[feat_set]), "jemalloc")? "libjemalloc-dev": "", + contains(split(",", cargo_feat_sets[feat_set]), "hardened_malloc")? "g++": "", + ]) + } +} - contains(split(",", cargo_feat_sets[feat_set]), "zstd_compression")? - "libzstd-dev": "", - - contains(split(",", cargo_feat_sets[feat_set]), "jemalloc")? - "libjemalloc-dev": "", - - contains(split(",", cargo_feat_sets[feat_set]), "hardened_malloc")? - "g++": "", +target "builder" { + description = "Base build environment; sans Rust" + name = elem("builder", [sys_name, sys_version, sys_target]) + tags = [ + elem_tag("builder", [sys_name, sys_version, sys_target], "latest"), + ] + matrix = sys + inherits = [ + elem("base", [sys_name, sys_version, sys_target]) + ] + contexts = { + input = elem("target:base", [sys_name, sys_version, sys_target]) + } + args = { + packages = join(" ", [ + join(" ", kitchen_packages), ]) } } @@ -1473,57 +1503,54 @@ target "kitchen" { group "systems" { targets = [ - "system", - "diner", + "runtime", "valgrind", "perf", ] } +sys = { + sys_name = jsondecode(sys_names) + sys_version = jsondecode(sys_versions) + sys_target = jsondecode(sys_targets) +} + target "perf" { description = "Base runtime environment with linux-perf installed." - name = elem("perf", [feat_set, sys_name, sys_version, sys_target]) + name = elem("perf", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("perf", [feat_set, sys_name, sys_version, sys_target], "latest"), + elem_tag("perf", [sys_name, sys_version, sys_target], "latest"), ] - target = "perf" - matrix = feat_sys + matrix = sys inherits = [ - elem("diner", [feat_set, sys_name, sys_version, sys_target]) + elem("base", [sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:base", [sys_name, sys_version, sys_target]) } } target "valgrind" { description = "Base runtime environment with valgrind installed." - name = elem("valgrind", [feat_set, sys_name, sys_version, sys_target]) + name = elem("valgrind", [sys_name, sys_version, sys_target]) tags = [ - elem_tag("valgrind", [feat_set, sys_name, sys_version, sys_target], "latest"), + elem_tag("valgrind", [sys_name, sys_version, sys_target], "latest"), ] - target = "valgrind" - matrix = feat_sys + matrix = sys inherits = [ - elem("diner", [feat_set, sys_name, sys_version, sys_target]) + elem("base", [sys_name, sys_version, sys_target]) ] contexts = { - input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) + input = elem("target:base", [sys_name, sys_version, sys_target]) } } -# -# Base Runtime -# - -target "diner" { +target "runtime" { description = "Base runtime environment for executing the application." - name = elem("diner", [feat_set, sys_name, sys_version, sys_target]) + name = elem("runtime", [feat_set, sys_name, sys_version, sys_target]) tags = [ - elem_tag("diner", [feat_set, sys_name, sys_version, sys_target], "latest"), + elem_tag("runtime", [feat_set, sys_name, sys_version, sys_target], "latest"), ] - target = "diner" - dockerfile = "${docker_dir}/Dockerfile.diner" matrix = feat_sys variable "cargo_feat_set" { default = cargo_feat_sets[feat_set] @@ -1531,6 +1558,36 @@ target "diner" { variable "cargo_features" { default = split(",", cargo_feat_set) } + inherits = [ + elem("base", [sys_name, sys_version, sys_target]) + ] + contexts = { + input = elem("target:base", [sys_name, sys_version, sys_target]) + } + args = { + packages = join(" ", [ + contains(split(",", cargo_feat_sets[feat_set]), "io_uring")? "liburing2": "", + contains(split(",", cargo_feat_sets[feat_set]), "zstd_compression")? "libzstd1": "", + contains(split(",", cargo_feat_sets[feat_set]), "jemalloc")? "libjemalloc2": "", + ]) + } +} + +base_pkgs = [ + "adduser", + "bzip2", + "ca-certificates", + "gzip", +] + +target "base" { + description = "Base runtime environment with essential runtime packages" + name = elem("base", [sys_name, sys_version, sys_target]) + tags = [ + elem_tag("base", [sys_name, sys_version, sys_target], "latest"), + ] + target = "runtime" + matrix = sys inherits = [ elem("system", [sys_name, sys_version, sys_target]) ] @@ -1541,14 +1598,7 @@ target "diner" { DEBIAN_FRONTEND="noninteractive" var_lib_apt = "/var/lib/apt" var_cache = "/var/cache" - packages = join(" ", [ - "adduser", - "bzip2", - "gzip", - contains(split(",", cargo_feat_sets[feat_set]), "io_uring")? "liburing2": "", - contains(split(",", cargo_feat_sets[feat_set]), "zstd_compression")? "libzstd1": "", - contains(split(",", cargo_feat_sets[feat_set]), "jemalloc")? "libjemalloc2": "", - ]) + packages = join(" ", base_pkgs) } } @@ -1566,7 +1616,7 @@ target "system" { output = ["type=cacheonly,compression=zstd,mode=min,compression-level=${cache_compress_level}"] cache_to = ["type=local,compression=zstd,mode=min,compression-level=${cache_compress_level}"] cache_from = ["type=local"] - dockerfile = "${docker_dir}/Dockerfile.diner" + dockerfile = "${docker_dir}/Dockerfile.system" matrix = sys context = "." args = { diff --git a/docker/complement.sh b/docker/complement.sh index ce68855d..b7c13942 100755 --- a/docker/complement.sh +++ b/docker/complement.sh @@ -31,9 +31,9 @@ set +a ############################################################################### set -x -tester_image="complement-tester--${feat_set}--${sys_name}--${sys_version}--${sys_target}" +tester_image="complement-tester--${sys_name}--${sys_version}--${sys_target}" testee_image="complement-testee--${cargo_profile}--${rust_toolchain}--${rust_target}--${feat_set}--${sys_name}--${sys_version}--${sys_target}" -name="complement_tester__${cargo_profile}__${rust_toolchain}__${rust_target}__${feat_set}__${sys_name}__${sys_version}__${sys_target}" +name="complement_tester__${sys_name}__${sys_version}__${sys_target}" sock="/var/run/docker.sock" arg="--name $name -v $sock:$sock --network=host $tester_image ${testee_image}" set +x