| # Dockerfile for the Hugging Face Spaces deployment of the Scientific | |
| # Contribution Graph Explorer. When you copy this to a Space, rename it | |
| # to `Dockerfile` (no extension). | |
| # | |
| # Build context expects this layout in the Space: | |
| # Dockerfile | |
| # demo.py (the single-file FastAPI app) | |
| # demo_config.json (renamed from demo_huggingface_demo_config.json) | |
| # requirements.txt (renamed from demo_huggingface_requirements.txt) | |
| # README.md (renamed from demo_huggingface_README.md, keep frontmatter) | |
| FROM python:3.11-slim | |
| # Graphviz is needed for the tree / tree-with-edges layouts. | |
| RUN apt-get update \ | |
| && apt-get install -y --no-install-recommends graphviz git ca-certificates \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # HF Spaces sets HOME to /home/user; we follow the standard recipe. | |
| RUN useradd -m -u 1000 user | |
| # Pre-create /data so it works whether or not HF Persistent Storage is | |
| # attached. When Persistent Storage is enabled it is mounted at /data | |
| # and survives restarts; otherwise /data is just an empty in-container | |
| # directory that gets wiped each cold boot (and the 7 GB tarball will | |
| # be re-fetched on the next wake). | |
| RUN mkdir -p /data && chown user:user /data | |
| USER user | |
| ENV HOME=/home/user \ | |
| PATH=/home/user/.local/bin:$PATH \ | |
| PYTHONUNBUFFERED=1 \ | |
| HF_XET_HIGH_PERFORMANCE=1 | |
| WORKDIR $HOME/app | |
| COPY --chown=user requirements.txt ./ | |
| RUN pip install --user --no-cache-dir -r requirements.txt | |
| COPY --chown=user demo.py demo_config.json ./ | |
| EXPOSE 7860 | |
| # `demo.py` reads `demo_config.json` next to it on startup (data_path, | |
| # bucket_uri, host, port). Override any field via env vars (SCG_DATA_PATH, | |
| # SCG_BUCKET_URI, ...) or CLI flags if needed. | |
| CMD ["python", "demo.py"] | |