Spaces:
Paused
Paused
File size: 2,753 Bytes
14a7de5 a6561fb 8f22300 a20ad5f 6751543 14a7de5 a20ad5f a6561fb a20ad5f 51a9c73 a6561fb a20ad5f bee3f8a 14a7de5 df7d9dd 8b3e169 df7d9dd bee3f8a 14a7de5 98ecc08 a20ad5f 2efee4c 14a7de5 e8eeb0f df7d9dd 51a9c73 14a7de5 a20ad5f 16a9021 14a7de5 4afed9d 30ea8d8 8b3e169 df7d9dd 14a7de5 8b3e169 30ea8d8 8b3e169 14a7de5 a20ad5f df7d9dd a20ad5f 14a7de5 30ea8d8 ac3964b 14a7de5 a20ad5f 5231d74 a20ad5f 2694bf1 14a7de5 a20ad5f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# syntax=docker/dockerfile:1
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# -----------------------------
# System dependencies
# -----------------------------
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \
git \
make \
curl \
ca-certificates \
pkg-config \
libudev-dev \
libsystemd-dev \
&& rm -rf /var/lib/apt/lists/*
# -----------------------------
# Node.js (v22.21.1) via nvm
# - npx needed by `make -C robot-server dev`
# -----------------------------
ENV NVM_DIR=/opt/nvm
RUN mkdir -p ${NVM_DIR} \
&& curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Install & activate Node 22.21.1 (system-wide usable via PATH)
ARG NODE_VERSION=22.21.1
RUN bash -lc ". ${NVM_DIR}/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm alias default ${NODE_VERSION} \
&& nvm use default \
&& node -v \
&& npm -v \
&& npx -v"
# Make node/npm/npx available in non-interactive shells too
ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin:$PATH
# -----------------------------
# uv (system-wide)
# -----------------------------
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
&& install -m 0755 /root/.local/bin/uv /usr/local/bin/uv
# Put uv-managed python somewhere world-readable
ENV UV_PYTHON_INSTALL_DIR=/opt/uv/python
RUN mkdir -p /opt/uv/python \
&& chmod -R 755 /opt/uv
# -----------------------------
# Python via uv
# -----------------------------
ARG PYTHON_VERSION=3.12.12
RUN uv python install ${PYTHON_VERSION}
# -----------------------------
# Clone Opentrons monorepo (default branch is edge)
# -----------------------------
ARG OPENTRONS_REF=edge
RUN git clone --depth 1 --branch ${OPENTRONS_REF} https://github.com/Opentrons/opentrons.git /root/opentrons
WORKDIR /root/opentrons
# robot-server setup using uv-managed python
RUN uv run --python ${PYTHON_VERSION} make -C robot-server setup
# -----------------------------
# App user
# -----------------------------
RUN useradd -m -u 1000 user
USER user
ENV HOME=/home/user
# Put uv cache in a writable location for non-root user
ENV UV_CACHE_DIR=/home/user/.cache/uv
WORKDIR $HOME/app
RUN mkdir -p $UV_CACHE_DIR
# Cache-friendly install of Python deps for your app
COPY --chown=user requirements.txt $HOME/app/requirements.txt
RUN uv venv --python ${PYTHON_VERSION} .venv \
&& uv pip install --python .venv/bin/python -r requirements.txt
# Copy the rest of your app
COPY --chown=user . $HOME/app
# -----------------------------
# Entrypoint
# -----------------------------
USER root
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
WORKDIR /root/opentrons
ENTRYPOINT ["/bin/bash", "-lc", "/entrypoint.sh"]
CMD ["bash"]
|