| FROM python:3.12-slim@sha256:c3d81d25b3154142b0b42eb1e61300024426268edeb5b5a26dd7ddf64d9daf28 |
|
|
| ENV DEBIAN_FRONTEND=noninteractive |
|
|
| RUN apt-get update \ |
| && apt-get install -y --no-install-recommends \ |
| bash \ |
| ca-certificates \ |
| coreutils \ |
| curl \ |
| file \ |
| findutils \ |
| jq \ |
| less \ |
| poppler-utils \ |
| ripgrep \ |
| unzip \ |
| zip \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| RUN pip install --no-cache-dir \ |
| openpyxl==3.1.5 \ |
| pandas==3.0.3 \ |
| pdfplumber==0.11.10 \ |
| pypdf==6.14.2 \ |
| pytest==8.3.4 \ |
| python-docx==1.2.0 \ |
| python-pptx==1.0.2 \ |
| pyyaml==6.0.2 \ |
| reportlab==5.0.0 |
|
|
| ENV NVM_DIR=/root/.nvm |
| ENV NODE_VERSION=22.23.1 |
|
|
| SHELL ["/bin/bash", "-o", "pipefail", "-c"] |
|
|
| RUN curl -fsSL --retry 5 --retry-delay 2 \ |
| https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh \ |
| | bash \ |
| && source "$NVM_DIR/nvm.sh" \ |
| && nvm install "$NODE_VERSION" \ |
| && nvm alias default "$NODE_VERSION" \ |
| && nvm use "$NODE_VERSION" \ |
| && npm install -g openclaw@2026.7.1 \ |
| --fetch-retries=5 \ |
| --fetch-retry-mintimeout=20000 \ |
| --fetch-retry-maxtimeout=120000 \ |
| && npm cache clean --force |
|
|
| ENV PATH=/root/.nvm/versions/node/v22.23.1/bin:${PATH} |
|
|
| RUN source "$NVM_DIR/nvm.sh" \ |
| && nvm use 22 \ |
| && test "$(node --version)" = "v22.23.1" \ |
| && npm list -g openclaw@2026.7.1 --depth=0 \ |
| && openclaw --version | grep -Eq '(^| )2026\.7\.1($| )' |
|
|
| RUN printf '%s\n' '#!/bin/sh' 'exec python /app/tools/xlsx_dump.py "$@"' \ |
| > /usr/local/bin/xlsx-dump \ |
| && chmod +x /usr/local/bin/xlsx-dump \ |
| && ln -s /app/pdf_text_extract.py /usr/local/bin/pdf_text_extract.py \ |
| && ln -s /app/baseline_manifest.txt /opt/baseline_manifest.txt \ |
| && mkdir -p /app/data /app/output |
|
|
| WORKDIR /app |
|
|
| CMD ["python", "-m", "http.server", "7860", "--bind", "0.0.0.0"] |
|
|