ARG BASE_IMAGE=myelin-node-base:cuda12.6 FROM ${BASE_IMAGE} AS wheel-builder ARG RUST_TOOLCHAIN=nightly-2026-02-07 ENV PATH=/root/.cargo/bin:${PATH} RUN apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ curl \ pkg-config \ python3 \ python3-dev \ python3-pip && \ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \ sh -s -- -y --profile minimal --default-toolchain none && \ rustup toolchain install "${RUST_TOOLCHAIN}" --profile minimal --component rustc-dev && \ python3 -m pip install --break-system-packages --no-cache-dir 'maturin>=1.7,<2' && \ rm -rf /var/lib/apt/lists/* WORKDIR /workspace COPY . . RUN --mount=type=cache,id=myelin-e2e-cargo-registry,target=/root/.cargo/registry \ --mount=type=cache,id=myelin-e2e-target,target=/workspace/target \ maturin build \ --manifest-path crates/bindings/python/Cargo.toml \ --release \ --interpreter python3 \ --out /wheel FROM ${BASE_IMAGE} ARG MYELIN_NODE_BIN=target/release/myelin-worker RUN apt-get update && \ apt-get install -y --no-install-recommends python3 python3-pip && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* \ /var/cache/apt/archives/* \ /var/cache/apt/*.bin \ /var/log/apt/* \ /var/log/dpkg.log \ /tmp/* \ /var/tmp/* \ /usr/share/doc/* \ /usr/share/man/* \ /usr/share/info/* COPY ${MYELIN_NODE_BIN} /usr/local/bin/myelin-node COPY --from=wheel-builder /wheel/*.whl /tmp/swactor-wheel/ RUN python3 -m pip install --break-system-packages --no-cache-dir /tmp/swactor-wheel/*.whl && \ rm -rf /tmp/swactor-wheel && \ chmod +x /usr/local/bin/myelin-node COPY apps/myelin/node-image/e2e_python_launcher.py /usr/local/bin/myelin-e2e-python RUN chmod +x /usr/local/bin/myelin-e2e-python