From 585bb55c8bc583acb3af9db946595681029c67d6 Mon Sep 17 00:00:00 2001 From: amianthus <49116958+SirTenzin@users.noreply.github.com> Date: Sat, 19 Jul 2025 14:26:12 +0100 Subject: [PATCH] =?UTF-8?q?perf:=20=E2=9A=A1=EF=B8=8F=20introduce=20bun=20?= =?UTF-8?q?runtime=20in=20dockerfiles=20and=20package.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.dev.yml | 2 +- docker-compose.prod.yml | 4 +--- docker/dev.dockerfile | 23 +++++++++-------------- docker/prod.dockerfile | 23 +++++++++++------------ localtunnel-start.sh | 2 +- package.json | 7 +++++++ server/package.json | 6 ++++++ server/tsconfig.build.json | 2 +- shared/package.json | 1 + vite/package.json | 1 + 10 files changed, 39 insertions(+), 32 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 4b5260375..2e7491b67 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -95,7 +95,7 @@ services: # Run localtunnel localtunnel: - image: node:20-alpine + image: oven/bun:latest build: dockerfile: docker/dev.dockerfile context: . diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 3f634710f..6fb796a6d 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -32,14 +32,12 @@ services: context: . dockerfile: docker/prod.dockerfile target: server-prod - volumes: - - ./server:/app/server ports: - "8080:8080" restart: always localtunnel: - image: node:20-alpine + image: oven/bun:latest build: dockerfile: docker/prod.dockerfile context: . diff --git a/docker/dev.dockerfile b/docker/dev.dockerfile index 7ca2c9f00..2ade6a100 100644 --- a/docker/dev.dockerfile +++ b/docker/dev.dockerfile @@ -1,23 +1,19 @@ # Multi-stage Dockerfile for Autumn development -FROM node:22-alpine AS base +FROM oven/bun:latest AS base WORKDIR /app -RUN npm install -g pnpm - # Skip Puppeteer Chromium download to speed up install ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_SKIP_DOWNLOAD=true -COPY package*.json ./ -COPY pnpm-workspace.yaml ./ -COPY pnpm-lock.yaml ./ +COPY package.json ./ +COPY bun.lockb ./ COPY shared/package*.json ./shared/ COPY server/package*.json ./server/ COPY vite/package*.json ./vite/ -RUN pnpm install --frozen-lockfile -RUN npm install -g nodemon tsx +RUN bun install # Stage 1: /localtunnel FROM base AS localtunnel @@ -29,26 +25,25 @@ CMD ["sh", "localtunnel-start.sh"] FROM base AS shared COPY shared/ ./shared/ WORKDIR /app/shared -RUN pnpm run build -CMD ["pnpm", "run", "dev"] +RUN bun run build +CMD ["bun", "run", "dev:bun"] # Stage 3: /vite FROM base AS vite WORKDIR /app/vite COPY vite/ ./ EXPOSE 3000 -CMD ["pnpm", "run", "dev"] +CMD ["bun", "run", "dev"] # Stage 4: /server FROM base AS server COPY server/ ./server/ WORKDIR /app/server EXPOSE 8080 -CMD ["pnpm", "run", "dev"] +CMD ["bun", "run", "dev:bun"] # Stage 5: Workers FROM base AS workers COPY server/ ./server/ WORKDIR /app/server -# RUN pnpm install -CMD ["pnpm", "run", "workers"] \ No newline at end of file +CMD ["bun", "run", "workers:bun"] \ No newline at end of file diff --git a/docker/prod.dockerfile b/docker/prod.dockerfile index f063f1473..a7dad8532 100644 --- a/docker/prod.dockerfile +++ b/docker/prod.dockerfile @@ -1,14 +1,14 @@ # ---- Base dependencies ---- -FROM node:18-alpine AS base +FROM oven/bun:latest AS base WORKDIR /app -RUN npm install -g pnpm serve typescript tsc tsc-alias tsx +RUN bun install -g serve typescript tsc tsc-alias tsx -COPY package*.json pnpm-workspace.yaml pnpm-lock.yaml ./ +COPY package.json bun.lockb ./ COPY shared/package*.json ./shared/ COPY server/package*.json ./server/ COPY vite/package*.json ./vite/ -RUN pnpm install +RUN bun install FROM base AS localtunnel WORKDIR /app @@ -19,27 +19,26 @@ CMD ["sh", "localtunnel-start.sh"] FROM base AS vite-build COPY . . WORKDIR /app -RUN pnpm run vite:build +RUN bun run vite:build:bun # ---- Build backend (server) ---- FROM base AS server-build COPY . . WORKDIR /app -RUN pnpm run server:build +RUN bun run server:build:bun # ---- Production frontend image ---- FROM vite-build AS vite-prod EXPOSE 3000 WORKDIR /app -CMD ["pnpm", "run", "vite:start"] +CMD ["bun", "run", "vite:start:bun"] FROM server-build AS server-prod EXPOSE 8080 -WORKDIR /app -CMD ["pnpm", "run", "server:start"] +WORKDIR /app/server +CMD ["bun", "run", "prod:start:bun"] FROM server-build AS workers-prod EXPOSE 8080 -WORKDIR /app -CMD ["pnpm", "run", "server:workers"] - +WORKDIR /app/server +CMD ["bun", "run", "workers:start:bun"] diff --git a/localtunnel-start.sh b/localtunnel-start.sh index 039f33a1e..edc0bfaab 100644 --- a/localtunnel-start.sh +++ b/localtunnel-start.sh @@ -15,7 +15,7 @@ fi echo "Installing localtunnel..." echo "Reserved key: ${LOCAL_TUNNEL_RESERVED_KEY}" -npm install -g localtunnel +bun install -g localtunnel echo "Server is ready! Starting localtunnel..." diff --git a/package.json b/package.json index 6e452881e..f6bd75bc0 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,19 @@ "type": "module", "scripts": { "vite:build": "pnpm -F shared build && pnpm -F vite build", + "vite:build:bun": "bun -F @autumn/shared build && bun -F @autumn/vite build", "vite:start": "pnpm -F vite start", + "vite:start:bun": "bun -F @autumn/shared build && bun -F @autumn/vite start", "server:build": "pnpm -F shared build && pnpm -F server prod:build", + "server:build:bun": "bun -F @autumn/shared build && bun -F @autumn/server prod:build:bun", "server:start": "pnpm -F server prod:start", + "server:start:bun": "bun -F @autumn/shared build && bun -F @autumn/server prod:start:bun", "server:cron": "pnpm -F server cron:start", + "server:cron:bun": "bun -F @autumn/shared build && bun -F @autumn/server cron:start:bun", "server:workers": "pnpm -F server workers:start", + "server:workers:bun": "bun -F @autumn/shared build && bun -F @autumn/server workers:start:bun", "server:check": "NODE_ENV=production pnpm -F server check", + "server:check:bun": "NODE_ENV=production bun -F @autumn/shared build && bun -F @autumn/server check", "dev": "concurrently \"cd server && npm run dev\" \"cd vite && npm run dev\" \"redis-server\"", "dev:wsl": "concurrently \"cd server && npm run dev\" \"cd vite && npm run dev\" \"cd shared && npm run dev\"", "setup": "node setup.js", diff --git a/server/package.json b/server/package.json index 0fbdc32e3..f7adbf223 100644 --- a/server/package.json +++ b/server/package.json @@ -9,15 +9,21 @@ "dev": "cross-env NODE_ENV=development npx nodemon --no-deprecation --exec npx tsx src/index.ts --ignore scripts --ignore tests", "dev:bun": "cross-env NODE_ENV=development bunx nodemon --no-deprecation --exec bun src/index.ts --ignore scripts --ignore tests", "start": "npx tsx src/index.ts", + "start:bun": "bun src/index.ts", "workers": "npx tsx watch src/workers.ts", "workers:start": "node --no-deprecation dist/src/workers.js", + "workers:start:bun": "bun dist/workers.js", "check": "tsx src/check.ts", "build": "tsc -b tsconfig.build.json && cp -r src/external/clickhouse/queries dist/src/external/clickhouse/", + "build:bun": "bun build ./src/index.ts ./src/workers.ts ./src/cron.ts --outdir dist --target bun", "prod": "tsc -b tsconfig.build.json && tsc-alias && node dist/src/index.js", "prod:build": "tsc -b tsconfig.build.json && tsc-alias && cp -r src/external/clickhouse/queries dist/src/external/clickhouse/", + "prod:build:bun": "bun build ./src/index.ts ./src/workers.ts ./src/cron.ts --outdir dist --target bun", "prod:start": "node dist/src/index.js", + "prod:start:bun": "bun dist/index.js", "cron": "tsx src/cron.ts", "cron:start": "node --no-deprecation dist/src/cron.js", + "cron:start:bun": "bun dist/cron.js", "testa-parallel": "mocha 'tests/alex/00_setup.ts' && mocha --parallel --timeout 10000000 'tests/alex/**/*.ts' --ignore 'tests/alex/00_setup.ts'", "testa": "mocha 'tests/alex/00_setup.ts' && mocha --timeout 10000000 'tests/alex/01_free.ts' --ignore 'tests/alex/00_setup.ts'", "test": "mocha --timeout 10000000 'tests/**/*.ts' --ignore 'tests/alex/**/*.ts'", diff --git a/server/tsconfig.build.json b/server/tsconfig.build.json index a715cdcb8..2f05895e3 100644 --- a/server/tsconfig.build.json +++ b/server/tsconfig.build.json @@ -24,6 +24,6 @@ "@emails/*": ["emails/*"] } }, - "include": ["src", "emails"], + "include": ["src", "emails", "src/external/clickhouse/queries"], "exclude": ["node_modules", "dist"] } diff --git a/shared/package.json b/shared/package.json index 4e6b5310c..9e3473c44 100644 --- a/shared/package.json +++ b/shared/package.json @@ -15,6 +15,7 @@ "scripts": { "build": "tsc", "dev": "npx nodemon --watch . --ext ts --ignore dist --exec 'pnpm run build'", + "dev:bun": "bunx nodemon --watch . --ext ts --ignore dist --exec 'bun run build'", "db:push": "cross-env NODE_OPTIONS=\"--import tsx\" pnpm exec drizzle-kit push --config drizzle.config.ts", "db:generate": "cross-env NODE_OPTIONS=\"--import tsx\" pnpm exec drizzle-kit generate --config drizzle.config.ts", "db:migrate": "cross-env NODE_OPTIONS=\"--import tsx\" pnpm exec drizzle-kit migrate --config drizzle.config.ts" diff --git a/vite/package.json b/vite/package.json index d3a93f053..c7f31e6a1 100644 --- a/vite/package.json +++ b/vite/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "vite --port 3000 --host", "build": "tsc -b && vite build", + "build:bun": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", "start": "serve -s dist"