| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- FROM node:20-slim AS base
- # Install pnpm
- ENV PNPM_HOME="/pnpm"
- ENV PATH="$PNPM_HOME:$PATH"
- RUN corepack enable
- RUN npm install -g npm@latest npm-run-all
- # Install system packages
- RUN apt update && \
- apt install -y \
- curl \
- git \
- vim \
- jq \
- netcat-openbsd \
- apt-transport-https \
- ca-certificates \
- gnupg \
- lsb-release \
- wget \
- gpg \
- xvfb \
- cmake \
- golang-go \
- default-jre \
- python3 \
- python3-venv \
- python3-dev \
- python3-pip \
- && rm -rf /var/lib/apt/lists/*
- # Install Docker cli
- RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
- && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
- && apt update && apt install -y docker-ce-cli \
- && rm -rf /var/lib/apt/lists/*
- # Install VS Code
- RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg \
- && install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg \
- && echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | tee /etc/apt/sources.list.d/vscode.list > /dev/null \
- && rm -f packages.microsoft.gpg \
- && apt update && apt install -y code \
- && rm -rf /var/lib/apt/lists/*
- WORKDIR /roo
- # Install rust
- ARG RUST_VERSION=1.87.0
- RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_VERSION} \
- && echo 'source $HOME/.cargo/env' >> $HOME/.bashrc
- # Install VS Code extensions
- ARG GOLANG_EXT_VERSION=0.46.1
- ARG ESLINT_EXT_VERSION=3.0.10
- ARG JAVA_EXT_VERSION=1.42.0
- ARG PYTHON_EXT_VERSION=2025.6.1
- ARG RUST_EXT_VERSION=0.3.2482
- RUN mkdir -p /roo/.vscode-template \
- && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension golang.go@${GOLANG_EXT_VERSION} \
- && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension dbaeumer.vscode-eslint@${ESLINT_EXT_VERSION} \
- && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension redhat.java@${JAVA_EXT_VERSION} \
- && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension ms-python.python@${PYTHON_EXT_VERSION} \
- && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension rust-lang.rust-analyzer@${RUST_EXT_VERSION}
- # Copy evals
- ARG EVALS_COMMIT=main
- ARG EVALS_REPO_URL=https://github.com/RooCodeInc/Roo-Code-Evals.git
- RUN git clone ${EVALS_REPO_URL} evals \
- && cd evals \
- && git checkout ${EVALS_COMMIT}
- # Install uv and sync python dependencies
- ARG UV_VERSION=0.7.11
- WORKDIR /roo/evals/python
- RUN curl -LsSf https://github.com/astral-sh/uv/releases/download/${UV_VERSION}/uv-installer.sh | sh \
- && /root/.local/bin/uv sync
- WORKDIR /roo/repo
- # Install npm packages
- RUN mkdir -p \
- scripts \
- packages/build \
- packages/config-eslint \
- packages/config-typescript \
- packages/core \
- packages/evals \
- packages/ipc \
- packages/telemetry \
- packages/types \
- packages/cloud \
- src \
- webview-ui
- COPY ./package.json ./
- COPY ./pnpm-lock.yaml ./
- COPY ./pnpm-workspace.yaml ./
- COPY ./scripts/bootstrap.mjs ./scripts/
- COPY ./packages/build/package.json ./packages/build/
- COPY ./packages/config-eslint/package.json ./packages/config-eslint/
- COPY ./packages/config-typescript/package.json ./packages/config-typescript/
- COPY ./packages/core/package.json ./packages/core/
- COPY ./packages/evals/package.json ./packages/evals/
- COPY ./packages/ipc/package.json ./packages/ipc/
- COPY ./packages/telemetry/package.json ./packages/telemetry/
- COPY ./packages/types/package.json ./packages/types/
- COPY ./packages/cloud/package.json ./packages/cloud/
- COPY ./src/package.json ./src/
- COPY ./webview-ui/package.json ./webview-ui/
- RUN pnpm install
- # Copy source code
- COPY . ./
- # Validate that .env.local exists and is not empty
- RUN if [ ! -f "packages/evals/.env.local" ] || [ ! -s "packages/evals/.env.local" ]; then \
- echo "ERROR: packages/evals/.env.local is missing or empty. Please create it with your API keys before building."; \
- exit 1; \
- fi
- # Copy ENV secrets
- COPY packages/evals/.env.local ./packages/evals/
- # Copy the pre-installed VS Code extensions
- RUN cp -r /roo/.vscode-template /roo/.vscode
- # Build the Roo Code extension
- RUN pnpm vsix -- --out ../bin/roo-code.vsix \
- && yes | code --no-sandbox --user-data-dir /roo/.vscode --install-extension bin/roo-code.vsix
- # Copy entrypoint script
- COPY packages/evals/.docker/entrypoints/runner.sh /usr/local/bin/entrypoint.sh
- RUN chmod +x /usr/local/bin/entrypoint.sh
- ENV DATABASE_URL=postgresql://postgres:password@db:5432/evals_development
- ENV REDIS_URL=redis://redis:6379
- ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|