From ae623f53169bd57bda4e49b216f11fe197d0765a Mon Sep 17 00:00:00 2001 From: Dylan Garvis Date: Sun, 2 Aug 2026 11:26:24 -0400 Subject: [PATCH] fix(release): reduce runtime dependency layers --- Dockerfile | 11 +++++--- apps/discord-bot/package.json | 4 +-- package-lock.json | 48 ++++------------------------------ packages/database/package.json | 6 ++--- 4 files changed, 18 insertions(+), 51 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8f446fa..012b68e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -FROM node:22-alpine AS dependencies +FROM node:22-alpine AS manifests WORKDIR /app RUN apk add --no-cache libc6-compat @@ -13,8 +13,13 @@ COPY packages/database/package.json ./packages/database/package.json COPY packages/logging/package.json ./packages/logging/package.json COPY packages/minecraft/package.json ./packages/minecraft/package.json COPY packages/network/package.json ./packages/network/package.json + +FROM manifests AS dependencies RUN npm ci +FROM manifests AS production-dependencies +RUN npm ci --omit=dev + FROM dependencies AS builder COPY . . RUN npm run build --workspace @minecraft-account-manager/web @@ -36,7 +41,7 @@ USER app EXPOSE 3000 CMD ["node", "apps/web/server.js"] -FROM dependencies AS bot +FROM production-dependencies AS bot ARG VERSION=development LABEL org.opencontainers.image.title="Minecraft Account Manager Discord Bot" \ org.opencontainers.image.version="${VERSION}" \ @@ -51,7 +56,7 @@ COPY --chown=app:app packages ./packages USER app CMD ["npm", "run", "start", "--workspace", "@minecraft-account-manager/discord-bot"] -FROM dependencies AS migrate +FROM production-dependencies AS migrate ARG VERSION=development LABEL org.opencontainers.image.title="Minecraft Account Manager Migrations" \ org.opencontainers.image.version="${VERSION}" \ diff --git a/apps/discord-bot/package.json b/apps/discord-bot/package.json index 1be9784..ac6c82c 100644 --- a/apps/discord-bot/package.json +++ b/apps/discord-bot/package.json @@ -16,10 +16,10 @@ "@minecraft-account-manager/logging": "*", "discord.js": "^14.25.1", "dotenv": "^17.2.3", - "drizzle-orm": "^0.45.1" + "drizzle-orm": "^0.45.1", + "tsx": "^4.21.0" }, "devDependencies": { - "tsx": "^4.21.0", "typescript": "^5.9.3" } } diff --git a/package-lock.json b/package-lock.json index 0278130..71b2013 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,10 +25,10 @@ "@minecraft-account-manager/logging": "*", "discord.js": "^14.25.1", "dotenv": "^17.2.3", - "drizzle-orm": "^0.45.1" + "drizzle-orm": "^0.45.1", + "tsx": "^4.21.0" }, "devDependencies": { - "tsx": "^4.21.0", "typescript": "^5.9.3" } }, @@ -671,7 +671,6 @@ "version": "0.10.2", "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", - "dev": true, "license": "Apache-2.0" }, "node_modules/@emnapi/core": { @@ -712,7 +711,6 @@ "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", "deprecated": "Merged into tsx: https://tsx.hirok.io", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "~0.18.20", @@ -724,7 +722,6 @@ "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", "deprecated": "Merged into tsx: https://tsx.hirok.io", - "dev": true, "license": "MIT", "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", @@ -738,7 +735,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -755,7 +751,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -772,7 +767,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -789,7 +783,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -806,7 +799,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -823,7 +815,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -840,7 +831,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -857,7 +847,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -874,7 +863,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -891,7 +879,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -908,7 +895,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -925,7 +911,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -942,7 +927,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -959,7 +943,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -976,7 +959,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -993,7 +975,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1010,7 +991,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1027,7 +1007,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1044,7 +1023,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1061,7 +1039,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1078,7 +1055,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1095,7 +1071,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1112,7 +1087,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1129,7 +1103,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1146,7 +1119,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1163,7 +1135,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -4356,7 +4327,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, "license": "MIT" }, "node_modules/call-bind": { @@ -4833,7 +4803,6 @@ "version": "0.31.10", "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.10.tgz", "integrity": "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==", - "dev": true, "license": "MIT", "dependencies": { "@drizzle-team/brocli": "^0.10.2", @@ -5236,7 +5205,6 @@ "version": "0.25.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -5867,7 +5835,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -6003,7 +5970,6 @@ "version": "4.14.0", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", - "dev": true, "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -8225,7 +8191,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" @@ -8624,7 +8589,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -8643,7 +8607,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -9129,7 +9092,6 @@ "version": "4.23.1", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz", "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "~0.28.0" @@ -10157,12 +10119,12 @@ "version": "0.1.0", "dependencies": { "@minecraft-account-manager/auth": "*", + "drizzle-kit": "^0.31.10", "drizzle-orm": "^0.45.1", - "postgres": "^3.4.8" + "postgres": "^3.4.8", + "tsx": "^4.21.0" }, "devDependencies": { - "drizzle-kit": "^0.31.10", - "tsx": "^4.21.0", "typescript": "^5.9.3" } }, diff --git a/packages/database/package.json b/packages/database/package.json index e792c4c..b911cae 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -15,12 +15,12 @@ }, "dependencies": { "@minecraft-account-manager/auth": "*", + "drizzle-kit": "^0.31.10", "drizzle-orm": "^0.45.1", - "postgres": "^3.4.8" + "postgres": "^3.4.8", + "tsx": "^4.21.0" }, "devDependencies": { - "drizzle-kit": "^0.31.10", - "tsx": "^4.21.0", "typescript": "^5.9.3" } }