From 8700fb8937d734f7d7b6bdbc92564226530bcf07 Mon Sep 17 00:00:00 2001 From: Debanjum Date: Sun, 8 Jun 2025 19:07:38 -0700 Subject: [PATCH] Use UV, Deno for faster setup of development container --- .devcontainer/Dockerfile | 26 +++++++++++++------------- .devcontainer/devcontainer.json | 7 +------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 641bf68b..895e3850 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,19 +1,19 @@ -ARG PYTHON_VERSION=3.10 +ARG PYTHON_VERSION=3.12 FROM mcr.microsoft.com/devcontainers/python:${PYTHON_VERSION} -# Install Node.js and Yarn -RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ - apt-get install -y nodejs +# Install UV and Deno +RUN curl -fsSL https://deno.land/install.sh | sh +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/.deno/bin:$PATH" # Setup working directory WORKDIR /workspace # --- Python Server App Dependencies --- -# Create Python virtual environment -RUN python3 -m venv /opt/venv -# Add venv to PATH for subsequent RUN commands and for the container environment -ENV PATH="/opt/venv/bin:${PATH}" - # Copy files required for Python dependency installation. COPY pyproject.toml README.md ./ @@ -26,15 +26,15 @@ ENV PIP_EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu" \ VERSION=0.0.0 # Install Python dependencies from pyproject.toml in editable mode RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml && \ - pip install --no-cache-dir ".[dev]" + uv sync --all-extras && \ + chown -R vscode:vscode /opt/venv # --- Web App Dependencies --- # Copy web app manifest files -COPY src/interface/web/package.json src/interface/web/yarn.lock /tmp/web/ +COPY src/interface/web/package.json src/interface/web/deno.json src/interface/web/deno.lock /tmp/web/ # Install web app dependencies -# note: yarn will be available from the "features" in devcontainer.json -RUN yarn install --cwd /tmp/web --cache-folder /opt/yarn-cache +RUN cd /tmp/web && deno install # 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/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index fa1cd1e3..eb060c8c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,7 +4,7 @@ "dockerfile": "Dockerfile", "context": "..", // Build context is the project root "args": { - "PYTHON_VERSION": "3.10" + "PYTHON_VERSION": "3.12" } }, "forwardPorts": [ @@ -53,11 +53,6 @@ "postCreateCommand": "scripts/dev_setup.sh --devcontainer", "features": { "ghcr.io/devcontainers/features/github-cli:1": {}, - "ghcr.io/devcontainers/features/node:1": { - "version": "lts", - "installYarnUsingApt": false, - "nodeGypDependencies": true - } }, "remoteUser": "vscode" }