Dockerfile.runner 5.1 KB

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