diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b5b12c8..fdd49553 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [8.1.3](https://github.com/kaitranntt/ccs/compare/v8.1.2...v8.1.3) (2026-05-29) + +### Hotfixes + +* add integrated Docker healthcheck ([0e3383d](https://github.com/kaitranntt/ccs/commit/0e3383d31da6c8c882760a86890c0dd915af50db)), closes [#1400](https://github.com/kaitranntt/ccs/issues/1400) + ## [8.1.2](https://github.com/kaitranntt/ccs/compare/v8.1.1...v8.1.2) (2026-05-29) ### Hotfixes diff --git a/docker/Dockerfile.integrated b/docker/Dockerfile.integrated index 7d1bd03c..3ef0a74f 100644 --- a/docker/Dockerfile.integrated +++ b/docker/Dockerfile.integrated @@ -45,4 +45,7 @@ RUN chmod +x /entrypoint-integrated.sh \ EXPOSE 3000 8085 8317 +HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ + CMD node -e "const http=require('http');const probe=(url)=>new Promise((resolve)=>{const req=http.get(url,(res)=>{res.resume();resolve(res.statusCode<400);});req.on('error',()=>resolve(false));req.setTimeout(4500,()=>{req.destroy();resolve(false);});});Promise.all([probe('http://127.0.0.1:3000/'),probe('http://127.0.0.1:8317/')]).then((results)=>process.exit(results.every(Boolean)?0:1));" + ENTRYPOINT ["/entrypoint-integrated.sh"] diff --git a/package.json b/package.json index a439aea6..f6cd8f76 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kaitranntt/ccs", - "version": "8.1.2-dev.1", + "version": "8.1.3", "description": "Claude Code Switch - Instant profile switching between Claude, GLM, Kimi, and more", "keywords": [ "cli", diff --git a/tests/unit/docker/docker-release-workflow-context.test.ts b/tests/unit/docker/docker-release-workflow-context.test.ts index 4ddb9099..2ede55f7 100644 --- a/tests/unit/docker/docker-release-workflow-context.test.ts +++ b/tests/unit/docker/docker-release-workflow-context.test.ts @@ -35,4 +35,12 @@ describe('docker release workflow context', () => { /Verify promoted tags are anonymously pullable[\s\S]*DOCKER_CONFIG="\$\{CLEAN_DOCKER_CONFIG\}" docker pull/ ); }); + + test('gives the raw integrated image a Docker healthcheck for release smoke tests', () => { + const dockerfile = readFileSync(join(repoRoot, 'docker/Dockerfile.integrated'), 'utf8'); + + expect(dockerfile).toContain('HEALTHCHECK'); + expect(dockerfile).toContain('127.0.0.1:3000'); + expect(dockerfile).toContain('127.0.0.1:8317'); + }); });