From 9311b81102480516c59e2e9dab631ee611a1737b Mon Sep 17 00:00:00 2001 From: vince Date: Sat, 20 Jun 2026 06:34:31 +0200 Subject: [PATCH] fix(container): stage model package manifest --- apps/web/Containerfile | 1 + apps/web/src/lib/workspace-boundary.test.ts | 32 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/apps/web/Containerfile b/apps/web/Containerfile index 912f780..7f12f94 100644 --- a/apps/web/Containerfile +++ b/apps/web/Containerfile @@ -4,6 +4,7 @@ WORKDIR /repo ENV PATH=/repo/apps/web/node_modules/.bin:/repo/packages/ui/node_modules/.bin:/repo/node_modules/.bin:$PATH COPY package.json bun.lock turbo.json tsconfig.base.json ./ COPY apps/web/package.json apps/web/package.json +COPY packages/dashboard-model/package.json packages/dashboard-model/package.json COPY packages/ui/package.json packages/ui/package.json RUN bun install --frozen-lockfile diff --git a/apps/web/src/lib/workspace-boundary.test.ts b/apps/web/src/lib/workspace-boundary.test.ts index 4edcfc6..4f4200c 100644 --- a/apps/web/src/lib/workspace-boundary.test.ts +++ b/apps/web/src/lib/workspace-boundary.test.ts @@ -113,4 +113,36 @@ describe("workspace boundaries", () => { false, ); }); + + test("stages web workspace dependency manifests before container install", () => { + const webPackage = JSON.parse( + readFileSync(join(root, "apps/web/package.json"), "utf8"), + ) as { dependencies?: Record }; + const workspacePackages = [ + "packages/ui/package.json", + "packages/dashboard-model/package.json", + ].map((manifestPath) => { + const packageJson = JSON.parse( + readFileSync(join(root, manifestPath), "utf8"), + ) as { name?: string }; + + return [packageJson.name, manifestPath] as const; + }); + const manifestsByPackageName = new Map(workspacePackages); + const containerfile = readFileSync( + join(root, "apps/web/Containerfile"), + "utf8", + ); + + const workspaceDependencyManifests = Object.entries( + webPackage.dependencies ?? {}, + ) + .filter(([, version]) => version.startsWith("workspace:")) + .map(([packageName]) => manifestsByPackageName.get(packageName)); + + expect(workspaceDependencyManifests).not.toContain(undefined); + for (const manifestPath of workspaceDependencyManifests) { + expect(containerfile).toContain(`COPY ${manifestPath} ${manifestPath}`); + } + }); });