From 6a7166d1f435678ef817770871d58797e1b4564f Mon Sep 17 00:00:00 2001 From: Rimuksh Kansal Date: Fri, 26 Jun 2026 17:05:55 +0900 Subject: [PATCH 1/5] change bdd images to slim-trixie --- bdd/Dockerfile | 5 +++-- bdd/java/Dockerfile | 2 +- bdd/rust/Dockerfile | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bdd/Dockerfile b/bdd/Dockerfile index efa8c63e54..8a9e3a07e0 100644 --- a/bdd/Dockerfile +++ b/bdd/Dockerfile @@ -27,7 +27,8 @@ # or stability of the code, it does indicate that the project has yet to be # fully endorsed by the ASF. -FROM rust:1.96.0-alpine3.22 AS builder +ARG RUST_VERSION=1.96 +FROM rust:${RUST_VERSION}-slim-trixie AS builder RUN apk add musl-dev WORKDIR /app @@ -36,7 +37,7 @@ COPY . . # Build server in debug mode for faster compilation RUN cargo build --bin iggy-server -FROM debian:bookworm-slim +FROM debian:trixie-slim # Install curl for healthcheck RUN apt-get update && \ diff --git a/bdd/java/Dockerfile b/bdd/java/Dockerfile index 4759275a01..8c58ef6d4a 100644 --- a/bdd/java/Dockerfile +++ b/bdd/java/Dockerfile @@ -28,7 +28,7 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 -FROM rust:${RUST_VERSION} +FROM rust:${RUST_VERSION}-slim-trixie FROM gradle:9.6.0-jdk17 diff --git a/bdd/rust/Dockerfile b/bdd/rust/Dockerfile index 0249899d6e..ffe2daf720 100644 --- a/bdd/rust/Dockerfile +++ b/bdd/rust/Dockerfile @@ -28,7 +28,7 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 -FROM rust:${RUST_VERSION} +FROM rust:${RUST_VERSION}-slim-trixie WORKDIR /app From 2a5de5c68f119e4b67937e970cb8f607d26b6aa3 Mon Sep 17 00:00:00 2001 From: Rimuksh Kansal Date: Fri, 26 Jun 2026 22:08:08 +0900 Subject: [PATCH 2/5] add check for slim-trixie to sync-rust-version.sh --- Dockerfile | 5 +- core/ai/mcp/Dockerfile | 3 +- core/connectors/runtime/Dockerfile | 3 +- core/server-ng/Dockerfile | 3 +- core/server/Dockerfile | 4 +- foreign/php/Dockerfile.test | 3 +- foreign/python/.devcontainer/Dockerfile | 2 +- foreign/python/Dockerfile.test | 2 +- scripts/ci/sync-rustc-version.sh | 66 +++++++++++++++++++++---- 9 files changed, 67 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index e597f4af59..5b87a4471b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,8 +28,7 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 - -FROM rust:${RUST_VERSION}-slim-bookworm AS builder +FROM rust:${RUST_VERSION}-slim-trixie AS builder WORKDIR /build RUN apt-get update && apt-get install -y \ @@ -46,7 +45,7 @@ RUN npm --prefix web ci && npm --prefix web run build:static RUN cargo build --bin iggy --release RUN cargo build --bin iggy-server --release -FROM debian:bookworm-slim +FROM debian:trixie-slim RUN apt-get update && apt-get install -y \ ca-certificates \ liblzma5 \ diff --git a/core/ai/mcp/Dockerfile b/core/ai/mcp/Dockerfile index 313dc8fdfb..5d6940f83c 100644 --- a/core/ai/mcp/Dockerfile +++ b/core/ai/mcp/Dockerfile @@ -16,9 +16,8 @@ # under the License. ARG RUST_VERSION=1.96 -ARG ALPINE_VERSION=3.23 -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/core/connectors/runtime/Dockerfile b/core/connectors/runtime/Dockerfile index fbe61fd861..115ec8927d 100644 --- a/core/connectors/runtime/Dockerfile +++ b/core/connectors/runtime/Dockerfile @@ -16,9 +16,8 @@ # under the License. ARG RUST_VERSION=1.96 -ARG ALPINE_VERSION=3.23 -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/core/server-ng/Dockerfile b/core/server-ng/Dockerfile index a768b7ac71..1c8ab88f24 100644 --- a/core/server-ng/Dockerfile +++ b/core/server-ng/Dockerfile @@ -28,10 +28,9 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 -ARG ALPINE_VERSION=3.23 # ── from-source path ───────────────────────────────────────────────────────── -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/core/server/Dockerfile b/core/server/Dockerfile index 2f95a43e51..3bcb0be92a 100644 --- a/core/server/Dockerfile +++ b/core/server/Dockerfile @@ -28,10 +28,8 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 -ARG ALPINE_VERSION=3.23 - # ── from-source path ───────────────────────────────────────────────────────── -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/foreign/php/Dockerfile.test b/foreign/php/Dockerfile.test index b6580ae7e9..6e70ef18be 100644 --- a/foreign/php/Dockerfile.test +++ b/foreign/php/Dockerfile.test @@ -15,7 +15,8 @@ # specific language governing permissions and limitations # under the License. -FROM rust:1.96-slim-bookworm +ARG RUST_VERSION=1.96 +FROM rust:${RUST_VERSION}-slim-trixie RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ diff --git a/foreign/python/.devcontainer/Dockerfile b/foreign/python/.devcontainer/Dockerfile index dccd315510..d8f62bea36 100644 --- a/foreign/python/.devcontainer/Dockerfile +++ b/foreign/python/.devcontainer/Dockerfile @@ -27,7 +27,7 @@ # or stability of the code, it does indicate that the project has yet to be # fully endorsed by the ASF. -FROM mcr.microsoft.com/devcontainers/python:1-3.10-bullseye +FROM mcr.microsoft.com/devcontainers/python:1-3.10-slim-trixie ENV VIRTUAL_ENV=/opt/venv RUN python -m venv $VIRTUAL_ENV diff --git a/foreign/python/Dockerfile.test b/foreign/python/Dockerfile.test index 8a3cb585c8..777b7e98ae 100644 --- a/foreign/python/Dockerfile.test +++ b/foreign/python/Dockerfile.test @@ -27,7 +27,7 @@ # or stability of the code, it does indicate that the project has yet to be # fully endorsed by the ASF. # Multi-stage build for Python SDK testing -FROM python:3.10-slim AS base +FROM python:3.10-slim-trixie AS base # Install system dependencies RUN apt-get update && apt-get install -y \ diff --git a/scripts/ci/sync-rustc-version.sh b/scripts/ci/sync-rustc-version.sh index de4b65da79..b38bd7bd81 100755 --- a/scripts/ci/sync-rustc-version.sh +++ b/scripts/ci/sync-rustc-version.sh @@ -78,6 +78,9 @@ fi # Strip trailing ".0" -> e.g., 1.89.0 -> 1.89 (no change if it doesn't end in .0) RUST_VERSION_SHORT=$(echo "$RUST_VERSION" | sed -E 's/^([0-9]+)\.([0-9]+)\.0$/\1.\2/') +RUST_IMAGE_VARIANT="slim-trixie" +RUST_IMAGE_PATTERN="FROM[[:space:]].*(\\brust:|latest-rust-)" +RUST_IMAGE_TAG_PATTERN="(rust:[^-[:space:]]+|latest-rust-[^-[:space:]]+)" echo "Rust version from rust-toolchain.toml: ${GREEN}$RUST_VERSION${NC} (using ${GREEN}$RUST_VERSION_SHORT${NC} for Dockerfiles)" echo "" @@ -91,6 +94,12 @@ TOTAL_FILES=0 FIXED_FILES=0 for dockerfile in $DOCKERFILES; do + SOURCE="" + CURRENT_VERSION="" + EXPECTED_VERSION="" + HAS_RUST_IMAGE="false" + RUST_IMAGE_MISMATCH="false" + # Two ways a Dockerfile pins the toolchain: # 1. `ARG RUST_VERSION=1.96` (+ `FROM rust:${RUST_VERSION}...`) # 2. hardcoded `FROM rust:1.96-slim` / `FROM rust:1.96.0-alpine` @@ -108,30 +117,69 @@ for dockerfile in $DOCKERFILES; do else EXPECTED_VERSION="$RUST_VERSION_SHORT" fi - else + fi + + if grep -qE "$RUST_IMAGE_PATTERN" "$dockerfile" 2>/dev/null; then + HAS_RUST_IMAGE="true" + if grep -E "$RUST_IMAGE_PATTERN" "$dockerfile" | grep -qvE -- "-$RUST_IMAGE_VARIANT([[:space:]]|$)"; then + RUST_IMAGE_MISMATCH="true" + fi + fi + + if [ -z "$SOURCE" ] && [ "$HAS_RUST_IMAGE" = "false" ]; then continue fi TOTAL_FILES=$((TOTAL_FILES + 1)) + STATUS_DETAILS="$CURRENT_VERSION" + if [ "$HAS_RUST_IMAGE" = "true" ]; then + STATUS_DETAILS="${STATUS_DETAILS:+$STATUS_DETAILS, }$RUST_IMAGE_VARIANT" + fi if [ "$MODE" = "check" ]; then - if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + if { [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; } || [ "$RUST_IMAGE_MISMATCH" = "true" ]; then MISALIGNED_FILES+=("$dockerfile") - echo -e "${RED}✗${NC} $dockerfile: ${RED}$CURRENT_VERSION${NC} (expected: ${GREEN}$EXPECTED_VERSION${NC})" + MESSAGE="" + if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + MESSAGE="Rust version ${RED}$CURRENT_VERSION${NC} (expected: ${GREEN}$EXPECTED_VERSION${NC})" + fi + if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ -n "$MESSAGE" ]; then + MESSAGE="$MESSAGE; " + fi + MESSAGE="${MESSAGE}Rust base image must use ${GREEN}$RUST_IMAGE_VARIANT${NC}" + fi + echo -e "${RED}✗${NC} $dockerfile: $MESSAGE" else - echo -e "${GREEN}✓${NC} $dockerfile: $CURRENT_VERSION" + echo -e "${GREEN}✓${NC} $dockerfile${STATUS_DETAILS:+: $STATUS_DETAILS}" fi elif [ "$MODE" = "fix" ]; then - if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then - if [ "$SOURCE" = "arg" ]; then + if { [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; } || [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ] && [ "$SOURCE" = "arg" ]; then sed -i "s/^ARG RUST_VERSION=.*/ARG RUST_VERSION=$EXPECTED_VERSION/" "$dockerfile" - else + elif [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then sed -i -E "s/(\brust:)[0-9]+\.[0-9]+(\.[0-9]+)?/\1$EXPECTED_VERSION/g" "$dockerfile" fi + + if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + sed -i -E "/$RUST_IMAGE_PATTERN/ s#$RUST_IMAGE_TAG_PATTERN-[^[:space:]]+#\\1-$RUST_IMAGE_VARIANT#g" "$dockerfile" + sed -i -E "/$RUST_IMAGE_PATTERN/ { /-$RUST_IMAGE_VARIANT([[:space:]]|$)/! s#$RUST_IMAGE_TAG_PATTERN([[:space:]]|$)#\\1-$RUST_IMAGE_VARIANT\\2#g; }" "$dockerfile" + fi + FIXED_FILES=$((FIXED_FILES + 1)) - echo -e "${GREEN}Fixed${NC} $dockerfile: ${RED}$CURRENT_VERSION${NC} -> ${GREEN}$EXPECTED_VERSION${NC}" + MESSAGE="" + if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + MESSAGE="Rust version ${RED}$CURRENT_VERSION${NC} -> ${GREEN}$EXPECTED_VERSION${NC}" + fi + if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ -n "$MESSAGE" ]; then + MESSAGE="$MESSAGE; " + fi + MESSAGE="${MESSAGE}Rust base image -> ${GREEN}$RUST_IMAGE_VARIANT${NC}" + fi + echo -e "${GREEN}Fixed${NC} $dockerfile: $MESSAGE" else - echo -e "${GREEN}✓${NC} $dockerfile: already correct ($CURRENT_VERSION)" + echo -e "${GREEN}✓${NC} $dockerfile${STATUS_DETAILS:+: already correct ($STATUS_DETAILS)}" fi fi done From 5b0fe104526d13b6123de1733838807ab47290c0 Mon Sep 17 00:00:00 2001 From: Rimuksh Kansal Date: Fri, 26 Jun 2026 22:09:42 +0900 Subject: [PATCH 3/5] fix java bdd dockerfile --- bdd/java/Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/bdd/java/Dockerfile b/bdd/java/Dockerfile index 8c58ef6d4a..9b35188ee7 100644 --- a/bdd/java/Dockerfile +++ b/bdd/java/Dockerfile @@ -27,9 +27,6 @@ # or stability of the code, it does indicate that the project has yet to be # fully endorsed by the ASF. -ARG RUST_VERSION=1.96 -FROM rust:${RUST_VERSION}-slim-trixie - FROM gradle:9.6.0-jdk17 WORKDIR /workspace From dd51e54619336b7a53597ae1b604e916c32d4725 Mon Sep 17 00:00:00 2001 From: Rimuksh Kansal Date: Fri, 26 Jun 2026 22:39:37 +0900 Subject: [PATCH 4/5] fix ci - revert to alpine, remove cargo chef related checks --- core/ai/mcp/Dockerfile | 3 +- core/connectors/runtime/Dockerfile | 3 +- core/server-ng/Dockerfile | 3 +- core/server/Dockerfile | 3 +- foreign/python/.devcontainer/Dockerfile | 2 +- scripts/ci/sync-python-interpreter-version.sh | 8 +-- scripts/ci/sync-rustc-version.sh | 62 +++---------------- 7 files changed, 23 insertions(+), 61 deletions(-) diff --git a/core/ai/mcp/Dockerfile b/core/ai/mcp/Dockerfile index 5d6940f83c..313dc8fdfb 100644 --- a/core/ai/mcp/Dockerfile +++ b/core/ai/mcp/Dockerfile @@ -16,8 +16,9 @@ # under the License. ARG RUST_VERSION=1.96 +ARG ALPINE_VERSION=3.23 -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/core/connectors/runtime/Dockerfile b/core/connectors/runtime/Dockerfile index 115ec8927d..fbe61fd861 100644 --- a/core/connectors/runtime/Dockerfile +++ b/core/connectors/runtime/Dockerfile @@ -16,8 +16,9 @@ # under the License. ARG RUST_VERSION=1.96 +ARG ALPINE_VERSION=3.23 -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/core/server-ng/Dockerfile b/core/server-ng/Dockerfile index 1c8ab88f24..a768b7ac71 100644 --- a/core/server-ng/Dockerfile +++ b/core/server-ng/Dockerfile @@ -28,9 +28,10 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 +ARG ALPINE_VERSION=3.23 # ── from-source path ───────────────────────────────────────────────────────── -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/core/server/Dockerfile b/core/server/Dockerfile index 3bcb0be92a..c192830ac2 100644 --- a/core/server/Dockerfile +++ b/core/server/Dockerfile @@ -28,8 +28,9 @@ # fully endorsed by the ASF. ARG RUST_VERSION=1.96 +ARG ALPINE_VERSION=3.23 # ── from-source path ───────────────────────────────────────────────────────── -FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-slim-trixie AS chef +FROM --platform=$BUILDPLATFORM lukemathwalker/cargo-chef:latest-rust-${RUST_VERSION}-alpine${ALPINE_VERSION} AS chef WORKDIR /app RUN apk add --no-cache musl-dev pkgconfig diff --git a/foreign/python/.devcontainer/Dockerfile b/foreign/python/.devcontainer/Dockerfile index d8f62bea36..dd186cf933 100644 --- a/foreign/python/.devcontainer/Dockerfile +++ b/foreign/python/.devcontainer/Dockerfile @@ -27,7 +27,7 @@ # or stability of the code, it does indicate that the project has yet to be # fully endorsed by the ASF. -FROM mcr.microsoft.com/devcontainers/python:1-3.10-slim-trixie +FROM mcr.microsoft.com/devcontainers/python:1-3.10-trixie ENV VIRTUAL_ENV=/opt/venv RUN python -m venv $VIRTUAL_ENV diff --git a/scripts/ci/sync-python-interpreter-version.sh b/scripts/ci/sync-python-interpreter-version.sh index 74e6e97e6d..1fdf680ae8 100755 --- a/scripts/ci/sync-python-interpreter-version.sh +++ b/scripts/ci/sync-python-interpreter-version.sh @@ -317,15 +317,15 @@ ensure_classifiers "$SOURCE_FILE" ensure_line \ "foreign/python/Dockerfile.test" \ - "^(FROM python:)[0-9]+\\.[0-9]+(-slim AS base)$" \ - "^FROM python:${PYTHON_VERSION_REGEX}-slim AS base$" \ + "^(FROM python:)[0-9]+\\.[0-9]+(-slim-trixie AS base)$" \ + "^FROM python:${PYTHON_VERSION_REGEX}-slim-trixie AS base$" \ "\\1${PYTHON_VERSION}\\2" \ "Docker image Python version" ensure_line \ "foreign/python/.devcontainer/Dockerfile" \ - "^(FROM mcr\\.microsoft\\.com/devcontainers/python:1-)[0-9]+\\.[0-9]+(-bullseye)$" \ - "^FROM mcr\\.microsoft\\.com/devcontainers/python:1-${PYTHON_VERSION_REGEX}-bullseye$" \ + "^(FROM mcr\\.microsoft\\.com/devcontainers/python:1-)[0-9]+\\.[0-9]+(-trixie)$" \ + "^FROM mcr\\.microsoft\\.com/devcontainers/python:1-${PYTHON_VERSION_REGEX}-trixie$" \ "\\1${PYTHON_VERSION}\\2" \ "devcontainer Python image version" diff --git a/scripts/ci/sync-rustc-version.sh b/scripts/ci/sync-rustc-version.sh index b38bd7bd81..a4101a5441 100755 --- a/scripts/ci/sync-rustc-version.sh +++ b/scripts/ci/sync-rustc-version.sh @@ -78,9 +78,6 @@ fi # Strip trailing ".0" -> e.g., 1.89.0 -> 1.89 (no change if it doesn't end in .0) RUST_VERSION_SHORT=$(echo "$RUST_VERSION" | sed -E 's/^([0-9]+)\.([0-9]+)\.0$/\1.\2/') -RUST_IMAGE_VARIANT="slim-trixie" -RUST_IMAGE_PATTERN="FROM[[:space:]].*(\\brust:|latest-rust-)" -RUST_IMAGE_TAG_PATTERN="(rust:[^-[:space:]]+|latest-rust-[^-[:space:]]+)" echo "Rust version from rust-toolchain.toml: ${GREEN}$RUST_VERSION${NC} (using ${GREEN}$RUST_VERSION_SHORT${NC} for Dockerfiles)" echo "" @@ -97,8 +94,6 @@ for dockerfile in $DOCKERFILES; do SOURCE="" CURRENT_VERSION="" EXPECTED_VERSION="" - HAS_RUST_IMAGE="false" - RUST_IMAGE_MISMATCH="false" # Two ways a Dockerfile pins the toolchain: # 1. `ARG RUST_VERSION=1.96` (+ `FROM rust:${RUST_VERSION}...`) @@ -119,67 +114,30 @@ for dockerfile in $DOCKERFILES; do fi fi - if grep -qE "$RUST_IMAGE_PATTERN" "$dockerfile" 2>/dev/null; then - HAS_RUST_IMAGE="true" - if grep -E "$RUST_IMAGE_PATTERN" "$dockerfile" | grep -qvE -- "-$RUST_IMAGE_VARIANT([[:space:]]|$)"; then - RUST_IMAGE_MISMATCH="true" - fi - fi - - if [ -z "$SOURCE" ] && [ "$HAS_RUST_IMAGE" = "false" ]; then + if [ -z "$SOURCE" ]; then continue fi TOTAL_FILES=$((TOTAL_FILES + 1)) - STATUS_DETAILS="$CURRENT_VERSION" - if [ "$HAS_RUST_IMAGE" = "true" ]; then - STATUS_DETAILS="${STATUS_DETAILS:+$STATUS_DETAILS, }$RUST_IMAGE_VARIANT" - fi if [ "$MODE" = "check" ]; then - if { [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; } || [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then MISALIGNED_FILES+=("$dockerfile") - MESSAGE="" - if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then - MESSAGE="Rust version ${RED}$CURRENT_VERSION${NC} (expected: ${GREEN}$EXPECTED_VERSION${NC})" - fi - if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then - if [ -n "$MESSAGE" ]; then - MESSAGE="$MESSAGE; " - fi - MESSAGE="${MESSAGE}Rust base image must use ${GREEN}$RUST_IMAGE_VARIANT${NC}" - fi - echo -e "${RED}✗${NC} $dockerfile: $MESSAGE" + echo -e "${RED}✗${NC} $dockerfile: ${RED}$CURRENT_VERSION${NC} (expected: ${GREEN}$EXPECTED_VERSION${NC})" else - echo -e "${GREEN}✓${NC} $dockerfile${STATUS_DETAILS:+: $STATUS_DETAILS}" + echo -e "${GREEN}✓${NC} $dockerfile: $CURRENT_VERSION" fi elif [ "$MODE" = "fix" ]; then - if { [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; } || [ "$RUST_IMAGE_MISMATCH" = "true" ]; then - if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ] && [ "$SOURCE" = "arg" ]; then + if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + if [ "$SOURCE" = "arg" ]; then sed -i "s/^ARG RUST_VERSION=.*/ARG RUST_VERSION=$EXPECTED_VERSION/" "$dockerfile" - elif [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then - sed -i -E "s/(\brust:)[0-9]+\.[0-9]+(\.[0-9]+)?/\1$EXPECTED_VERSION/g" "$dockerfile" + else + sed -i -E "/FROM[[:space:]].*\\brust:[0-9]/ s#(\\brust:)[0-9]+\\.[0-9]+(\\.[0-9]+)?#\\1$EXPECTED_VERSION#g" "$dockerfile" fi - - if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then - sed -i -E "/$RUST_IMAGE_PATTERN/ s#$RUST_IMAGE_TAG_PATTERN-[^[:space:]]+#\\1-$RUST_IMAGE_VARIANT#g" "$dockerfile" - sed -i -E "/$RUST_IMAGE_PATTERN/ { /-$RUST_IMAGE_VARIANT([[:space:]]|$)/! s#$RUST_IMAGE_TAG_PATTERN([[:space:]]|$)#\\1-$RUST_IMAGE_VARIANT\\2#g; }" "$dockerfile" - fi - FIXED_FILES=$((FIXED_FILES + 1)) - MESSAGE="" - if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then - MESSAGE="Rust version ${RED}$CURRENT_VERSION${NC} -> ${GREEN}$EXPECTED_VERSION${NC}" - fi - if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then - if [ -n "$MESSAGE" ]; then - MESSAGE="$MESSAGE; " - fi - MESSAGE="${MESSAGE}Rust base image -> ${GREEN}$RUST_IMAGE_VARIANT${NC}" - fi - echo -e "${GREEN}Fixed${NC} $dockerfile: $MESSAGE" + echo -e "${GREEN}Fixed${NC} $dockerfile: ${RED}$CURRENT_VERSION${NC} -> ${GREEN}$EXPECTED_VERSION${NC}" else - echo -e "${GREEN}✓${NC} $dockerfile${STATUS_DETAILS:+: already correct ($STATUS_DETAILS)}" + echo -e "${GREEN}✓${NC} $dockerfile: already correct ($CURRENT_VERSION)" fi fi done From 40024134ca8c2213de3b7d5c69d2a5d9364270d9 Mon Sep 17 00:00:00 2001 From: Rimuksh Kansal Date: Fri, 26 Jun 2026 22:49:49 +0900 Subject: [PATCH 5/5] fix sync rustc version check --- scripts/ci/sync-rustc-version.sh | 58 +++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/scripts/ci/sync-rustc-version.sh b/scripts/ci/sync-rustc-version.sh index a4101a5441..386f10256e 100755 --- a/scripts/ci/sync-rustc-version.sh +++ b/scripts/ci/sync-rustc-version.sh @@ -78,6 +78,9 @@ fi # Strip trailing ".0" -> e.g., 1.89.0 -> 1.89 (no change if it doesn't end in .0) RUST_VERSION_SHORT=$(echo "$RUST_VERSION" | sed -E 's/^([0-9]+)\.([0-9]+)\.0$/\1.\2/') +RUST_IMAGE_VARIANT="slim-trixie" +RUST_IMAGE_PATTERN="FROM[[:space:]].*\\brust:" +RUST_IMAGE_TAG_PATTERN="(rust:[^-[:space:]]+)" echo "Rust version from rust-toolchain.toml: ${GREEN}$RUST_VERSION${NC} (using ${GREEN}$RUST_VERSION_SHORT${NC} for Dockerfiles)" echo "" @@ -94,6 +97,8 @@ for dockerfile in $DOCKERFILES; do SOURCE="" CURRENT_VERSION="" EXPECTED_VERSION="" + HAS_RUST_IMAGE="false" + RUST_IMAGE_MISMATCH="false" # Two ways a Dockerfile pins the toolchain: # 1. `ARG RUST_VERSION=1.96` (+ `FROM rust:${RUST_VERSION}...`) @@ -114,30 +119,65 @@ for dockerfile in $DOCKERFILES; do fi fi - if [ -z "$SOURCE" ]; then + if grep -qE "$RUST_IMAGE_PATTERN" "$dockerfile" 2>/dev/null; then + HAS_RUST_IMAGE="true" + if grep -E "$RUST_IMAGE_PATTERN" "$dockerfile" | grep -qvE -- "-$RUST_IMAGE_VARIANT([[:space:]]|$)"; then + RUST_IMAGE_MISMATCH="true" + fi + fi + + if [ -z "$SOURCE" ] && [ "$HAS_RUST_IMAGE" = "false" ]; then continue fi TOTAL_FILES=$((TOTAL_FILES + 1)) + STATUS_DETAILS="$CURRENT_VERSION" + if [ "$HAS_RUST_IMAGE" = "true" ]; then + STATUS_DETAILS="${STATUS_DETAILS:+$STATUS_DETAILS, }$RUST_IMAGE_VARIANT" + fi if [ "$MODE" = "check" ]; then - if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + if { [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; } || [ "$RUST_IMAGE_MISMATCH" = "true" ]; then MISALIGNED_FILES+=("$dockerfile") - echo -e "${RED}✗${NC} $dockerfile: ${RED}$CURRENT_VERSION${NC} (expected: ${GREEN}$EXPECTED_VERSION${NC})" + MESSAGE="" + if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + MESSAGE="Rust version ${RED}$CURRENT_VERSION${NC} (expected: ${GREEN}$EXPECTED_VERSION${NC})" + fi + if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ -n "$MESSAGE" ]; then + MESSAGE="$MESSAGE; " + fi + MESSAGE="${MESSAGE}Rust base image must use ${GREEN}$RUST_IMAGE_VARIANT${NC}" + fi + echo -e "${RED}✗${NC} $dockerfile: $MESSAGE" else - echo -e "${GREEN}✓${NC} $dockerfile: $CURRENT_VERSION" + echo -e "${GREEN}✓${NC} $dockerfile${STATUS_DETAILS:+: $STATUS_DETAILS}" fi elif [ "$MODE" = "fix" ]; then - if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then - if [ "$SOURCE" = "arg" ]; then + if { [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; } || [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ] && [ "$SOURCE" = "arg" ]; then sed -i "s/^ARG RUST_VERSION=.*/ARG RUST_VERSION=$EXPECTED_VERSION/" "$dockerfile" - else + elif [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then sed -i -E "/FROM[[:space:]].*\\brust:[0-9]/ s#(\\brust:)[0-9]+\\.[0-9]+(\\.[0-9]+)?#\\1$EXPECTED_VERSION#g" "$dockerfile" fi + if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + sed -i -E "/$RUST_IMAGE_PATTERN/ s#$RUST_IMAGE_TAG_PATTERN-[^[:space:]]+#\\1-$RUST_IMAGE_VARIANT#g" "$dockerfile" + sed -i -E "/$RUST_IMAGE_PATTERN/ { /-$RUST_IMAGE_VARIANT([[:space:]]|$)/! s#$RUST_IMAGE_TAG_PATTERN([[:space:]]|$)#\\1-$RUST_IMAGE_VARIANT\\2#g; }" "$dockerfile" + fi FIXED_FILES=$((FIXED_FILES + 1)) - echo -e "${GREEN}Fixed${NC} $dockerfile: ${RED}$CURRENT_VERSION${NC} -> ${GREEN}$EXPECTED_VERSION${NC}" + MESSAGE="" + if [ -n "$SOURCE" ] && [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then + MESSAGE="Rust version ${RED}$CURRENT_VERSION${NC} -> ${GREEN}$EXPECTED_VERSION${NC}" + fi + if [ "$RUST_IMAGE_MISMATCH" = "true" ]; then + if [ -n "$MESSAGE" ]; then + MESSAGE="$MESSAGE; " + fi + MESSAGE="${MESSAGE}Rust base image -> ${GREEN}$RUST_IMAGE_VARIANT${NC}" + fi + echo -e "${GREEN}Fixed${NC} $dockerfile: $MESSAGE" else - echo -e "${GREEN}✓${NC} $dockerfile: already correct ($CURRENT_VERSION)" + echo -e "${GREEN}✓${NC} $dockerfile${STATUS_DETAILS:+: already correct ($STATUS_DETAILS)}" fi fi done