File size: 2,789 Bytes
78d4aa4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Use Python 3.12 slim
FROM python:3.12-slim

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    make \
    g++ \
    wget \
    curl \
    xz-utils \
    findutils \
    && rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /app

# Copy ALL files from the repository
COPY . .

# ============================================================
# CUSTOM DEEPCASTLE ENGINE BUILD
# Supports both repo layouts:
# 1) /app/engine/src (full repo)
# 2) /app/src        (HF minimal repo)
# ============================================================
RUN if [ -d /app/engine/src ]; then BUILD_DIR=/app/engine/src; \
    elif [ -d /app/src ]; then BUILD_DIR=/app/src; \
    else echo "Engine source dir not found"; exit 1; fi && \
    cd "$BUILD_DIR" && \
    wget -q -O nn-9a0cc2a62c52.nnue https://tests.stockfishchess.org/api/nn/nn-9a0cc2a62c52.nnue && \
    wget -q -O nn-47fc8b7fff06.nnue https://tests.stockfishchess.org/api/nn/nn-47fc8b7fff06.nnue && \
    if [ ! -f ../scripts/net.sh ]; then \
      mkdir -p ../scripts; \
      printf '#!/bin/sh\n# HF minimal layout fallback: skip default net fetch\nexit 0\n' > ../scripts/net.sh; \
      chmod +x ../scripts/net.sh; \
    fi && \
    make -j2 build ARCH=x86-64 && \
    mkdir -p /app/engine_bin && \
    cp stockfish /app/engine_bin/deepcastle && \
    chmod +x /app/engine_bin/deepcastle

# ============================================================
# LAUNCHER PREPARATION
# ============================================================
WORKDIR /app
RUN LAUNCHER_PATH=$(find /app -name "main.py" | head -n 1) && \
    cp "$LAUNCHER_PATH" /app/launcher.py

# ============================================================
# BRAIN PLACEMENT
# ============================================================
# Map your custom brains for the server
RUN if [ -f /app/output.nnue ]; then cp /app/output.nnue /app/engine_bin/output.nnue; fi && \
    if [ -f /app/small_output.nnue ]; then cp /app/small_output.nnue /app/engine_bin/small_output.nnue; fi

# Force permissions
RUN chmod -R 777 /app/engine_bin

# ============================================================
# BACKEND SETUP
# ============================================================
RUN if [ -f /app/server/requirements.txt ]; then \
      pip install --no-cache-dir -r /app/server/requirements.txt; \
    else \
      pip install --no-cache-dir fastapi "uvicorn[standard]" websockets python-chess pydantic psutil; \
    fi

# Explicit Paths
ENV ENGINE_PATH=/app/engine_bin/deepcastle
ENV DEEPCASTLE_ENGINE_PATH=/app/engine_bin/deepcastle
ENV NNUE_PATH=/app/engine_bin/output.nnue
ENV NNUE_SMALL_PATH=/app/engine_bin/small_output.nnue
ENV PYTHONPATH="/app:/app/server"

EXPOSE 7860

# START
CMD ["python3", "/app/launcher.py"]