From 7e2998e9b53a828c081c45d16f19fa40a07a1d1f Mon Sep 17 00:00:00 2001 From: Sawyer Cutler Date: Sat, 31 Oct 2026 08:39:00 -0700 Subject: [PATCH] build(deploy): ship only runtime dependencies in the images --- apps/hub/package.json | 1 - apps/web/package.json | 2 +- bun.lock | 9 +++------ deploy/Dockerfile | 34 ++++++++++++++++++++++------------ workflows/coder/package.json | 4 +--- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/apps/hub/package.json b/apps/hub/package.json index aa3bcf3c..875fa189 100644 --- a/apps/hub/package.json +++ b/apps/hub/package.json @@ -52,7 +52,6 @@ "@vscode/ripgrep": "1.18.0", "arktype": "catalog:", "better-auth": "catalog:", - "drizzle-kit": "0.31.9", "drizzle-orm": "catalog:", "hono": "catalog:", "hono-openapi": "1.5.0", diff --git a/apps/web/package.json b/apps/web/package.json index 8c144aa6..b05d0e07 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -35,6 +35,6 @@ "@types/react-dom": "19.3.0", "@vitejs/plugin-react": "5.2.0", "typescript": "5.9.3", - "vite": "6.4.3" + "vite": "6.4.5" } } diff --git a/bun.lock b/bun.lock index 32764fd6..7bccc244 100644 --- a/bun.lock +++ b/bun.lock @@ -99,7 +99,6 @@ "@vscode/ripgrep": "1.18.0", "arktype": "catalog:", "better-auth": "catalog:", - "drizzle-kit": "0.31.9", "drizzle-orm": "catalog:", "hono": "catalog:", "hono-openapi": "1.5.0", @@ -141,7 +140,7 @@ "@types/react-dom": "19.3.0", "@vitejs/plugin-react": "5.2.0", "typescript": "5.9.3", - "vite": "6.4.3", + "vite": "6.4.5", }, }, "packages/client": { @@ -601,12 +600,10 @@ "name": "@corbits-builder/coder", "version": "0.9.0", "dependencies": { + "@corbits/react-ui": "0.4.0", "@intx/agent": "workspace:*", "@intx/workflow": "workspace:*", }, - "devDependencies": { - "@corbits/react-ui": "0.4.0", - }, }, "workflows/coordinator": { "name": "@corbits-builder/coordinator", @@ -1613,7 +1610,7 @@ "validate-npm-package-name": ["validate-npm-package-name@6.0.2", "", {}, "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ=="], - "vite": ["vite@6.4.3", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A=="], + "vite": ["vite@6.4.5", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4enwjFfi4IwtEh0w+jPzpLVOFQiPHmmzPxcHXQOyEur47o6u0jE573DmGpjA+7irXoMLYRZD5ZaFUEneS3abPg=="], "vscode-jsonrpc": ["vscode-jsonrpc@9.0.3", "", {}, "sha512-qETYf9PCl1lVfwR+oBmMfc4vP2nqLNA35ABxorw3j06+xlKRgDVxbLgKm4Y/xPL0YWdeDjLoI4ImICIT3nB0zQ=="], diff --git a/deploy/Dockerfile b/deploy/Dockerfile index f95cb9bc..1cd736a4 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -1,6 +1,6 @@ ARG BUN_IMAGE=oven/bun:1.4.4@sha256:1d22548f177f4ff38e0c15baa3c2c46c6c2060ba2d1bc573bb4720b407548f1d -FROM ${BUN_IMAGE} AS install +FROM ${BUN_IMAGE} AS source WORKDIR /app COPY package.json bun.lock tsconfig.json ./ COPY patches ./patches @@ -10,8 +10,18 @@ COPY workflows ./workflows COPY vendor/interchange/package.json vendor/interchange/tsconfig.json vendor/interchange/tsconfig.base.json vendor/interchange/bunfig.toml ./vendor/interchange/ COPY vendor/interchange/packages ./vendor/interchange/packages COPY vendor/interchange/apps/sidecar ./vendor/interchange/apps/sidecar + +FROM source AS install RUN bun install --frozen-lockfile +# The hub and sidecar run on production dependencies only; build and dev tools stay in install. +# better-auth lists drizzle-kit as an optional peer, so a production install still links it and +# its esbuild binaries. Only migration generation uses them, and nothing at runtime imports them. +FROM source AS deps +RUN bun install --frozen-lockfile --production \ + && rm -rf node_modules/.bun/drizzle-kit@* node_modules/.bun/esbuild@* \ + node_modules/.bun/esbuild-register@* node_modules/.bun/@esbuild+* node_modules/.bun/@esbuild-kit+* + FROM install AS web RUN bun run --cwd apps/web build @@ -52,11 +62,11 @@ RUN apt-get update \ # so this image keeps the hub's /app layout. FROM runtime AS sidecar WORKDIR /app -COPY --from=install --chown=bun:bun /app/package.json ./ -COPY --from=install --chown=bun:bun /app/node_modules ./node_modules -COPY --from=install --chown=bun:bun /app/apps/hub ./apps/hub -COPY --from=install --chown=bun:bun /app/packages ./packages -COPY --from=install --chown=bun:bun /app/vendor/interchange ./vendor/interchange +COPY --from=deps --chown=bun:bun /app/package.json ./ +COPY --from=deps --chown=bun:bun /app/node_modules ./node_modules +COPY --from=deps --chown=bun:bun /app/apps/hub ./apps/hub +COPY --from=deps --chown=bun:bun /app/packages ./packages +COPY --from=deps --chown=bun:bun /app/vendor/interchange ./vendor/interchange RUN mkdir -p /data && chown bun:bun /data USER bun WORKDIR /app/vendor/interchange @@ -65,13 +75,13 @@ CMD ["bun", "--no-env-file", "--conditions=intx-src", "apps/sidecar/src/index.ts FROM runtime AS hub WORKDIR /app -COPY --from=install --chown=bun:bun /app/package.json /app/bun.lock /app/tsconfig.json ./ -COPY --from=install --chown=bun:bun /app/node_modules ./node_modules -COPY --from=install --chown=bun:bun /app/apps/hub ./apps/hub +COPY --from=deps --chown=bun:bun /app/package.json /app/bun.lock /app/tsconfig.json ./ +COPY --from=deps --chown=bun:bun /app/node_modules ./node_modules +COPY --from=deps --chown=bun:bun /app/apps/hub ./apps/hub COPY --from=web --chown=bun:bun /app/apps/web/dist ./apps/web/dist -COPY --from=install --chown=bun:bun /app/packages ./packages -COPY --from=install --chown=bun:bun /app/workflows ./workflows -COPY --from=install --chown=bun:bun /app/vendor/interchange ./vendor/interchange +COPY --from=deps --chown=bun:bun /app/packages ./packages +COPY --from=deps --chown=bun:bun /app/workflows ./workflows +COPY --from=deps --chown=bun:bun /app/vendor/interchange ./vendor/interchange RUN mkdir -p /app/data/hub && chown -R bun:bun /app/data USER bun ENV HOST=0.0.0.0 PORT=8000 HUB_DATA_DIR=/app/data/hub HUB_WEB_DIR=/app/apps/web/dist diff --git a/workflows/coder/package.json b/workflows/coder/package.json index d356d26d..a1621d3d 100644 --- a/workflows/coder/package.json +++ b/workflows/coder/package.json @@ -13,10 +13,8 @@ "./assets": "./src/assets.ts" }, "dependencies": { + "@corbits/react-ui": "0.4.0", "@intx/agent": "workspace:*", "@intx/workflow": "workspace:*" - }, - "devDependencies": { - "@corbits/react-ui": "0.4.0" } }