Files
windmill/sandbox-image/Dockerfile.sandbox
centdix e27e89a2b0 chore: add mermaid CLI to sandbox image with usage instructions (#8104)
* chore: add mermaid CLI to sandbox image with usage instructions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: mount host ~/.ssh into sandbox and install openssh-client

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove sample diagram

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: address PR review comments on mermaid CLI setup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 14:04:05 +00:00

69 lines
4.5 KiB
Docker

FROM debian:bookworm-slim
# ── System packages ───────────────────────────────────────────────────────────
RUN apt-get update && apt-get install -y --no-install-recommends \
curl ca-certificates git unzip openssh-client \
# Rust native build deps
pkg-config cmake clang mold libtool \
libssl-dev libxml2-dev libxmlsec1-dev libxslt1-dev \
libffi-dev zlib1g-dev libcurl4-openssl-dev libclang-dev \
libkrb5-dev libsasl2-dev \
# PostgreSQL
postgresql postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# ── Node.js 22 ────────────────────────────────────────────────────────────────
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& rm -rf /var/lib/apt/lists/*
# ── GitHub CLI ────────────────────────────────────────────────────────────────
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
-o /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
> /etc/apt/sources.list.d/github-cli.list \
&& apt-get update && apt-get install -y --no-install-recommends gh \
&& rm -rf /var/lib/apt/lists/*
# ── Rust toolchain ────────────────────────────────────────────────────────────
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
sh -s -- -y --default-toolchain stable --profile minimal
ENV PATH="/root/.cargo/bin:$PATH"
RUN cargo install sqlx-cli --no-default-features --features native-tls,postgres \
&& cargo install cargo-watch
# ── Bun ───────────────────────────────────────────────────────────────────────
RUN curl -fsSL https://bun.sh/install | bash
ENV PATH="/root/.bun/bin:$PATH"
# ── Playwright + Chromium ─────────────────────────────────────────────────────
RUN bun add -g @playwright/test \
&& bunx playwright install chromium --with-deps \
&& rm -rf /var/lib/apt/lists/* /tmp/bunx-*
# ── AWS CLI ───────────────────────────────────────────────────────────────────
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o /tmp/awscliv2.zip \
&& unzip -q /tmp/awscliv2.zip -d /tmp \
&& /tmp/aws/install \
&& rm -rf /tmp/aws /tmp/awscliv2.zip
ENV AWS_DEFAULT_REGION=auto
# ── Claude Code ───────────────────────────────────────────────────────────────
RUN curl -fsSL https://claude.ai/install.sh | bash
ENV PATH="/root/.local/bin:$PATH"
# ── Codex ─────────────────────────────────────────────────────────────────────
RUN npm i -g @openai/codex
# ── Mermaid CLI ───────────────────────────────────────────────────────────────
# Skip puppeteer's own Chromium download; reuse the one Playwright already installed above
RUN PUPPETEER_SKIP_DOWNLOAD=true npm i -g @mermaid-js/mermaid-cli \
&& CHROMIUM=$(find /root/.cache/ms-playwright -name 'chrome' -executable -type f | head -1) \
&& printf '{"args":["--no-sandbox","--disable-setuid-sandbox"],"executablePath":"%s"}\n' "$CHROMIUM" \
> /root/.puppeteerrc.json
# ── Entrypoint (run explicitly via docker exec, not on container start) ──────
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh