From 3afa6298e31f978cae1decabad7be7f00f16a15f Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Mon, 1 Jun 2026 22:47:47 +0700 Subject: [PATCH] refactor(monorepo): remove root package deps, simplify Dockerfiles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root package.json no longer a workspace member — no src/, no 38 shared dependencies. Root is now workspace config with dev tooling only (biome, drizzle-kit, tsx, typescript). This means Dockerfiles only need: - pnpm-workspace.yaml + pnpm-lock.yaml + package.json (workspace config) - The specific service being built - Only vendor/ packages that service actually depends on (discord-gateway → discord.js-selfbot-v13) Before: each Dockerfile copied src/, vendor/*, packages/*, all services/ After: each Dockerfile copies only its service + needed vendor deps Co-Authored-By: Claude Opus 4.6 --- infra/docker/Dockerfile.backend | 17 +----- infra/docker/Dockerfile.discord-gateway | 14 +---- infra/docker/Dockerfile.frontend | 17 +----- package.json | 73 +++---------------------- pnpm-workspace.yaml | 1 - 5 files changed, 12 insertions(+), 110 deletions(-) diff --git a/infra/docker/Dockerfile.backend b/infra/docker/Dockerfile.backend index c218707..f1b95bd 100644 --- a/infra/docker/Dockerfile.backend +++ b/infra/docker/Dockerfile.backend @@ -10,23 +10,8 @@ COPY pnpm-workspace.yaml . COPY pnpm-lock.yaml . COPY package.json . -# Copy workspace packages -COPY packages/shared ./packages/shared - -# Copy vendor packages (workspace dependencies) -COPY vendor/discord.js-selfbot-v13 ./vendor/discord.js-selfbot-v13 -COPY vendor/discord-video-stream ./vendor/discord-video-stream -COPY vendor/better-sqlite3 ./vendor/better-sqlite3 -COPY vendor/drizzle-orm ./vendor/drizzle-orm - -# Copy root source (root package is a workspace member) -COPY src ./src -COPY vite.backend.config.ts . - -# Copy services +# Copy service COPY services/backend ./services/backend -COPY services/frontend ./services/frontend -COPY services/discord-gateway ./services/discord-gateway # Install dependencies RUN pnpm install --frozen-lockfile diff --git a/infra/docker/Dockerfile.discord-gateway b/infra/docker/Dockerfile.discord-gateway index 03224de..b970789 100644 --- a/infra/docker/Dockerfile.discord-gateway +++ b/infra/docker/Dockerfile.discord-gateway @@ -10,23 +10,11 @@ COPY pnpm-workspace.yaml . COPY pnpm-lock.yaml . COPY package.json . -# Copy workspace packages -COPY packages/shared ./packages/shared - # Copy vendor packages (workspace dependencies) COPY vendor/discord.js-selfbot-v13 ./vendor/discord.js-selfbot-v13 -COPY vendor/discord-video-stream ./vendor/discord-video-stream -COPY vendor/better-sqlite3 ./vendor/better-sqlite3 -COPY vendor/drizzle-orm ./vendor/drizzle-orm -# Copy root source (root package is a workspace member) -COPY src ./src -COPY vite.backend.config.ts . - -# Copy services +# Copy service COPY services/discord-gateway ./services/discord-gateway -COPY services/backend ./services/backend -COPY services/frontend ./services/frontend # Install dependencies RUN pnpm install --frozen-lockfile diff --git a/infra/docker/Dockerfile.frontend b/infra/docker/Dockerfile.frontend index 52d8616..a709d87 100644 --- a/infra/docker/Dockerfile.frontend +++ b/infra/docker/Dockerfile.frontend @@ -10,23 +10,8 @@ COPY pnpm-workspace.yaml . COPY pnpm-lock.yaml . COPY package.json . -# Copy workspace packages -COPY packages/shared ./packages/shared - -# Copy vendor packages (workspace dependencies) -COPY vendor/discord.js-selfbot-v13 ./vendor/discord.js-selfbot-v13 -COPY vendor/discord-video-stream ./vendor/discord-video-stream -COPY vendor/better-sqlite3 ./vendor/better-sqlite3 -COPY vendor/drizzle-orm ./vendor/drizzle-orm - -# Copy root source (root package is a workspace member — needed for pnpm install) -COPY src ./src -COPY vite.backend.config.ts . - -# Copy services +# Copy service COPY services/frontend ./services/frontend -COPY services/backend ./services/backend -COPY services/discord-gateway ./services/discord-gateway # Install dependencies RUN pnpm install --frozen-lockfile diff --git a/package.json b/package.json index 7f013cf..6710315 100644 --- a/package.json +++ b/package.json @@ -3,82 +3,27 @@ "version": "1.0.0", "description": "Discord bot that joins a voice channel and records audio", "type": "module", - "main": "src/index.ts", "packageManager": "pnpm@11.1.3", "scripts": { - "prepare:vendor": "pnpm --filter './vendor/*' --filter '!discord.js-selfbot-v13' --if-present run build", - "dev": "tsx watch src/index.ts", - "dev:server": "tsx watch src/index.ts", - "dev:web": "vite --host 0.0.0.0 frontend", - "start": "node dist/index.js", - "start:dev": "tsx src/index.ts", - "build": "pnpm run build:web && pnpm run build:server", - "build:web": "vite build frontend --outDir ../public/app --emptyOutDir", - "build:server": "vite build --config vite.backend.config.ts", - "typecheck": "tsc --noEmit", + "dev:backend": "pnpm --filter './services/backend' run dev", + "dev:discord-gateway": "pnpm --filter './services/discord-gateway' run dev", + "dev:web": "pnpm --filter './services/frontend' run dev", + "build:backend": "pnpm --filter './services/backend' run build", + "build:discord-gateway": "pnpm --filter './services/discord-gateway' run build", + "build:web": "pnpm --filter './services/frontend' run build", + "typecheck": "pnpm -r run typecheck", "lint": "biome check --diagnostic-level=error .", "format": "biome format --write .", - "test": "vitest run", + "test": "pnpm -r run test", "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate", - "db:migrate:programmatic": "tsx src/database/migrateCli.ts", "db:studio": "drizzle-kit studio", "install:yt-dlp": "sh scripts/install-yt-dlp.sh" }, - "dependencies": { - "@dank074/discord-video-stream": "workspace:*", - "@discordjs/opus": "^0.10.0", - "@discordjs/voice": "^0.19.2", - "@radix-ui/react-scroll-area": "^1.2.10", - "@radix-ui/react-slot": "^1.2.4", - "@radix-ui/react-tabs": "^1.1.13", - "@snazzah/davey": "^0.1.11", - "@tanstack/react-query": "^5.100.14", - "@types/pg": "^8.20.0", - "@vitejs/plugin-react": "^6.0.2", - "axios": "^1.16.1", - "clsx": "^2.1.1", - "discord.js-selfbot-v13": "workspace:*", - "dotenv": "^17.4.2", - "drizzle-orm": "^0.45.2", - "express": "^5.2.1", - "helmet": "^8.1.0", - "ioredis": "^5.11.0", - "libsodium-wrappers": "^0.8.4", - "lucide-react": "^1.16.0", - "motion": "^12.40.0", - "openai": "^6.38.0", - "opusscript": "^0.0.8", - "p-limit": "^7.3.0", - "p-retry": "^8.0.0", - "pg": "^8.21.0", - "piscina": "^5.1.4", - "play-dl": "^1.9.7", - "prism-media": "2.0.0-alpha.0", - "prom-client": "^15.1.3", - "react": "^19.2.6", - "react-dom": "^19.2.6", - "sharp": "^0.34.5", - "tailwind-merge": "^3.6.0", - "vite": "^8.0.13", - "winston": "^3.19.0", - "ws": "^8.20.1", - "zod": "^4.4.3" - }, "devDependencies": { "@biomejs/biome": "latest", - "@tailwindcss/postcss": "^4.3.0", - "@types/express": "^5.0.6", - "@types/node": "^25.9.0", - "@types/react": "^19.2.14", - "@types/react-dom": "^19.2.3", - "@types/ws": "^8.18.1", - "autoprefixer": "^10.5.0", "drizzle-kit": "^0.31.10", - "postcss": "^8.5.14", - "tailwindcss": "^4.3.0", "tsx": "^4.22.2", - "typescript": "^5.9.3", - "vitest": "latest" + "typescript": "^5.9.3" } } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 118e59b..261b9a2 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,4 @@ packages: - - . - services/frontend - services/backend - services/discord-gateway