Files
clawmates/images/server.Dockerfile
T
Omar SobhandClaude Fable 5 fc173f170d P0 exit: e2e harness, Playwright shell journeys green, deploy skeleton
- teamclaw-server e2e mode (TEAMCLAW_MODE=e2e): idempotent deterministic
  seed through the real registration paths
- Playwright suite (6 journeys) against the real backend + prod Next build:
  login redirect, bad-password error, shell/roster/online-dot, team members,
  seeded credits, sign-out revocation — P0 exit criterion met
- Dockerfiles: musl-static server -> distroless, Next standalone -> distroless
  node (multi-arch via TARGETARCH)
- Air-gapped compose topology with edge/core/sandbox_net/secrets_net
  segmentation (engine-validated in CI), config-file + env-overlay pattern
- CI: compose validation + e2e job with trace upload

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-06-09 22:48:28 -05:00

26 lines
981 B
Docker

# teamclaw-server: static musl build into distroless. The same image serves
# the air-gapped bundle and the cloud registry.
FROM rust:1.96-slim AS builder
ARG TARGETARCH
RUN apt-get update \
&& apt-get install -y --no-install-recommends musl-tools \
&& rm -rf /var/lib/apt/lists/*
RUN case "$TARGETARCH" in \
arm64) echo aarch64-unknown-linux-musl > /rust-target ;; \
*) echo x86_64-unknown-linux-musl > /rust-target ;; \
esac \
&& rustup target add "$(cat /rust-target)"
WORKDIR /src
COPY Cargo.toml rust-toolchain.toml ./
COPY crates ./crates
COPY migrations ./migrations
COPY .sqlx ./.sqlx
ENV SQLX_OFFLINE=true
RUN cargo build --release --target "$(cat /rust-target)" -p teamclaw-server \
&& cp "target/$(cat /rust-target)/release/teamclaw-server" /teamclaw-server
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=builder /teamclaw-server /usr/local/bin/teamclaw-server
USER nonroot
ENTRYPOINT ["/usr/local/bin/teamclaw-server"]