# docker compose build --build-arg GH_TOKEN=$(npx dotenvx get GH_TOKEN -f .env.development) roomote-worker FROM node:20-slim AS base # Install pnpm ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable # Install common system packages RUN apt update && \ apt install -y \ curl \ git \ vim \ jq \ netcat-openbsd \ apt-transport-https \ ca-certificates \ gnupg \ lsb-release \ wget \ gpg \ gh \ && 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 additional worker-specific packages RUN apt update && \ apt install -y \ xvfb \ && 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/* # Install ssh server # RUN apt-get update \ # && apt-get install -y openssh-server \ # && cp /etc/ssh/sshd_config /etc/ssh/sshd_config-original \ # && sed -i 's/^#\s*Port.*/Port 2222/' /etc/ssh/sshd_config \ # && sed -i 's/^#\s*PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config \ # && mkdir -p /root/.ssh \ # && chmod 700 /root/.ssh \ # && mkdir /var/run/sshd \ # && chmod 755 /var/run/sshd \ # && rm -rf /var/lib/apt/lists /var/cache/apt/archives WORKDIR /roo # Install extensions RUN mkdir -p /roo/.vscode \ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension dbaeumer.vscode-eslint \ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension esbenp.prettier-vscode \ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension csstools.postcss \ && code --no-sandbox --user-data-dir /roo/.vscode --install-extension RooVeterinaryInc.roo-code-nightly # Clone repo (requires $GH_TOKEN) ARG GH_TOKEN ENV GH_TOKEN=${GH_TOKEN} RUN git config --global user.email "chris@roocode.com" RUN git config --global user.name "Roo Code" RUN git config --global credential.helper store RUN echo "https://oauth2:${GH_TOKEN}@github.com" > ~/.git-credentials WORKDIR /roo/repos RUN gh repo clone RooCodeInc/Roo-Code WORKDIR /roo/repos/Roo-Code RUN gh repo set-default RooCodeInc/Roo-Code RUN pnpm install WORKDIR /roo/repos RUN gh repo clone RooCodeInc/Roo-Code-Cloud WORKDIR /roo/repos/Roo-Code-Cloud RUN pnpm install WORKDIR /roo COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json .env.* ./ COPY packages/config-eslint/package.json ./packages/config-eslint/ COPY packages/config-typescript/package.json ./packages/config-typescript/ COPY packages/env/package.json ./packages/env/ COPY packages/db/package.json ./packages/db/ COPY packages/ipc/package.json ./packages/ipc/ COPY packages/job-auth/package.json ./packages/job-auth/ COPY apps/roomote/package.json ./apps/roomote/ RUN pnpm install COPY packages/config-eslint ./packages/config-eslint/ COPY packages/config-typescript ./packages/config-typescript/ COPY packages/env ./packages/env/ COPY packages/db ./packages/db/ COPY packages/ipc ./packages/ipc/ COPY packages/job-auth ./packages/job-auth/ COPY apps/roomote ./apps/roomote/ WORKDIR /roo/apps/roomote # COPY .docker/entrypoints/worker.sh /usr/local/bin/worker.sh # RUN chmod +x /usr/local/bin/worker.sh ENV NODE_ENV=production ENV HOST_EXECUTION_METHOD=docker # ENTRYPOINT ["/usr/local/bin/worker.sh"] # CMD ["sleep", "infinity"] CMD ["pnpm", "worker:production"]