mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-15 18:21:09 +00:00
Reviewer kept flagging :full omission and stale :latest as bugs. Both are intentional per Q3 maintainer decision and the rc.1 soak design (loop-5). Strengthen inline comments to make this unmistakable to future readers.
44 lines
1.9 KiB
Docker
44 lines
1.9 KiB
Docker
FROM eceasy/cli-proxy-api:latest
|
|
|
|
ARG CCS_NPM_VERSION=latest
|
|
|
|
# CCS integrated image: CCS CLI + CLIProxy + supervisord.
|
|
# Design choice (issue #1251 final scope): single-image strategy. The originally-
|
|
# proposed `:full` variant bundling claude-code/gemini-cli/grok-cli/opencode was
|
|
# DROPPED on maintainer review. Rationale: smaller surface area, fewer supply-
|
|
# chain dependencies, simpler tag taxonomy. Users needing AI CLIs run them in
|
|
# sibling containers attached to ccs-net — the public DNS contract guarantees
|
|
# http://ccs:8317 reachability. See docker/README.md#connect-your-app-to-
|
|
# cliproxy. Historical record: CHANGELOG.md "### Removed" entry.
|
|
|
|
RUN apk add --no-cache \
|
|
curl \
|
|
jq \
|
|
nodejs \
|
|
npm \
|
|
supervisor
|
|
|
|
# Install CCS CLI.
|
|
# Tradeoff: `npm install -g` does not use a lockfile — the package is already
|
|
# version-pinned via CCS_NPM_VERSION (e.g. "7.80.0"), so transitive drift is
|
|
# bounded to patch-level updates of CCS's own production dependencies between
|
|
# publish time and image build time. This is intentional: pinning an exact
|
|
# lockfile in a Docker global-install layer is fragile (lockfile format ties to
|
|
# npm/Node version in the base image). The --mount=type=cache layer ensures the
|
|
# resolved dependency tree is stable within a single build host's cache.
|
|
# Regression test: tests/docker/image-size.sh asserts the image stays within
|
|
# the size budget, which catches unexpected dep bloat.
|
|
RUN --mount=type=cache,target=/root/.npm \
|
|
npm install -g @kaitranntt/ccs@${CCS_NPM_VERSION} \
|
|
&& ln -sf /usr/local/lib/node_modules/@kaitranntt/ccs/dist/docker/docker-bootstrap.js /usr/local/bin/ccs-docker-bootstrap
|
|
|
|
COPY supervisord.conf /etc/supervisord.conf
|
|
COPY entrypoint-integrated.sh /entrypoint-integrated.sh
|
|
|
|
RUN chmod +x /entrypoint-integrated.sh \
|
|
&& mkdir -p /var/log/ccs
|
|
|
|
EXPOSE 3000 8085 8317
|
|
|
|
ENTRYPOINT ["/entrypoint-integrated.sh"]
|