mirror of
https://github.com/sredevopsorg/deepseek-kubernetes-sandbox.git
synced 2026-11-03 01:13:24 +00:00
feat(repo)!: restructure around the dsh-harness image and one example per implementation
- the root Dockerfile is the primary artifact; versions.env is the single source of truth
- merge gateway-api/dsh-demo into examples/dsh-agents-as-a-service (manifests/, exposure variants)
- move the single-tenant template into examples/minimal-single-tenant
- publish the gateway as a nested package under the repository image
- mirror the DSH ref for release identities (first release dsh-v0.2.1-rc.2-r2)
- CI: lint/python/manifests/gateway-image, reusable multi-arch build, tag-driven release, weekly e2e
- docs: README, docs/{main-image,examples,gitflow,versioning}, example READMEs, AGENTS.md, governance
- SSO is opt-in again; gateway pull policy and cookie defaults match the documented demo
BREAKING CHANGE: example manifest paths, the gateway image name, and the removal
of deploy/ and gateway-api/ affect existing deployments; see the migration table
in README.md.
This commit is contained in:
49
Dockerfile
49
Dockerfile
@@ -1,12 +1,23 @@
|
||||
# syntax=docker/dockerfile:1.7
|
||||
|
||||
#
|
||||
# The primary artifact of this repository: DeepSeek Harness Web (dsh web),
|
||||
# packaged as a slim, non-root, multi-arch runtime image.
|
||||
#
|
||||
# Build args (all pinned in versions.env, verified by scripts/check-versions.sh):
|
||||
# DSH_REPO upstream git remote to package
|
||||
# DSH_VERSION upstream git ref to build (tag or branch)
|
||||
# RELEASE_REVISION optional repository revision label (r2, r3, ...)
|
||||
# PNPM_VERSION pnpm used to build DSH
|
||||
# VCS_REF this repository's commit, recorded in OCI labels
|
||||
# NODE_BUILD_IMAGE node image used to build DSH
|
||||
# NODE_RUNTIME_IMAGE node image used at runtime
|
||||
ARG NODE_BUILD_IMAGE=docker.io/node:24-trixie
|
||||
ARG NODE_RUNTIME_IMAGE=docker.io/node:24-trixie-slim
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Build stage
|
||||
# Build stage: clone DSH at the pinned ref, build, and package the CLI.
|
||||
# ---------------------------------------------------------------------------
|
||||
FROM ${NODE_BUILD_IMAGE} AS build
|
||||
FROM $NODE_BUILD_IMAGE AS build
|
||||
|
||||
ARG DSH_REPO=https://github.com/deepseek-ai/deepseek-harness.git
|
||||
ARG DSH_VERSION=dsh-v0.2.1-rc.2
|
||||
@@ -16,11 +27,11 @@ ENV CI=true \
|
||||
NODE_OPTIONS=--max-old-space-size=4096
|
||||
|
||||
RUN corepack enable \
|
||||
&& corepack prepare "pnpm@${PNPM_VERSION}" --activate
|
||||
&& corepack prepare "pnpm@$PNPM_VERSION" --activate
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
RUN git clone --depth 1 --branch "${DSH_VERSION}" "${DSH_REPO}" .
|
||||
RUN git clone --depth 1 --branch "$DSH_VERSION" "$DSH_REPO" .
|
||||
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
@@ -44,22 +55,30 @@ RUN cd /opt/dsh \
|
||||
# ---------------------------------------------------------------------------
|
||||
# Runtime stage
|
||||
# ---------------------------------------------------------------------------
|
||||
FROM ${NODE_RUNTIME_IMAGE} AS runtime
|
||||
FROM $NODE_RUNTIME_IMAGE AS runtime
|
||||
|
||||
ARG DSH_VERSION
|
||||
ARG DSH_VERSION=dsh-v0.2.1-rc.2
|
||||
ARG RELEASE_REVISION=r2
|
||||
ARG PNPM_VERSION=11.28.5
|
||||
ARG VCS_REF=unknown
|
||||
|
||||
LABEL org.opencontainers.image.title="DeepSeek Harness Web packaged by SREDevOps.org" \
|
||||
org.opencontainers.image.version="${DSH_VERSION}" \
|
||||
org.opencontainers.image.source="https://github.com/sredevopsorg/deepseek-kubernetes-sandbox"
|
||||
org.opencontainers.image.description="DeepSeek Harness Web (dsh web) as a slim, non-root, Kubernetes-ready image" \
|
||||
org.opencontainers.image.source="https://github.com/sredevopsorg/deepseek-kubernetes-sandbox" \
|
||||
org.opencontainers.image.version="$DSH_VERSION" \
|
||||
org.opencontainers.image.revision="$VCS_REF" \
|
||||
org.opencontainers.image.licenses="MIT" \
|
||||
io.sredevopsorg.dsh.version="$DSH_VERSION" \
|
||||
io.sredevopsorg.release.revision="$RELEASE_REVISION"
|
||||
|
||||
ENV NODE_ENV=production \
|
||||
HOME=/home/node \
|
||||
DSH_HOME=/home/node/.dsh \
|
||||
DSH_PORT=3080 \
|
||||
PATH="/app/node_modules/.bin:${PATH}"
|
||||
PATH="/app/node_modules/.bin:$PATH"
|
||||
|
||||
# git/ripgrep are useful for DSH agent tools; tini handles signals.
|
||||
# git/ripgrep/jq/yq/curl/gh are deliberate agent tooling parity: a sandboxed DSH
|
||||
# instance expects the usual developer CLI. tini reaps signals for a clean stop.
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
@@ -73,9 +92,9 @@ RUN apt-get update \
|
||||
gh \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& curl -LsSf https://astral.sh/uv/install.sh | sh \
|
||||
&& install -d -o node -g node -m 0755 /workspace "${DSH_HOME}" \
|
||||
&& install -d -o node -g node -m 0755 /workspace "$DSH_HOME" \
|
||||
&& corepack enable \
|
||||
&& corepack prepare "pnpm@${PNPM_VERSION}" --activate \
|
||||
&& corepack prepare "pnpm@$PNPM_VERSION" --activate \
|
||||
&& pnpm --version
|
||||
|
||||
COPY --from=build --chown=node:node /opt/dsh /app
|
||||
@@ -98,7 +117,7 @@ if [ -n "$DSH_PUBLIC_URL" ]; then
|
||||
set -- --public-url "$DSH_PUBLIC_URL" "$@"
|
||||
fi
|
||||
|
||||
# Additional trusted hosts (e.g. the public gateway host behind an Ingress).
|
||||
# Additional trusted hosts (e.g. the public gateway host behind a proxy).
|
||||
# DSH Host/Origin-fences /api: without this, requests forwarded with the
|
||||
# browser's Host header are rejected. Accepts comma- or space-separated names;
|
||||
# localhost/127.0.0.1 are always trusted below.
|
||||
@@ -127,4 +146,4 @@ USER node
|
||||
EXPOSE 3080
|
||||
VOLUME ["/home/node/.dsh"]
|
||||
STOPSIGNAL SIGTERM
|
||||
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/dsh-entrypoint"]
|
||||
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/dsh-entrypoint"]
|
||||
|
||||
Reference in New Issue
Block a user