From 79bbdf900bd6857355b14ca85092c2cb20be26b5 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Sun, 19 Apr 2026 15:57:57 -0500 Subject: [PATCH] fix(grid-rs): pull wgrib2 from the Elixir image MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wgrib2 isn't in Debian apt on trixie — the main prop Dockerfile builds it from source in a dedicated stage. Rather than duplicate that 5-min compile in the Rust image's CI path, copy the already-built /usr/local/bin/wgrib2 + /usr/local/lib/libg2c.so* out of the published Elixir image. Also add the libgfortran5/libaec0/zlib1g/libpng16-16t64/libopenjp2-7 runtime deps that wgrib2 links dynamically against — same set the Elixir runtime installs. --- rust/prop_grid_rs/Dockerfile | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/rust/prop_grid_rs/Dockerfile b/rust/prop_grid_rs/Dockerfile index 16fe8947..ea8aa95e 100644 --- a/rust/prop_grid_rs/Dockerfile +++ b/rust/prop_grid_rs/Dockerfile @@ -1,8 +1,15 @@ # syntax=docker/dockerfile:1.7 # -# Multi-arch build for `prop-grid-rs`. wgrib2 is installed from Debian -# Trixie (same version the Elixir image uses). The binary runs as a -# non-root uid that matches the fsGroup on the NFS scores mount. +# Multi-arch build for `prop-grid-rs`. wgrib2 isn't in Debian apt — the +# Elixir image builds it from source in its own stage. Rather than +# rebuild it here (~5 min per CI run), copy the binary + libg2c out of +# the already-published Elixir image. +# +# Runtime uid 65534 matches the fsGroup on the NFS scores mount. +ARG WGRIB2_IMAGE=git.mcintire.me/graham/prop:main + +FROM ${WGRIB2_IMAGE} AS wgrib2-src + FROM rust:1.94-trixie AS builder WORKDIR /src @@ -25,15 +32,24 @@ RUN rustup component add clippy \ && cargo test --release \ && cargo build --release --bin worker -# Runtime image: slim debian plus wgrib2. libexpat/libjasper pulled in -# transitively by wgrib2 for PNG/JPEG2000 GRIB2 decompression. +# Runtime image: slim debian + the shared libs wgrib2 links against. +# libgfortran5/libaec0/zlib1g/libpng16-16t64/libopenjp2-7 mirror the +# Elixir runtime stage. FROM debian:trixie-slim AS runtime RUN apt-get update && apt-get install -y --no-install-recommends \ - wgrib2 \ ca-certificates \ tini \ + libgfortran5 \ + libaec0 \ + zlib1g \ + libpng16-16t64 \ + libopenjp2-7 \ && rm -rf /var/lib/apt/lists/* +COPY --from=wgrib2-src /usr/local/bin/wgrib2 /usr/local/bin/wgrib2 +COPY --from=wgrib2-src /usr/local/lib/libg2c.so* /usr/local/lib/ +RUN ldconfig + COPY --from=builder /src/target/release/worker /usr/local/bin/prop-grid-rs USER 65534:65534