mirror of
https://github.com/rommapp/romm.git
synced 2026-10-12 02:21:58 +00:00
Bumps the runtime everywhere it is pinned: requires-python, the .python-version uv reads, both Dockerfiles (with the python:3.14-alpine3.23 and uv 3.14 image digests), the six workflows that install Python, and the contributor docs. Several locked C-extension versions had no cp314 wheels, so the Alpine image fell back to building them from source and failed on the missing C++ and Rust toolchains. Those packages are upgraded within their existing pyproject ranges: pydantic 2.11.7 -> 2.13.5 (pydantic-core 2.46.5), uvloop 0.22.1, grpcio 1.83.1, httptools 0.8.0, inflate64 1.0.4, markupsafe 3.0.3, pyyaml 6.0.3 and streaming-form-data 1.20.0. The lockfile also drops the 3.13-only resolution branches. Co-Authored-By: Claude Fable 5.1 <[email protected]>
107 lines
3.2 KiB
Docker
107 lines
3.2 KiB
Docker
# trunk-ignore-all(trivy)
|
|
# trunk-ignore-all(checkov)
|
|
|
|
FROM ubuntu:22.04
|
|
|
|
# Prevent interactive prompts during installation
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
git \
|
|
make \
|
|
cmake \
|
|
gcc \
|
|
g++ \
|
|
libmariadb3 \
|
|
libmariadb-dev \
|
|
libpq-dev \
|
|
libffi-dev \
|
|
musl-dev \
|
|
curl \
|
|
ca-certificates \
|
|
libmagic-dev \
|
|
7zip \
|
|
libarchive-tools \
|
|
tzdata \
|
|
libbz2-dev \
|
|
libssl-dev \
|
|
libreadline-dev \
|
|
libsqlite3-dev \
|
|
zlib1g-dev \
|
|
liblzma-dev \
|
|
libncurses5-dev \
|
|
libncursesw5-dev \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install nvm
|
|
ENV NVM_DIR="/root/.nvm"
|
|
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash \
|
|
&& . "$NVM_DIR/nvm.sh" \
|
|
&& nvm install 24.16.0 \
|
|
&& nvm use 24.16.0 \
|
|
&& nvm alias default 24.16.0
|
|
ENV PATH="$NVM_DIR/versions/node/v24.16.0/bin:$PATH"
|
|
|
|
# Build and install RAHasher (optional for RA hashes)
|
|
RUN git clone --recursive --branch 1.8.3 --depth 1 https://github.com/RetroAchievements/RALibretro.git /tmp/RALibretro
|
|
WORKDIR /tmp/RALibretro
|
|
RUN make HAVE_CHD=1 -f ./Makefile.RAHasher \
|
|
&& cp ./bin64/RAHasher /usr/bin/RAHasher
|
|
RUN rm -rf /tmp/RALibretro
|
|
|
|
# Install frontend dependencies
|
|
COPY frontend/package.json /app/frontend/
|
|
WORKDIR /app/frontend
|
|
RUN npm install
|
|
|
|
# Install backend Node helpers (server-side ROM patching)
|
|
COPY backend/utils/rom_patcher/package.json /app/backend/utils/rom_patcher/
|
|
WORKDIR /app/backend/utils/rom_patcher
|
|
RUN npm install
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Install uv for the non-root user
|
|
COPY --from=ghcr.io/astral-sh/uv:0.11.2 /uv /uvx /usr/local/bin/
|
|
|
|
# Install Python
|
|
RUN uv python install 3.14
|
|
|
|
# Copy project files (including pyproject.toml and uv.lock)
|
|
COPY pyproject.toml uv.lock* .python-version /app/
|
|
|
|
# Install Python dependencies
|
|
RUN uv sync --all-extras
|
|
|
|
ENV PATH="/app/.venv/bin:${PATH}"
|
|
|
|
# Build and install sigil (optional, for title ID extraction)
|
|
# Placed after `uv sync` because the extension is compiled with the venv's
|
|
# Python so the ABI matches. Keep the pin in sync with docker/Dockerfile.
|
|
ARG SIGIL_VERSION=9665f03c04d0f547ed38dd5e5e31916c1da5f2e9
|
|
ARG PYTHON_VERSION=3.14
|
|
# One layer, so the clone and the cmake tree never reach the image.
|
|
# trunk-ignore(hadolint/DL3003)
|
|
RUN git clone --filter=blob:none https://github.com/rommforge/argosy-sigil.git /tmp/argosy-sigil \
|
|
&& cd /tmp/argosy-sigil \
|
|
&& git checkout "${SIGIL_VERSION}" \
|
|
&& git submodule update --init --recursive \
|
|
&& cmake -B ./build-python -S . -DSIGIL_BUILD_CLI=OFF -DSIGIL_BUILD_TESTS=OFF \
|
|
&& cmake --build ./build-python --target sigil \
|
|
&& uv pip install --python /app/.venv/bin/python cffi setuptools \
|
|
&& cd ./bindings/python \
|
|
&& /app/.venv/bin/python build_sigil.py \
|
|
&& mkdir -p "/app/.venv/lib/python${PYTHON_VERSION}/site-packages/sigil" \
|
|
&& cp ./sigil/*.py ./sigil/_sigil.*.so "/app/.venv/lib/python${PYTHON_VERSION}/site-packages/sigil/" \
|
|
&& rm -rf /tmp/argosy-sigil
|
|
WORKDIR /app
|
|
|
|
# Copy entrypoint script
|
|
COPY entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
ENTRYPOINT ["/entrypoint.sh"]
|