Dockerfile.runner 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. FROM node:20-slim AS base
  2. # Install pnpm
  3. ENV PNPM_HOME="/pnpm"
  4. ENV PATH="$PNPM_HOME:$PATH"
  5. RUN corepack enable
  6. RUN npm install -g npm@latest npm-run-all
  7. # Install system packages
  8. RUN apt update && \
  9. apt install -y \
  10. curl \
  11. git \
  12. vim \
  13. jq \
  14. apt-transport-https \
  15. ca-certificates \
  16. gnupg \
  17. lsb-release \
  18. wget \
  19. gpg \
  20. xvfb \
  21. cmake \
  22. golang-go \
  23. default-jre \
  24. python3 \
  25. python3-venv \
  26. python3-dev \
  27. python3-pip \
  28. && rm -rf /var/lib/apt/lists/*
  29. # Install Docker cli
  30. RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
  31. && 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 \
  32. && apt update && apt install -y docker-ce-cli \
  33. && rm -rf /var/lib/apt/lists/*
  34. # Install VS Code
  35. RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg \
  36. && install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg \
  37. && 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 \
  38. && rm -f packages.microsoft.gpg \
  39. && apt update && apt install -y code \
  40. && rm -rf /var/lib/apt/lists/*
  41. WORKDIR /roo
  42. # Install rust
  43. ARG RUST_VERSION=1.87.0
  44. RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_VERSION} \
  45. && echo 'source $HOME/.cargo/env' >> $HOME/.bashrc
  46. # Install VS Code extensions
  47. ARG GOLANG_EXT_VERSION=0.46.1
  48. ARG ESLINT_EXT_VERSION=3.0.10
  49. ARG JAVA_EXT_VERSION=1.42.0
  50. ARG PYTHON_EXT_VERSION=2025.6.1
  51. ARG RUST_EXT_VERSION=0.3.2482
  52. RUN mkdir -p /roo/.vscode-template \
  53. && code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension golang.go@${GOLANG_EXT_VERSION} \
  54. && code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension dbaeumer.vscode-eslint@${ESLINT_EXT_VERSION} \
  55. && code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension redhat.java@${JAVA_EXT_VERSION} \
  56. && code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension ms-python.python@${PYTHON_EXT_VERSION} \
  57. && code --no-sandbox --user-data-dir /roo/.vscode-template --install-extension rust-lang.rust-analyzer@${RUST_EXT_VERSION}
  58. # Copy evals
  59. ARG EVALS_COMMIT=main
  60. ARG EVALS_REPO_URL=https://github.com/RooCodeInc/Roo-Code-Evals.git
  61. RUN git clone ${EVALS_REPO_URL} evals \
  62. && cd evals \
  63. && git checkout ${EVALS_COMMIT}
  64. # Install uv and sync python dependencies
  65. ARG UV_VERSION=0.7.11
  66. WORKDIR /roo/evals/python
  67. RUN curl -LsSf https://github.com/astral-sh/uv/releases/download/${UV_VERSION}/uv-installer.sh | sh \
  68. && /root/.local/bin/uv sync
  69. WORKDIR /roo/repo
  70. # Install npm packages
  71. RUN mkdir -p \
  72. scripts \
  73. packages/build \
  74. packages/cloud \
  75. packages/config-eslint \
  76. packages/config-typescript \
  77. packages/evals \
  78. packages/ipc \
  79. packages/telemetry \
  80. packages/types \
  81. src \
  82. webview-ui
  83. COPY ./package.json ./
  84. COPY ./pnpm-lock.yaml ./
  85. COPY ./pnpm-workspace.yaml ./
  86. COPY ./scripts/bootstrap.mjs ./scripts/
  87. COPY ./packages/build/package.json ./packages/build/
  88. COPY ./packages/cloud/package.json ./packages/cloud/
  89. COPY ./packages/config-eslint/package.json ./packages/config-eslint/
  90. COPY ./packages/config-typescript/package.json ./packages/config-typescript/
  91. COPY ./packages/evals/package.json ./packages/evals/
  92. COPY ./packages/ipc/package.json ./packages/ipc/
  93. COPY ./packages/telemetry/package.json ./packages/telemetry/
  94. COPY ./packages/types/package.json ./packages/types/
  95. COPY ./src/package.json ./src/
  96. COPY ./webview-ui/package.json ./webview-ui/
  97. RUN pnpm install
  98. # Copy source code
  99. COPY . ./
  100. # Validate that .env.local exists and is not empty
  101. RUN if [ ! -f "packages/evals/.env.local" ] || [ ! -s "packages/evals/.env.local" ]; then \
  102. echo "ERROR: packages/evals/.env.local is missing or empty. Please create it with your API keys before building."; \
  103. exit 1; \
  104. fi
  105. # Copy ENV secrets
  106. COPY packages/evals/.env.local ./packages/evals/
  107. # Copy the pre-installed VS Code extensions
  108. RUN cp -r /roo/.vscode-template /roo/.vscode
  109. # Build the Roo Code extension
  110. RUN pnpm vsix -- --out ../bin/roo-code.vsix \
  111. && code --no-sandbox --user-data-dir /roo/.vscode --install-extension bin/roo-code.vsix
  112. # Copy entrypoint script
  113. COPY packages/evals/.docker/entrypoints/runner.sh /usr/local/bin/entrypoint.sh
  114. RUN chmod +x /usr/local/bin/entrypoint.sh
  115. ENV DATABASE_URL=postgresql://postgres:password@db:5432/evals_development
  116. ENV REDIS_URL=redis://redis:6379
  117. ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]