From 80cce7b4399f9e2948a2aefad4d6d7cb7d0212b5 Mon Sep 17 00:00:00 2001 From: Debanjum Date: Fri, 1 Aug 2025 18:31:25 -0700 Subject: [PATCH] Fix server, web app to reuse prebuilt deps on dev container setup --- .devcontainer/Dockerfile | 25 +++++++++++++++++-------- scripts/dev_setup.sh | 29 ++++++++--------------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index c07398e1..58d20853 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -2,16 +2,19 @@ ARG PYTHON_VERSION=3.12 FROM mcr.microsoft.com/devcontainers/python:${PYTHON_VERSION} # Install UV and Bun -RUN curl -fsSL https://bun.sh/install | bash +RUN curl -fsSL https://bun.sh/install | bash && mv /root/.bun/bin/bun /usr/local/bin/bun COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ RUN uv python pin $PYTHON_VERSION # create python virtual environment RUN uv venv /opt/venv --python $PYTHON_VERSION --seed -# Add venv, deno to PATH for subsequent RUN commands and for the container environment -ENV PATH="/opt/venv/bin:/root/.bun/bin:$PATH" +# Add venv to PATH for subsequent RUN commands and for the container environment +ENV PATH="/opt/venv/bin:$PATH" +# Tell pip, uv to use this virtual environment +ENV VIRTUAL_ENV="/opt/venv" +ENV UV_PROJECT_ENVIRONMENT="/opt/venv" # Setup working directory -WORKDIR /workspace +WORKDIR /workspaces/khoj # --- Python Server App Dependencies --- # Copy files required for Python dependency installation. @@ -19,22 +22,28 @@ COPY pyproject.toml README.md ./ # Setup python environment # Use the pre-built torch cpu wheel -ENV PIP_EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu" \ +ENV UV_INDEX="https://download.pytorch.org/whl/cpu" \ + UV_INDEX_STRATEGY="unsafe-best-match" \ # Avoid downloading unused cuda specific python packages CUDA_VISIBLE_DEVICES="" \ # Use static version to build app without git dependency - VERSION=0.0.0 + VERSION=0.0.0 \ + # Use embedded db + USE_EMBEDDED_DB="True" \ + PGSERVER_DATA_DIR="/opt/khoj_db" # Install Python dependencies from pyproject.toml in editable mode RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml && \ uv sync --all-extras && \ + # Save the lock file generated with correct Linux platform wheels + cp uv.lock /opt/uv.lock.linux && \ chown -R vscode:vscode /opt/venv # --- Web App Dependencies --- # Copy web app manifest files -COPY src/interface/web/package.json src/interface/web/bun.lock /tmp/web/ +COPY src/interface/web/package.json src/interface/web/bun.lock /opt/khoj_web/ # Install web app dependencies -RUN cd /tmp/web && bun install +RUN cd /opt/khoj_web && bun install && chown -R vscode:vscode . # The .venv and node_modules are now populated in the image. # The rest of the source code will be mounted by VS Code from your local checkout, diff --git a/scripts/dev_setup.sh b/scripts/dev_setup.sh index 36019e20..937638cd 100755 --- a/scripts/dev_setup.sh +++ b/scripts/dev_setup.sh @@ -24,30 +24,17 @@ if [ "$DEVCONTAINER" = true ]; then # Use devcontainer launch.json mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json - # Activate the pre-installed venv (no need to create new one) - echo "Using Python environment at /opt/venv" - # PATH should already include /opt/venv/bin from Dockerfile - - # Install khoj in editable mode (dependencies already installed) - # Use uv if available, else fall back to pipx - if command -v uv &> /dev/null - then - uv sync --all-extras - else - python3 -m pip install -e '.[dev]' - fi + # Install Server App using pre-installed dependencies + echo "Setup Server App with UV. Use pre-installed dependencies in $UV_PROJECT_ENVIRONMENT." + sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml + cp /opt/uv.lock.linux uv.lock + uv sync --all-extras # Install Web App using cached dependencies - echo "Installing Web App using cached dependencies..." + echo "Setup Web App with Bun. Use pre-installed dependencies in /opt/khoj_web." cd "$PROJECT_ROOT/src/interface/web" - if command -v bun &> /dev/null - then - echo "using Bun." - bun install && bun run ciexport - else - echo "using Yarn." - yarn install && yarn ciexport - fi + ln -sf /opt/khoj_web/node_modules node_modules + bun install && bun run ciexport else # Standard setup echo "Installing Server App..."