ARG RUST_IMAGE=rust@sha256:738ae99a3d75623f41e6882566b4ef37e38a9840244a47efd4a0ca22e9628b88
ARG MANYLINUX_IMAGE=quay.io/pypa/manylinux_2_28_x86_64@sha256:fdb9a9c223b215604dc7b6f7e8fff4b39bfea5fbaa7777a2e5544a60dfa437f8
ARG PYTHON_VERSION
ARG PYTHON_TAG
ARG DNF_OPERATION_TIMEOUT_S=900
ARG PIP_OPERATION_TIMEOUT_S=600
ARG NETWORK_TIMEOUT_S=30
ARG DOWNLOAD_RETRIES=2
ARG TERMINATION_GRACE_S=30

FROM ${RUST_IMAGE} AS rust_toolchain

FROM ${MANYLINUX_IMAGE}

ARG PYTHON_VERSION
ARG PYTHON_TAG
ARG DNF_OPERATION_TIMEOUT_S
ARG PIP_OPERATION_TIMEOUT_S
ARG NETWORK_TIMEOUT_S
ARG DOWNLOAD_RETRIES
ARG TERMINATION_GRACE_S

COPY --from=rust_toolchain /usr/local/cargo /usr/local/cargo
COPY --from=rust_toolchain /usr/local/rustup /usr/local/rustup

ENV PATH="/usr/local/cargo/bin:/opt/python/${PYTHON_TAG}-${PYTHON_TAG}/bin:${PATH}"
ENV RUSTUP_HOME="/usr/local/rustup"
ENV CARGO_HOME="/usr/local/cargo"

RUN timeout --signal=TERM --kill-after="${TERMINATION_GRACE_S}s" \
        "${DNF_OPERATION_TIMEOUT_S}s" \
        dnf --setopt="timeout=${NETWORK_TIMEOUT_S}" \
        --setopt="retries=${DOWNLOAD_RETRIES}" install -y \
        ccache \
        eigen3-devel \
        gcc-toolset-14-libasan-devel \
        gcc-toolset-14-libubsan-devel \
        git \
        strace && \
    timeout --signal=TERM --kill-after="${TERMINATION_GRACE_S}s" \
        "${DNF_OPERATION_TIMEOUT_S}s" dnf clean all && \
    rustc --version | grep -Fx "rustc 1.84.1 (e71f9a9a9 2025-01-27)" && \
    python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")' | \
        grep -Fx "${PYTHON_VERSION}"

COPY build-constraints.txt /opt/reforge-native-qualification/build-constraints.txt
RUN timeout --signal=TERM --kill-after="${TERMINATION_GRACE_S}s" \
        "${PIP_OPERATION_TIMEOUT_S}s" \
        python -m pip --disable-pip-version-check \
        --timeout "${NETWORK_TIMEOUT_S}" --retries "${DOWNLOAD_RETRIES}" install \
        -c /opt/reforge-native-qualification/build-constraints.txt \
        auditwheel build cmeel-eigen cmeel-urdfdom-headers nlohmann-json \
        pin pybind11 pytest scikit-build-core setuptools wheel && \
    mkdir -p /opt/reforge-native-qualification/build-wheelhouse && \
    timeout --signal=TERM --kill-after="${TERMINATION_GRACE_S}s" \
        "${PIP_OPERATION_TIMEOUT_S}s" \
        python -m pip --disable-pip-version-check \
        --timeout "${NETWORK_TIMEOUT_S}" --retries "${DOWNLOAD_RETRIES}" download \
        --dest /opt/reforge-native-qualification/build-wheelhouse \
        -c /opt/reforge-native-qualification/build-constraints.txt \
        cmake cmeel-eigen cmeel-urdfdom-headers nlohmann-json ninja pin pybind11 \
        scikit-build-core setuptools wheel && \
    mkdir -p /sdist-input
