mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-09 21:29:11 +00:00
Switch to Bun instead of Deno (or Yarn) for faster web app builds
This commit is contained in:
@@ -1,14 +1,14 @@
|
|||||||
ARG PYTHON_VERSION=3.12
|
ARG PYTHON_VERSION=3.12
|
||||||
FROM mcr.microsoft.com/devcontainers/python:${PYTHON_VERSION}
|
FROM mcr.microsoft.com/devcontainers/python:${PYTHON_VERSION}
|
||||||
|
|
||||||
# Install UV and Deno
|
# Install UV and Bun
|
||||||
RUN curl -fsSL https://deno.land/install.sh | sh
|
RUN curl -fsSL https://bun.sh/install | bash
|
||||||
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
||||||
RUN uv python pin $PYTHON_VERSION
|
RUN uv python pin $PYTHON_VERSION
|
||||||
# create python virtual environment
|
# create python virtual environment
|
||||||
RUN uv venv /opt/venv --python $PYTHON_VERSION --seed
|
RUN uv venv /opt/venv --python $PYTHON_VERSION --seed
|
||||||
# Add venv, deno to PATH for subsequent RUN commands and for the container environment
|
# Add venv, deno to PATH for subsequent RUN commands and for the container environment
|
||||||
ENV PATH="/opt/venv/bin:/root/.deno/bin:$PATH"
|
ENV PATH="/opt/venv/bin:/root/.bun/bin:$PATH"
|
||||||
|
|
||||||
# Setup working directory
|
# Setup working directory
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
@@ -31,10 +31,10 @@ 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/deno.json src/interface/web/deno.lock /tmp/web/
|
COPY src/interface/web/package.json src/interface/web/bun.lock /tmp/web/
|
||||||
|
|
||||||
# Install web app dependencies
|
# Install web app dependencies
|
||||||
RUN cd /tmp/web && deno install
|
RUN cd /tmp/web && bun install
|
||||||
|
|
||||||
# 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,
|
||||||
|
|||||||
2
.github/workflows/pre-commit.yml
vendored
2
.github/workflows/pre-commit.yml
vendored
@@ -51,4 +51,4 @@ jobs:
|
|||||||
run: uv sync --all-extras
|
run: uv sync --all-extras
|
||||||
|
|
||||||
- name: 🌡️ Validate Application
|
- name: 🌡️ Validate Application
|
||||||
run: pre-commit run --hook-stage manual --all
|
run: uv run pre-commit run --hook-stage manual --all
|
||||||
|
|||||||
16
.github/workflows/pypi.yml
vendored
16
.github/workflows/pypi.yml
vendored
@@ -40,22 +40,22 @@ jobs:
|
|||||||
version: "latest"
|
version: "latest"
|
||||||
|
|
||||||
- name: Set up Python 3.11
|
- name: Set up Python 3.11
|
||||||
run: uv python install 3.11
|
run: uv python install 3.11.12
|
||||||
|
|
||||||
- name: ⬇️ Install Server
|
- name: ⬇️ Install Server
|
||||||
run: uv sync --all-extras
|
run: uv sync --all-extras
|
||||||
|
|
||||||
|
- name: Install bun
|
||||||
|
uses: oven-sh/setup-bun@v2
|
||||||
|
with:
|
||||||
|
bun-version: latest
|
||||||
|
|
||||||
- name: ⬇️ Install Web Client
|
- name: ⬇️ Install Web Client
|
||||||
run: |
|
run: |
|
||||||
yarn install
|
bun install
|
||||||
yarn pypiciexport
|
bun pypiciexport
|
||||||
working-directory: src/interface/web
|
working-directory: src/interface/web
|
||||||
|
|
||||||
- name: 📂 Copy Generated Files
|
|
||||||
run: |
|
|
||||||
mkdir -p src/khoj/interface/compiled
|
|
||||||
cp -r $(uv python find-python 3.11)/lib/python3.11/site-packages/khoj/interface/compiled/* src/khoj/interface/compiled/
|
|
||||||
|
|
||||||
- name: ⚙️ Build Python Package
|
- name: ⚙️ Build Python Package
|
||||||
run: |
|
run: |
|
||||||
# Setup Environment for Reproducible Builds
|
# Setup Environment for Reproducible Builds
|
||||||
|
|||||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -88,5 +88,5 @@ jobs:
|
|||||||
POSTGRES_PASSWORD: postgres
|
POSTGRES_PASSWORD: postgres
|
||||||
POSTGRES_DB: postgres
|
POSTGRES_DB: postgres
|
||||||
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
||||||
run: pytest
|
run: uv run pytest
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
|
|||||||
@@ -35,17 +35,17 @@ RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.tom
|
|||||||
pip install --no-cache-dir .
|
pip install --no-cache-dir .
|
||||||
|
|
||||||
# Build Web App
|
# Build Web App
|
||||||
FROM node:23-alpine AS web-app
|
FROM oven/bun:1-alpine AS web-app
|
||||||
# Set build optimization env vars
|
# Set build optimization env vars
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
WORKDIR /app/src/interface/web
|
WORKDIR /app/src/interface/web
|
||||||
# Install dependencies first (cache layer)
|
# Install dependencies first (cache layer)
|
||||||
COPY src/interface/web/package.json src/interface/web/yarn.lock ./
|
COPY src/interface/web/package.json src/interface/web/bun.lock ./
|
||||||
RUN yarn install --frozen-lockfile
|
RUN bun install --frozen-lockfile
|
||||||
# Copy source and build
|
# Copy source and build
|
||||||
COPY src/interface/web/. ./
|
COPY src/interface/web/. ./
|
||||||
RUN yarn build
|
RUN bun run build
|
||||||
|
|
||||||
# Merge the Server and Web App into a Single Image
|
# Merge the Server and Web App into a Single Image
|
||||||
FROM base
|
FROM base
|
||||||
|
|||||||
@@ -34,17 +34,17 @@ RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.tom
|
|||||||
pip install --no-cache-dir -e .[prod]
|
pip install --no-cache-dir -e .[prod]
|
||||||
|
|
||||||
# Build Web App
|
# Build Web App
|
||||||
FROM node:20-alpine AS web-app
|
FROM oven/bun:1-alpine AS web-app
|
||||||
# Set build optimization env vars
|
# Set build optimization env vars
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV NEXT_TELEMETRY_DISABLED=1
|
ENV NEXT_TELEMETRY_DISABLED=1
|
||||||
WORKDIR /app/src/interface/web
|
WORKDIR /app/src/interface/web
|
||||||
# Install dependencies first (cache layer)
|
# Install dependencies first (cache layer)
|
||||||
COPY src/interface/web/package.json src/interface/web/yarn.lock ./
|
COPY src/interface/web/package.json src/interface/web/bun.lock ./
|
||||||
RUN yarn install --frozen-lockfile
|
RUN bun install --frozen-lockfile
|
||||||
# Copy source and build
|
# Copy source and build
|
||||||
COPY src/interface/web/. ./
|
COPY src/interface/web/. ./
|
||||||
RUN yarn build
|
RUN bun run build
|
||||||
|
|
||||||
# Merge the Server and Web App into a Single Image
|
# Merge the Server and Web App into a Single Image
|
||||||
FROM base
|
FROM base
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ if [ "$DEVCONTAINER" = true ]; then
|
|||||||
# Install Web App using cached dependencies
|
# Install Web App using cached dependencies
|
||||||
echo "Installing Web App using cached dependencies..."
|
echo "Installing Web App using cached dependencies..."
|
||||||
cd "$PROJECT_ROOT/src/interface/web"
|
cd "$PROJECT_ROOT/src/interface/web"
|
||||||
if command -v deno &> /dev/null
|
if command -v bun &> /dev/null
|
||||||
then
|
then
|
||||||
echo "using Deno."
|
echo "using Bun."
|
||||||
deno install && deno run ciexport
|
bun install && bun run ciexport
|
||||||
else
|
else
|
||||||
echo "using Yarn."
|
echo "using Yarn."
|
||||||
yarn install && yarn ciexport
|
yarn install && yarn ciexport
|
||||||
@@ -63,10 +63,10 @@ else
|
|||||||
|
|
||||||
echo "Installing Web App..."
|
echo "Installing Web App..."
|
||||||
cd "$PROJECT_ROOT/src/interface/web"
|
cd "$PROJECT_ROOT/src/interface/web"
|
||||||
if command -v deno &> /dev/null
|
if command -v bun &> /dev/null
|
||||||
then
|
then
|
||||||
echo "using Deno."
|
echo "using Bun."
|
||||||
deno install && deno run export
|
bun install && bun run export
|
||||||
else
|
else
|
||||||
echo "using Yarn."
|
echo "using Yarn."
|
||||||
yarn install && yarn export
|
yarn install && yarn export
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
yarn run lint-staged
|
bun run lint-staged
|
||||||
yarn test
|
bun run test
|
||||||
|
|||||||
@@ -5,19 +5,19 @@ This is a [Next.js](https://nextjs.org/) project.
|
|||||||
First, install the dependencies:
|
First, install the dependencies:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn install
|
bun install
|
||||||
```
|
```
|
||||||
|
|
||||||
In case you run into any dependency linking issues, you can try running:
|
In case you run into any dependency linking issues, you can try running:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn add next
|
bun add next
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run the development server:
|
### Run the development server:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn dev
|
bun dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Make sure the `rewrites` in `next.config.mjs` are set up correctly for your environment. The rewrites are used to proxy requests to the API server.
|
Make sure the `rewrites` in `next.config.mjs` are set up correctly for your environment. The rewrites are used to proxy requests to the API server.
|
||||||
@@ -44,27 +44,30 @@ You can start editing the page by modifying any of the `.tsx` pages. The page au
|
|||||||
We've setup a utility command for building and serving the built files. This is useful for testing the production build locally.
|
We've setup a utility command for building and serving the built files. This is useful for testing the production build locally.
|
||||||
|
|
||||||
1. Exporting code
|
1. Exporting code
|
||||||
To build the files once and serve them, run:
|
To build the files once and serve them, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn export
|
bun export
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're using Windows:
|
If you're using Windows:
|
||||||
```bash
|
|
||||||
yarn windowsexport
|
|
||||||
```
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun windowsexport
|
||||||
|
```
|
||||||
|
|
||||||
2. Continuously building code
|
2. Continuously building code
|
||||||
|
|
||||||
To keep building the files and serving them, run:
|
To keep building the files and serving them, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn watch
|
bun watch
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're using Windows:
|
If you're using Windows:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn windowswatch
|
bun windowswatch
|
||||||
```
|
```
|
||||||
|
|
||||||
Now you should be able to load your custom pages from the Khoj app at http://localhost:42110/. To server any of the built files, you should update the routes in the `web_client.py` like so, where `new_file` is the new page you've added in this repo:
|
Now you should be able to load your custom pages from the Khoj app at http://localhost:42110/. To server any of the built files, you should update the routes in the `web_client.py` like so, where `new_file` is the new page you've added in this repo:
|
||||||
|
|||||||
1568
src/interface/web/bun.lock
Normal file
1568
src/interface/web/bun.lock
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"tasks": {
|
|
||||||
"hook": "deno run --allow-read --allow-run --allow-write https://deno.land/x/deno_hooks@0.1.1/mod.ts"
|
|
||||||
},
|
|
||||||
"fmt": {
|
|
||||||
"indentWidth": 4,
|
|
||||||
"lineWidth": 100,
|
|
||||||
"proseWrap": "preserve"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
5251
src/interface/web/deno.lock
generated
5251
src/interface/web/deno.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -6,16 +6,16 @@
|
|||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"lint": "deno fmt",
|
"lint": "next lint",
|
||||||
"collectstatic": "bash -c 'pushd ../../../ && source .venv/bin/activate && python3 src/khoj/manage.py collectstatic --noinput && deactivate && popd'",
|
"collectstatic": "bash -c 'pushd ../../../ && source .venv/bin/activate && python3 src/khoj/manage.py collectstatic --noinput && deactivate && popd'",
|
||||||
"cicollectstatic": "bash -c 'pushd ../../../ && python3 src/khoj/manage.py collectstatic --noinput && popd'",
|
"cicollectstatic": "bash -c 'pushd ../../../ && uv run python src/khoj/manage.py collectstatic --noinput && popd'",
|
||||||
"export": "yarn build && cp -r out/ ../../khoj/interface/built && yarn collectstatic",
|
"export": "bun run build && cp -r out/ ../../khoj/interface/built && bun run collectstatic",
|
||||||
"ciexport": "yarn build && cp -r out/ ../../khoj/interface/built && yarn cicollectstatic",
|
"ciexport": "bun run build && cp -r out/ ../../khoj/interface/built && bun run cicollectstatic",
|
||||||
"pypiciexport": "yarn build && cp -r out/ /opt/hostedtoolcache/Python/3.11.12/x64/lib/python3.11/site-packages/khoj/interface/compiled && yarn cicollectstatic",
|
"pypiciexport": "bun run build && mkdir -p ../../khoj/interface/compiled && cp -r out/. ../../khoj/interface/compiled && bun run cicollectstatic",
|
||||||
"watch": "nodemon --watch . --ext js,jsx,ts,tsx,css --ignore 'out/**/*' --exec 'yarn export'",
|
"watch": "nodemon --watch . --ext js,jsx,ts,tsx,css --ignore 'out/**/*' --exec 'bun run export'",
|
||||||
"windowswatch": "nodemon --watch . --ext js,jsx,ts,tsx,css --ignore 'out/**/*' --exec 'yarn windowsexport'",
|
"windowswatch": "nodemon --watch . --ext js,jsx,ts,tsx,css --ignore 'out/**/*' --exec 'bun run windowsexport'",
|
||||||
"windowscollectstatic": "cd ..\\..\\.. && .\\.venv\\Scripts\\Activate.bat && py .\\src\\khoj\\manage.py collectstatic --noinput && .\\.venv\\Scripts\\deactivate.bat && cd ..",
|
"windowscollectstatic": "cd ..\\..\\.. && .\\.venv\\Scripts\\Activate.bat && py .\\src\\khoj\\manage.py collectstatic --noinput && .\\.venv\\Scripts\\deactivate.bat && cd ..",
|
||||||
"windowsexport": "yarn build && xcopy out ..\\..\\khoj\\interface\\built /E /Y && yarn windowscollectstatic",
|
"windowsexport": "bun run build && xcopy out ..\\..\\khoj\\interface\\built /E /Y && bun run windowscollectstatic",
|
||||||
"prepare": "husky"
|
"prepare": "husky"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -100,6 +100,6 @@
|
|||||||
"printWidth": 100
|
"printWidth": 100
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*": "yarn lint --fix"
|
"*": "bun run lint"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user