Dockerfile.runner 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. # Build with:
  2. # docker compose -f packages/evals/docker-compose.yml build runner
  3. # Test with:
  4. # docker compose -f packages/evals/docker-compose.yml run --rm runner bash
  5. FROM debian:bookworm-slim AS base
  6. # Install system packages (excluding language runtimes - those come from mise)
  7. RUN apt-get update && \
  8. apt-get install -y \
  9. curl \
  10. git \
  11. vim \
  12. jq \
  13. netcat-openbsd \
  14. apt-transport-https \
  15. ca-certificates \
  16. gnupg \
  17. lsb-release \
  18. wget \
  19. gpg \
  20. xvfb \
  21. cmake \
  22. build-essential \
  23. && rm -rf /var/lib/apt/lists/*
  24. # Install Docker cli
  25. RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
  26. && 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 \
  27. && apt-get update && apt-get install -y docker-ce-cli \
  28. && rm -rf /var/lib/apt/lists/*
  29. # Install VS Code
  30. RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg \
  31. && install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg \
  32. && 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 \
  33. && rm -f packages.microsoft.gpg \
  34. && apt-get update && apt-get install -y code \
  35. && rm -rf /var/lib/apt/lists/*
  36. WORKDIR /roo
  37. # Install mise (https://mise.jdx.dev) for language runtime management
  38. RUN curl https://mise.run | sh \
  39. && /root/.local/bin/mise --version
  40. # Set up mise environment
  41. ENV MISE_DATA_DIR="/root/.local/share/mise"
  42. ENV PATH="/root/.local/share/mise/shims:/root/.local/bin:$PATH"
  43. # Define language runtime versions (matching setup.sh)
  44. ARG NODE_VERSION=20.19.2
  45. ARG PYTHON_VERSION=3.13.2
  46. ARG GO_VERSION=1.24.2
  47. ARG RUST_VERSION=1.85.1
  48. ARG JAVA_VERSION=openjdk-17
  49. ARG UV_VERSION=0.7.11
  50. # Install language runtimes via mise
  51. RUN mise use --global node@${NODE_VERSION} \
  52. && mise use --global python@${PYTHON_VERSION} \
  53. && mise use --global go@${GO_VERSION} \
  54. && mise use --global rust@${RUST_VERSION} \
  55. && mise use --global java@${JAVA_VERSION} \
  56. && mise use --global uv@${UV_VERSION} \
  57. && mise reshim
  58. # Verify installations
  59. RUN node --version && python --version && go version && rustc --version && java --version && uv --version
  60. # Install pnpm (after node is available from mise)
  61. ENV PNPM_HOME="/root/.local/share/pnpm"
  62. ENV PATH="$PNPM_HOME:$PATH"
  63. RUN npm install -g pnpm npm-run-all
  64. # Install VS Code extensions
  65. ARG GOLANG_EXT_VERSION=0.46.1
  66. ARG ESLINT_EXT_VERSION=3.0.10
  67. ARG JAVA_EXT_VERSION=1.42.0
  68. ARG PYTHON_EXT_VERSION=2025.6.1
  69. ARG RUST_EXT_VERSION=0.3.2482
  70. RUN mkdir -p /roo/.vscode-template \
  71. && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension golang.go@${GOLANG_EXT_VERSION} \
  72. && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension dbaeumer.vscode-eslint@${ESLINT_EXT_VERSION} \
  73. && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension redhat.java@${JAVA_EXT_VERSION} \
  74. && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension ms-python.python@${PYTHON_EXT_VERSION} \
  75. && yes | code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension rust-lang.rust-analyzer@${RUST_EXT_VERSION}
  76. # Copy evals
  77. ARG EVALS_COMMIT=main
  78. ARG EVALS_REPO_URL=https://github.com/RooCodeInc/Roo-Code-Evals.git
  79. RUN git clone ${EVALS_REPO_URL} evals \
  80. && cd evals \
  81. && git checkout ${EVALS_COMMIT}
  82. # Pre-warm Gradle wrapper cache (./gradlew downloads its own Gradle regardless of system install).
  83. # Find a Java project with gradlew and run it to cache the distribution.
  84. RUN find /roo/evals -name "gradlew" -type f | head -1 | xargs -I {} sh -c 'cd $(dirname {}) && ./gradlew --version'
  85. # Sync python dependencies for evals
  86. WORKDIR /roo/evals/python
  87. RUN uv sync
  88. WORKDIR /roo/repo
  89. # Install npm packages
  90. RUN mkdir -p \
  91. scripts \
  92. apps/cli \
  93. packages/build \
  94. packages/config-eslint \
  95. packages/config-typescript \
  96. packages/core \
  97. packages/evals \
  98. packages/ipc \
  99. packages/telemetry \
  100. packages/types \
  101. packages/cloud \
  102. packages/vscode-shim \
  103. src \
  104. webview-ui
  105. COPY ./package.json ./
  106. COPY ./pnpm-lock.yaml ./
  107. COPY ./pnpm-workspace.yaml ./
  108. COPY ./scripts/bootstrap.mjs ./scripts/
  109. COPY ./apps/cli/package.json ./apps/cli/
  110. COPY ./packages/build/package.json ./packages/build/
  111. COPY ./packages/config-eslint/package.json ./packages/config-eslint/
  112. COPY ./packages/config-typescript/package.json ./packages/config-typescript/
  113. COPY ./packages/core/package.json ./packages/core/
  114. COPY ./packages/evals/package.json ./packages/evals/
  115. COPY ./packages/ipc/package.json ./packages/ipc/
  116. COPY ./packages/telemetry/package.json ./packages/telemetry/
  117. COPY ./packages/types/package.json ./packages/types/
  118. COPY ./packages/cloud/package.json ./packages/cloud/
  119. COPY ./packages/vscode-shim/package.json ./packages/vscode-shim/
  120. COPY ./src/package.json ./src/
  121. COPY ./webview-ui/package.json ./webview-ui/
  122. RUN pnpm install
  123. # Copy source code
  124. COPY . ./
  125. # Validate that .env.local exists and is not empty
  126. RUN if [ ! -f "packages/evals/.env.local" ] || [ ! -s "packages/evals/.env.local" ]; then \
  127. echo "ERROR: packages/evals/.env.local is missing or empty. Please create it with your API keys before building."; \
  128. exit 1; \
  129. fi
  130. # Copy ENV secrets
  131. COPY packages/evals/.env.local ./packages/evals/
  132. # Copy the pre-installed VS Code extensions
  133. RUN cp -r /roo/.vscode-template /roo/.vscode
  134. # Build the Roo Code extension (for VSCode execution method)
  135. RUN pnpm vsix -- --out ../bin/roo-code.vsix \
  136. && yes | code --no-sandbox --user-data-dir /roo/.vscode --install-extension bin/roo-code.vsix
  137. # Build the extension bundle and CLI (for CLI execution method)
  138. # The CLI requires the extension bundle (src/dist/extension.js) and the CLI build (apps/cli/dist/index.js)
  139. RUN pnpm --filter roo-cline bundle \
  140. && pnpm --filter @roo-code/cli build
  141. # Copy entrypoint script
  142. COPY packages/evals/.docker/entrypoints/runner.sh /usr/local/bin/entrypoint.sh
  143. RUN chmod +x /usr/local/bin/entrypoint.sh
  144. ENV DATABASE_URL=postgresql://postgres:password@db:5432/evals_development
  145. ENV REDIS_URL=redis://redis:6379
  146. ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]