replace Dockerfile-mini with new superbuild-based Dockerfile

Switches from the old per-component Dockerfile-mini to a unified
Dockerfile that uses the superbuild CMake setup, Ubuntu 24.04, uv for
Python dependency management, and pyproject.toml for the Python
environment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 13:06:51 +02:00
parent 2f74ee0637
commit 26821af188
3 changed files with 89 additions and 68 deletions
+68
View File
@@ -0,0 +1,68 @@
FROM ubuntu:24.04
ARG DEBIAN_FRONTEND=noninteractive
# ---------------------------------------------------------------------------
# System dependencies (dnf instead of apt)
# ---------------------------------------------------------------------------
RUN apt-get update && apt-get install -y \
gcc \
g++ \
make \
cmake \
ninja-build \
libxerces-c-dev \
git \
curl \
ca-certificates \
python3 \
python3-dev \
python3-pip \
python3-venv \
&& rm -rf /var/lib/apt/lists/*
# ---------------------------------------------------------------------------
# uv
# ---------------------------------------------------------------------------
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:${PATH}"
WORKDIR /src
# ---------------------------------------------------------------------------
# Copy only files needed for the C++ build
# ---------------------------------------------------------------------------
COPY CMakeLists.txt .
COPY superbuild/ superbuild/
COPY src/ src/
COPY include/ include/
COPY bind/ bind/
COPY lib/ lib/
COPY run_pbwo4.cc .
# lib/geant4/.git is a submodule pointer to the host's .git/modules dir, which
# is not copied into the image. Replace it with a fresh repo so Geant4's cmake
# git status calls succeed.
RUN rm lib/geant4/.git && git init lib/geant4
# ---------------------------------------------------------------------------
# Build Geant4 + miniCaloSim
# ---------------------------------------------------------------------------
RUN cmake -S superbuild -B build -G Ninja \
-DGEANT4_INSTALL_DATA=ON
RUN cmake --build build --parallel
# ---------------------------------------------------------------------------
# Python environment (uv)
# ---------------------------------------------------------------------------
RUN uv venv /opt/venv
ENV PATH="/opt/venv/bin:${PATH}"
ADD docker/pyproject.toml pyproject.toml
RUN uv sync
WORKDIR /workspace
ENTRYPOINT ["/bin/bash", "-l"]
-68
View File
@@ -1,68 +0,0 @@
FROM ubuntu:22.04
SHELL ["/bin/bash", "-c"]
USER root
ENV DEBIAN_FRONTEND=noninteractive
# Build tools + minimal Python
RUN apt-get update -y && apt-get install -y \
python3 python3-dev python3-pip \
cmake g++ gcc binutils \
libssl-dev wget git \
&& rm -rf /var/lib/apt/lists/*
RUN python3 -m pip install --upgrade pip && \
python3 -m pip install numpy pandas uproot awkward plotly ipython && \
ln -sf /usr/bin/python3 /usr/bin/python
# Geant4 — build from submodule source (batch mode only, no visualization, no multithreading)
ADD minicalosim/lib/geant4 /tmp/geant4-src
RUN rm -f /tmp/geant4-src/.git && \
cmake \
-S /tmp/geant4-src \
-B /tmp/geant4-build \
-DCMAKE_INSTALL_PREFIX=/opt/geant4-v11.1.2 \
-DCMAKE_RULE_MESSAGES=OFF \
-DGEANT4_INSTALL_DATA=ON \
-DGEANT4_BUILD_MULTITHREADED=OFF \
-DGEANT4_BUILD_TLS_MODEL=global-dynamic \
> /dev/null && \
cmake --build /tmp/geant4-build --parallel $(( $(nproc) < 16 ? $(nproc) : 16 )) > /dev/null && \
cmake --install /tmp/geant4-build > /dev/null && \
rm -rf /tmp/geant4-src /tmp/geant4-build
ENV LD_LIBRARY_PATH="/opt/geant4-v11.1.2/lib"
# Build minicalo
ARG BUILD_DATE
ARG COMMIT
ARG USER
LABEL org.label-schema.build-date=$BUILD_DATE
ADD minicalosim /root/minicalosim
RUN cd /root/minicalosim && git checkout $COMMIT && \
git submodule update --init lib/pybind11 && \
cmake \
-S . -B build \
-DWITH_GEANT4_UIVIS=OFF \
> /dev/null && \
cmake --build build --parallel $(( $(nproc) < 16 ? $(nproc) : 16 )) && \
cp build/minicalo*.so /usr/local/lib/python3.10/dist-packages/
RUN echo "commit = '${COMMIT}'" > /root/minicalosim/bind/minicalo_version.py && \
cp /root/minicalosim/bind/G4Calo.py \
/root/minicalosim/bind/minicalo_tools.py \
/root/minicalosim/bind/minipandas.py \
/root/minicalosim/bind/minicalo_version.py \
/usr/local/lib/python3.10/dist-packages/ && \
install -m 755 /root/minicalosim/bind/G4Calo_exec.py /usr/local/bin/G4Calo_exec.py
# Copy examples
RUN cp -r /root/minicalosim/bind /examples && \
rm -rf /root/minicalosim
WORKDIR /examples
CMD ["bash"]
+21
View File
@@ -0,0 +1,21 @@
[project]
name = "minicalosim"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
"awkward>=2.9.1",
"awkward-pandas>=2023.8.0",
"hist>=2.10.1",
"jupyter>=1.1.1",
"matplotlib>=3.10.9",
"mplhep>=1.2.0",
"networkx>=3.6.1",
"numpy>=2.4.6",
"pandas>=3.0.3",
"plotly>=6.8.0",
"polars>=1.41.2",
"seaborn>=0.13.2",
"uproot>=5.7.4",
]