mosaic / Dockerfile
raylim's picture
fix: add echo statement to force Docker layer rebuild
d005c63
FROM python:3.10-slim AS env-builder
# Install system build tools
RUN apt-get update && apt-get install -y \
build-essential \
curl \
git \
openssh-client \
&& rm -rf /var/lib/apt/lists/*
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
# Copy project files (including .git for faster HF Spaces dev)
# CACHE BUST: 2026-02-10 - Added setuptools to fix pkg_resources import
COPY pyproject.toml README.md ./
COPY .git/ ./.git/
COPY src/ ./src/
COPY data/*.csv data/metadata/ ./data/
# Create venv and install with dependencies using SSH or GH_TOKEN secret
# SSH requires actual keys in the agent (ssh-add -l), fallback to GH_TOKEN
# IMPORTANT: setuptools must be installed for pkg_resources (required by pytorch_lightning)
RUN --mount=type=ssh \
--mount=type=secret,id=GH_TOKEN \
uv venv && \
mkdir -p ~/.ssh && \
echo "github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl" >> ~/.ssh/known_hosts && \
echo "github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=" >> ~/.ssh/known_hosts && \
echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA1lW2R0dG8iB4Mf/p2hEQkMB/6EZHgqHwSLtxAzJPUhZDKkVLCXrF4mKEMEb0Cxl3lqbC3y4B5rBqR8YN/wOvBJlpYmJ9qG0w/xS0w9j8rFr6T8CRvNfQC9VJ7B7sPqrPB0nOmNJ7s9OZQBHVSqDmvTTmCqtQmjWCVvHpq0gCppQprEjL7PpCMdR9PbJtNJ7r9pXNvTQGEvQ1aHrCNSTYkqKhJjQJRBRMWJqDYg8=" >> ~/.ssh/known_hosts && \
if ([ -S "/run/buildkit/ssh_agent.sock" ] || [ -n "$SSH_AUTH_SOCK" ]) && ssh-add -l >/dev/null 2>&1; then \
echo "Using SSH authentication for private repos"; \
elif [ -f /run/secrets/GH_TOKEN ]; then \
echo "Using GH_TOKEN authentication for private repos" && \
export GH_TOKEN=$(cat /run/secrets/GH_TOKEN) && \
sed -i "s|ssh://git@github.com/|https://${GH_TOKEN}@github.com/|g" pyproject.toml; \
else \
echo "Warning: No authentication method found - private repo access may fail"; \
fi && \
echo "Installing dependencies (including setuptools for pkg_resources)..." && \
uv pip install -e . && \
git checkout -- pyproject.toml 2>/dev/null || true
# Create non-root user for runtime
RUN useradd -m -u 1000 user && \
chown -R user:user /app
USER user
ENV PATH="/app/.venv/bin:$PATH"
# Set OMP_NUM_THREADS to a safe default to avoid libgomp errors
ENV OMP_NUM_THREADS=4
EXPOSE 7860
# Use mosaic CLI command which runs gradio_app:main (skips runtime pip install)
CMD ["mosaic"]