Try pre-install deps, use custom launch.json for dev container

Previous attempts have not been sufficient. Let's see if this works
This commit is contained in:
Debanjum
2025-06-03 04:57:00 -07:00
parent 29b973e748
commit 63a1a8e91f
4 changed files with 67 additions and 45 deletions

View File

@@ -10,9 +10,9 @@ WORKDIR /workspace
# --- Python Server App Dependencies --- # --- Python Server App Dependencies ---
# Create Python virtual environment # Create Python virtual environment
RUN python3 -m venv .venv RUN python3 -m venv /opt/venv
# Add venv to PATH for subsequent RUN commands and for the container environment # Add venv to PATH for subsequent RUN commands and for the container environment
ENV PATH="/workspace/.venv/bin:${PATH}" ENV PATH="/opt/venv/bin:${PATH}"
# Copy files required for Python dependency installation. # Copy files required for Python dependency installation.
COPY pyproject.toml README.md ./ COPY pyproject.toml README.md ./
@@ -30,11 +30,11 @@ RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.tom
# --- Web App Dependencies --- # --- Web App Dependencies ---
# Copy web app manifest files # Copy web app manifest files
COPY src/interface/web/package.json src/interface/web/yarn.lock ./src/interface/web/ COPY src/interface/web/package.json src/interface/web/yarn.lock /tmp/web/
# Install web app dependencies # Install web app dependencies
# note: yarn will be available from the "features" in devcontainer.json # note: yarn will be available from the "features" in devcontainer.json
RUN yarn install --cwd ./src/interface/web RUN yarn install --cwd /tmp/web --cache-folder /opt/yarn-cache
# The .venv and node_modules are now populated in the image. # 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, # The rest of the source code will be mounted by VS Code from your local checkout,

View File

@@ -29,7 +29,7 @@
"unifiedjs.vscode-mdx" "unifiedjs.vscode-mdx"
], ],
"settings": { "settings": {
"python.defaultInterpreterPath": "/workspace/.venv/bin/python", "python.defaultInterpreterPath": "/opt/venv/bin/python",
"python.formatting.provider": "black", "python.formatting.provider": "black",
"python.linting.enabled": true, "python.linting.enabled": true,
"python.linting.mypyEnabled": true, "python.linting.mypyEnabled": true,
@@ -47,38 +47,10 @@
], ],
"python.testing.unittestEnabled": false, "python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true, "python.testing.pytestEnabled": true,
"launch": {
"configurations": [
{
"name": "Launch Khoj",
"type": "debugpy",
"request": "launch",
"module": "src.khoj.main",
"console": "integratedTerminal",
"justMyCode": false,
"sudo": true,
"args": [
"-v",
"--anonymous-mode",
"--non-interactive",
"--port=42110"
],
"envFile": "${workspaceFolder}/.env",
"env": {
"KHOJ_ADMIN_EMAIL": "admin",
"KHOJ_ADMIN_PASSWORD": "admin",
"USE_EMBEDDED_DB": "true",
"KHOJ_DEBUG": "true",
"KHOJ_TELEMETRY_DISABLED": "true",
"PROMPTRACE_DIR": "${workspaceFolder}/promptrace"
}
}
]
}
} }
} }
}, },
"postCreateCommand": "scripts/dev_setup.sh", "postCreateCommand": "scripts/dev_setup.sh --devcontainer",
"features": { "features": {
"ghcr.io/devcontainers/features/github-cli:1": {}, "ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/node:1": { "ghcr.io/devcontainers/features/node:1": {

29
.devcontainer/launch.json Normal file
View File

@@ -0,0 +1,29 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Khoj",
"type": "debugpy",
"request": "launch",
"module": "src.khoj.main",
"console": "integratedTerminal",
"justMyCode": false,
"sudo": true,
"args": [
"-v",
"--anonymous-mode",
"--non-interactive",
"--port=42110"
],
"envFile": "${workspaceFolder}/.env",
"env": {
"KHOJ_ADMIN_EMAIL": "admin",
"KHOJ_ADMIN_PASSWORD": "admin",
"USE_EMBEDDED_DB": "true",
"KHOJ_DEBUG": "true",
"KHOJ_TELEMETRY_DISABLED": "true",
"PROMPTRACE_DIR": "${workspaceFolder}/promptrace"
}
}
]
}

View File

@@ -4,26 +4,47 @@ PROJECT_ROOT=$(git rev-parse --show-toplevel)
# Default to minimal installation unless --full flag passed # Default to minimal installation unless --full flag passed
INSTALL_FULL=false INSTALL_FULL=false
DEVCONTAINER=false
for arg in "$@" for arg in "$@"
do do
if [ "$arg" == "--full" ] if [ "$arg" == "--full" ]
then then
INSTALL_FULL=true INSTALL_FULL=true
fi fi
if [ "$arg" == "--devcontainer" ]
then
DEVCONTAINER=true
fi
done done
# Install Server App if [ "$DEVCONTAINER" = true ]; then
# --- echo "Dev container setup - using pre-installed dependencies..."
echo "Installing Server App..." cd "$PROJECT_ROOT"
cd $PROJECT_ROOT
# pip install --user pipenv && pipenv install -e '.[dev]' --skip-lock && pipenv shell
python3 -m venv .venv && . .venv/bin/activate && python3 -m pip install -e '.[dev]'
# Install Web App # Use devcontainer launch.json
# --- mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json
echo "Installing Web App..."
cd $PROJECT_ROOT/src/interface/web # Activate the pre-installed venv (no need to create new one)
yarn install && yarn export echo "Using Python environment at /opt/venv"
# PATH should already include /opt/venv/bin from Dockerfile
# Install khoj in editable mode (dependencies already installed)
python3 -m pip install -e '.[dev]'
# Install Web App using cached dependencies
echo "Installing Web App using cached dependencies..."
cd "$PROJECT_ROOT/src/interface/web"
yarn install --cache-folder /opt/yarn-cache && yarn export
else
# Standard setup
echo "Installing Server App..."
cd "$PROJECT_ROOT"
python3 -m venv .venv && . .venv/bin/activate && python3 -m pip install -e '.[dev]'
echo "Installing Web App..."
cd "$PROJECT_ROOT/src/interface/web"
yarn install && yarn export
fi
# Install Obsidian App # Install Obsidian App
# --- # ---