From 50b56600ddc38b85c9308cb9d541b15720aaf5ce Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Sat, 28 Mar 2026 09:47:23 -0400 Subject: [PATCH 1/2] fix(docker): include docker/ assets in npm package The docker/ directory was missing from package.json files array, causing all ccs docker commands to fail after npm install with "Missing bundled Docker asset" error. Also add .npmignore exception for docker/*.sh since the blanket *.sh exclusion stripped the entrypoint script. Closes #829 --- .npmignore | 3 ++- package.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.npmignore b/.npmignore index 3df4e806..5b875530 100644 --- a/.npmignore +++ b/.npmignore @@ -12,9 +12,10 @@ docs/ .gitignore .gitmodules -# Development tools (keep installer scripts) +# Development tools (keep installer scripts and docker entrypoints) *.sh !installers/*.sh +!docker/*.sh # Logs and temp *.log diff --git a/package.json b/package.json index f8b205a8..2e5dee24 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "lib/", "scripts/", "config/", + "docker/", ".claude/", "VERSION", "README.md", From 13254f28a6d6170fe0a46ed2ed2326441cc2d717 Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Sat, 28 Mar 2026 09:47:37 -0400 Subject: [PATCH 2/2] test(docker): add regression test for bundled asset availability Verify all four integrated Docker assets (compose file, Dockerfile, supervisord config, entrypoint script) resolve and exist on disk. Prevents silent exclusion from future packaging changes. --- .../unit/docker/docker-assets-bundled.test.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/unit/docker/docker-assets-bundled.test.ts diff --git a/tests/unit/docker/docker-assets-bundled.test.ts b/tests/unit/docker/docker-assets-bundled.test.ts new file mode 100644 index 00000000..ec681518 --- /dev/null +++ b/tests/unit/docker/docker-assets-bundled.test.ts @@ -0,0 +1,21 @@ +import { existsSync } from 'fs'; +import { describe, expect, it } from 'bun:test'; +import { getDockerAssetPaths } from '../../../src/docker/docker-assets'; + +describe('docker bundled assets', () => { + const assets = getDockerAssetPaths(); + + it('resolves all required asset paths', () => { + expect(assets.composeFile).toContain('docker-compose.integrated.yml'); + expect(assets.dockerfile).toContain('Dockerfile.integrated'); + expect(assets.supervisordConfig).toContain('supervisord.conf'); + expect(assets.entrypoint).toContain('entrypoint-integrated.sh'); + }); + + it('all bundled assets exist on disk', () => { + expect(existsSync(assets.composeFile)).toBe(true); + expect(existsSync(assets.dockerfile)).toBe(true); + expect(existsSync(assets.supervisordConfig)).toBe(true); + expect(existsSync(assets.entrypoint)).toBe(true); + }); +});