From 336667238ec0b67410aa0246305db1dba6b3051e Mon Sep 17 00:00:00 2001 From: Pietro Abate Date: Wed, 26 Nov 2025 10:35:49 +0100 Subject: [PATCH] ci:add static versions for base images --- .gitlab/ci/pipelines/base_images.daily.yml | 7 ++++ .gitlab/ci/pipelines/base_images.yml | 7 ++++ ci/lib_tezos_ci/tezos_ci.ml | 43 ++++++++++++++-------- ci/lib_tezos_ci/tezos_ci.mli | 12 ++++++ ci/lib_tezos_ci_jobs/base_images.ml | 13 ++++++- scripts/ci/build-base-images.sh | 3 +- 6 files changed, 68 insertions(+), 17 deletions(-) diff --git a/.gitlab/ci/pipelines/base_images.daily.yml b/.gitlab/ci/pipelines/base_images.daily.yml index f41fa99fe603..f4f3bbf1bd7c 100644 --- a/.gitlab/ci/pipelines/base_images.daily.yml +++ b/.gitlab/ci/pipelines/base_images.daily.yml @@ -58,6 +58,7 @@ oc.base-images.debian: DISTRIBUTION: debian IMAGE_PATH: debian PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -96,6 +97,7 @@ oc.base-images.ubuntu: DISTRIBUTION: ubuntu IMAGE_PATH: ubuntu PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -134,6 +136,7 @@ oc.base-images.fedora: DISTRIBUTION: fedora IMAGE_PATH: fedora PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -172,6 +175,7 @@ oc.base-images.rockylinux: DISTRIBUTION: rockylinux IMAGE_PATH: rockylinux/rockylinux PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -209,6 +213,7 @@ oc.base-images.rust: DISTRIBUTION: debian-rust IMAGE_PATH: debian PLATFORM: "" + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -242,6 +247,7 @@ oc.base-images.rust.merge: variables: DOCKER_VERSION: 24.0.7 RELEASE: trixie + VERSION: "1.0" IMAGE_NAME: ${GCP_REGISTRY}/tezos/tezos/debian-rust oc.base-images.debian-homebrew: @@ -275,6 +281,7 @@ oc.base-images.debian-homebrew: DISTRIBUTION: debian-homebrew IMAGE_PATH: debian PLATFORM: linux/amd64 + VERSION: "1.0" parallel: matrix: - RELEASE: diff --git a/.gitlab/ci/pipelines/base_images.yml b/.gitlab/ci/pipelines/base_images.yml index 8109d231bd6d..033a9efd8a3d 100644 --- a/.gitlab/ci/pipelines/base_images.yml +++ b/.gitlab/ci/pipelines/base_images.yml @@ -69,6 +69,7 @@ oc.base-images.debian: DISTRIBUTION: debian IMAGE_PATH: debian PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -106,6 +107,7 @@ oc.base-images.ubuntu: DISTRIBUTION: ubuntu IMAGE_PATH: ubuntu PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -143,6 +145,7 @@ oc.base-images.fedora: DISTRIBUTION: fedora IMAGE_PATH: fedora PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -180,6 +183,7 @@ oc.base-images.rockylinux: DISTRIBUTION: rockylinux IMAGE_PATH: rockylinux/rockylinux PLATFORM: linux/amd64,linux/arm64 + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -216,6 +220,7 @@ oc.base-images.rust: DISTRIBUTION: debian-rust IMAGE_PATH: debian PLATFORM: "" + VERSION: "1.0" parallel: matrix: - RELEASE: @@ -248,6 +253,7 @@ oc.base-images.rust.merge: variables: DOCKER_VERSION: 24.0.7 RELEASE: trixie + VERSION: "1.0" IMAGE_NAME: ${GCP_REGISTRY}/tezos/tezos/debian-rust oc.base-images.debian-homebrew: @@ -280,6 +286,7 @@ oc.base-images.debian-homebrew: DISTRIBUTION: debian-homebrew IMAGE_PATH: debian PLATFORM: linux/amd64 + VERSION: "1.0" parallel: matrix: - RELEASE: diff --git a/ci/lib_tezos_ci/tezos_ci.ml b/ci/lib_tezos_ci/tezos_ci.ml index aa1f31966735..bed0f6c04a60 100644 --- a/ci/lib_tezos_ci/tezos_ci.ml +++ b/ci/lib_tezos_ci/tezos_ci.ml @@ -1532,38 +1532,51 @@ module Images = struct include Images_external module Base_images = struct + type version = {major : int; minor : int} + + let version_pp ppf v = Format.fprintf ppf "%d.%d" v.major v.minor + let path_prefix = "${GCP_PROTECTED_REGISTRY}/tezos/tezos" - let make_img distro = + let make_img distro _version = Image.mk_external ~image_path:(sf "%s/%s" path_prefix distro) - let debian_bookworm = make_img "debian:bookworm" + let debian_version = {major = 1; minor = 0} + + let debian_bookworm = make_img "debian:bookworm" debian_version + + let debian_trixie = make_img "debian:trixie" debian_version + + let debian_unstable = make_img "debian:unstable" debian_version + + let ubuntu_noble = make_img "ubuntu:noble" debian_version - let debian_trixie = make_img "debian:trixie" + let ubuntu_jammy = make_img "ubuntu:jammy" debian_version - let debian_unstable = make_img "debian:unstable" + let ubuntu_plucky = make_img "ubuntu:plucky" debian_version - let ubuntu_noble = make_img "ubuntu:noble" + let rpm_version = {major = 1; minor = 0} - let ubuntu_jammy = make_img "ubuntu:jammy" + let rockylinux_9_3 = make_img "rockylinux:9.3" rpm_version - let ubuntu_plucky = make_img "ubuntu:plucky" + let rockylinux_9_6 = make_img "rockylinux:9.6" rpm_version - let rockylinux_9_3 = make_img "rockylinux:9.3" + let rockylinux_10_0 = make_img "rockylinux:10.0" rpm_version - let rockylinux_9_6 = make_img "rockylinux:9.6" + let fedora_39 = make_img "fedora:39" rpm_version - let rockylinux_10_0 = make_img "rockylinux:10.0" + let fedora_41 = make_img "fedora:41" rpm_version - let fedora_39 = make_img "fedora:39" + let fedora_42 = make_img "fedora:42" rpm_version - let fedora_41 = make_img "fedora:41" + let homebrew_version = {major = 1; minor = 0} - let fedora_42 = make_img "fedora:42" + let homebrew = make_img "debian-homebrew:trixie" homebrew_version - let homebrew = make_img "debian-homebrew:trixie" + let rust_toolchain_version = {major = 1; minor = 0} - let rust_toolchain_trixie = make_img "debian-rust:trixie" + let rust_toolchain_trixie = + make_img "debian-rust:trixie" rust_toolchain_version end (* Internal images are built in the stage {!Stages.images}. *) diff --git a/ci/lib_tezos_ci/tezos_ci.mli b/ci/lib_tezos_ci/tezos_ci.mli index 82ddd4633222..a87f1ffa64a4 100644 --- a/ci/lib_tezos_ci/tezos_ci.mli +++ b/ci/lib_tezos_ci/tezos_ci.mli @@ -678,9 +678,21 @@ module Images : sig end module Base_images : sig + type version = {major : int; minor : int} + + val version_pp : Format.formatter -> version -> unit + (** The prefix of the path of the base images. *) val path_prefix : string + val debian_version : version + + val rpm_version : version + + val homebrew_version : version + + val rust_toolchain_version : version + val debian_unstable : Image.t val debian_bookworm : Image.t diff --git a/ci/lib_tezos_ci_jobs/base_images.ml b/ci/lib_tezos_ci_jobs/base_images.ml index 56d6251e298f..07f167384ec1 100644 --- a/ci/lib_tezos_ci_jobs/base_images.ml +++ b/ci/lib_tezos_ci_jobs/base_images.ml @@ -66,7 +66,8 @@ let jobs = a native runner. In this case we also must add a merge manifest job. *) let make_job_base_images ~__POS__ ~name ~matrix ~image_name ?base_name - ?(changes = Changeset.make []) ?(compilation = Emulated) dockerfile = + ?(changes = Changeset.make []) ?(compilation = Emulated) ~version + dockerfile = let script = Printf.sprintf "scripts/ci/build-base-images.sh %s" dockerfile in @@ -92,6 +93,7 @@ let jobs = if Option.is_none base_name then image_name else Option.get base_name ); ("PLATFORM", platform); + ("VERSION", Images.Base_images.(Format.asprintf "%a" version_pp version)); ] in job_docker_authenticated @@ -116,6 +118,7 @@ let jobs = ~image_name:"debian" ~matrix:debian_matrix ~changes + ~version:Images.Base_images.debian_version "images/base-images/Dockerfile.debian" in let job_ubuntu_based_images = @@ -126,6 +129,7 @@ let jobs = ~image_name:"ubuntu" ~matrix:ubuntu_matrix ~changes + ~version:Images.Base_images.debian_version "images/base-images/Dockerfile.debian" in let job_fedora_based_images = @@ -136,6 +140,7 @@ let jobs = ~image_name:"fedora" ~matrix:fedora_matrix ~changes + ~version:Images.Base_images.rpm_version "images/base-images/Dockerfile.rpm" in let job_rockylinux_based_images = @@ -147,6 +152,7 @@ let jobs = ~base_name:"rockylinux/rockylinux" ~matrix:rockylinux_matrix ~changes + ~version:Images.Base_images.rpm_version "images/base-images/Dockerfile.rpm" in let job_rust_based_images, job_rust_based_images_merge = @@ -158,6 +164,7 @@ let jobs = ~base_name:"debian" ~matrix:[("RELEASE", ["trixie"])] ~compilation:Native + ~version:Images.Base_images.rust_toolchain_version "images/base-images/Dockerfile.rust" in let merge = @@ -169,6 +176,9 @@ let jobs = ~variables: [ ("RELEASE", "trixie"); + ( "VERSION", + Images.Base_images.( + Format.asprintf "%a" version_pp rust_toolchain_version) ); ("IMAGE_NAME", "${GCP_REGISTRY}/tezos/tezos/debian-rust"); ] ["scripts/ci/docker-merge-base-images.sh"] @@ -187,6 +197,7 @@ let jobs = ~matrix:[("RELEASE", ["trixie"])] ~compilation:Amd64_only ~changes + ~version:Images.Base_images.homebrew_version "images/base-images/Dockerfile.debian-homebrew" in [ diff --git a/scripts/ci/build-base-images.sh b/scripts/ci/build-base-images.sh index 426d0f59ebd8..c189f049096a 100755 --- a/scripts/ci/build-base-images.sh +++ b/scripts/ci/build-base-images.sh @@ -7,11 +7,12 @@ BINFMT_VERSION=9.2.2-52 LATEST_TAG="${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}" LATEST_TAG_GENERIC="${CI_COMMIT_REF_SLUG}" +VERSION=${VERSION:?"Version missing"} ## Build multi-arch Docker image gcp="${GCP_REGISTRY}/$CI_PROJECT_NAMESPACE/tezos/$DISTRIBUTION:$RELEASE-${LATEST_TAG}" gcp_generic="${GCP_REGISTRY}/$CI_PROJECT_NAMESPACE/tezos/$DISTRIBUTION:$RELEASE-${LATEST_TAG_GENERIC}" -protected_gcp="${GCP_PROTECTED_REGISTRY}/tezos/tezos/$DISTRIBUTION:$RELEASE" +protected_gcp="${GCP_PROTECTED_REGISTRY}/tezos/tezos/$DISTRIBUTION:$RELEASE-$VERSION" # Native vs emulated build. # if we set the platform to only one architecture, we -- GitLab