Skip to content

Commit c3b3817

Browse files
author
Duong Manh CUONG
committed
1 parent d4a16f4 commit c3b3817

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2465
-0
lines changed

.devcontainer/devcontainer.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
2+
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
3+
{
4+
"name": "Node.js & TypeScript",
5+
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
6+
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
7+
"features": {
8+
"ghcr.io/devcontainers/features/common-utils:2": {},
9+
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
10+
"ghcr.io/devcontainers/features/node:1": {},
11+
"ghcr.io/devcontainers-extra/features/zsh-plugins:0": {},
12+
"ghcr.io/devcontainers/features/github-cli:1": {}
13+
},
14+
"customizations": {
15+
"vscode": {
16+
"extensions": [
17+
"mhutchie.git-graph"
18+
]
19+
}
20+
}
21+
22+
// Features to add to the dev container. More info: https://containers.dev/features.
23+
// "features": {},
24+
25+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
26+
// "forwardPorts": [],
27+
28+
// Use 'postCreateCommand' to run commands after the container is created.
29+
// "postCreateCommand": "yarn install",
30+
31+
// Configure tool-specific properties.
32+
// "customizations": {},
33+
34+
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
35+
// "remoteUser": "root"
36+
}

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ src/node_modules
7676
!pnpm-workspace.yaml
7777
!scripts/bootstrap.mjs
7878
!apps/web-evals/
79+
!apps/roomote/
7980
!src/
8081
!webview-ui/
8182
!packages/evals/.docker/entrypoints/runner.sh

apps/roomote/.env.example

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
DATABASE_URL=postgresql://postgres:password@localhost:5433/cloud_agents
2+
REDIS_URL=redis://localhost:6380
3+
4+
GH_WEBHOOK_SECRET=your-webhook-secret-here
5+
GH_TOKEN=your-token-here
6+
7+
OPENROUTER_API_KEY=sk-or-v1-...
8+
9+
SLACK_API_TOKEN=xoxb-...

apps/roomote/.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Next.js
2+
.next
3+
4+
# docker
5+
.docker/*
6+
!.docker/scripts
7+
!.docker/entrypoints
8+
9+
# ENV
10+
!.env.example

apps/roomote/Dockerfile.api

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# docker compose build base api
2+
3+
FROM roomote-base AS base
4+
5+
WORKDIR /roo
6+
7+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
8+
COPY packages/config-eslint/package.json ./packages/config-eslint/
9+
COPY packages/config-typescript/package.json ./packages/config-typescript/
10+
COPY packages/types/package.json ./packages/types/
11+
COPY packages/ipc/package.json ./packages/ipc/
12+
COPY apps/roomote/package.json ./apps/roomote/
13+
14+
COPY scripts/bootstrap.mjs ./scripts/
15+
RUN pnpm install
16+
17+
COPY apps/roomote ./apps/roomote/
18+
COPY packages/config-eslint ./packages/config-eslint/
19+
COPY packages/config-typescript ./packages/config-typescript/
20+
COPY packages/types ./packages/types/
21+
COPY packages/ipc ./packages/ipc/
22+
23+
WORKDIR /roo/apps/roomote
24+
RUN pnpm build
25+
ENV NODE_ENV=production
26+
EXPOSE 3001
27+
CMD ["pnpm", "start"]

apps/roomote/Dockerfile.base

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# docker compose build base
2+
3+
FROM node:20-slim AS base
4+
5+
# Install pnpm
6+
ENV PNPM_HOME="/pnpm"
7+
ENV PATH="$PNPM_HOME:$PATH"
8+
RUN corepack enable
9+
10+
# Install common system packages
11+
RUN apt update && \
12+
apt install -y \
13+
curl \
14+
git \
15+
vim \
16+
jq \
17+
netcat-openbsd \
18+
apt-transport-https \
19+
ca-certificates \
20+
gnupg \
21+
lsb-release \
22+
wget \
23+
gpg \
24+
gh \
25+
&& rm -rf /var/lib/apt/lists/*
26+
27+
# Install Docker cli
28+
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
29+
&& 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 \
30+
&& apt update && apt install -y docker-ce-cli \
31+
&& rm -rf /var/lib/apt/lists/*

apps/roomote/Dockerfile.controller

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# docker compose build base controller
2+
3+
FROM roomote-base AS base
4+
5+
WORKDIR /roo
6+
7+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
8+
COPY packages/config-eslint/package.json ./packages/config-eslint/
9+
COPY packages/config-typescript/package.json ./packages/config-typescript/
10+
COPY packages/types/package.json ./packages/types/
11+
COPY packages/ipc/package.json ./packages/ipc/
12+
COPY apps/roomote/package.json ./apps/roomote/
13+
14+
COPY scripts/bootstrap.mjs ./scripts/
15+
RUN pnpm install
16+
17+
COPY apps/roomote ./apps/roomote/
18+
COPY packages/config-eslint ./packages/config-eslint/
19+
COPY packages/config-typescript ./packages/config-typescript/
20+
COPY packages/types ./packages/types/
21+
COPY packages/ipc ./packages/ipc/
22+
23+
WORKDIR /roo/apps/roomote
24+
ENV NODE_ENV=production
25+
CMD ["pnpm", "controller"]

apps/roomote/Dockerfile.dashboard

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# docker compose build base dashboard
2+
3+
FROM roomote-base AS base
4+
5+
WORKDIR /roo
6+
7+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
8+
COPY packages/config-eslint/package.json ./packages/config-eslint/
9+
COPY packages/config-typescript/package.json ./packages/config-typescript/
10+
COPY packages/types/package.json ./packages/types/
11+
COPY packages/ipc/package.json ./packages/ipc/
12+
COPY apps/roomote/package.json ./apps/roomote/
13+
14+
COPY scripts/bootstrap.mjs ./scripts/
15+
RUN pnpm install
16+
17+
COPY apps/roomote ./apps/roomote/
18+
COPY packages/config-eslint ./packages/config-eslint/
19+
COPY packages/config-typescript ./packages/config-typescript/
20+
COPY packages/types ./packages/types/
21+
COPY packages/ipc ./packages/ipc/
22+
23+
WORKDIR /roo/apps/roomote
24+
EXPOSE 3002
25+
CMD ["pnpm", "dashboard"]

apps/roomote/Dockerfile.worker

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# docker compose build worker
2+
# Note: Requires $GH_TOKEN to be set as build argument.
3+
4+
FROM roomote-base AS base
5+
6+
# Install additional worker-specific packages
7+
RUN apt update && \
8+
apt install -y \
9+
xvfb \
10+
&& rm -rf /var/lib/apt/lists/*
11+
12+
# Install VS Code
13+
RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg \
14+
&& install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg \
15+
&& 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 \
16+
&& rm -f packages.microsoft.gpg \
17+
&& apt update && apt install -y code \
18+
&& rm -rf /var/lib/apt/lists/*
19+
20+
WORKDIR /roo
21+
22+
# Install extensions
23+
RUN mkdir -p /roo/.vscode \
24+
&& code --no-sandbox --user-data-dir /roo/.vscode --install-extension dbaeumer.vscode-eslint \
25+
&& code --no-sandbox --user-data-dir /roo/.vscode --install-extension esbenp.prettier-vscode \
26+
&& code --no-sandbox --user-data-dir /roo/.vscode --install-extension csstools.postcss \
27+
&& code --no-sandbox --user-data-dir /roo/.vscode --install-extension RooVeterinaryInc.roo-cline
28+
29+
# Clone repo (requires $GH_TOKEN)
30+
ARG GH_TOKEN
31+
ENV GH_TOKEN=${GH_TOKEN}
32+
WORKDIR /roo/repos
33+
RUN git config --global user.email "[email protected]"
34+
RUN git config --global user.name "Roo Code"
35+
RUN git config --global credential.helper store
36+
RUN echo "https://oauth2:${GH_TOKEN}@github.com" > ~/.git-credentials
37+
RUN gh repo clone RooCodeInc/Roo-Code
38+
WORKDIR /roo/repos/Roo-Code
39+
RUN gh repo set-default RooCodeInc/Roo-Code
40+
RUN pnpm install
41+
42+
# Install dependencies
43+
WORKDIR /roo
44+
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
45+
COPY packages/config-eslint/package.json ./packages/config-eslint/
46+
COPY packages/config-typescript/package.json ./packages/config-typescript/
47+
COPY packages/types/package.json ./packages/types/
48+
COPY packages/ipc/package.json ./packages/ipc/
49+
COPY apps/roomote/package.json ./apps/roomote/
50+
51+
COPY scripts/bootstrap.mjs ./scripts/
52+
RUN pnpm install
53+
54+
COPY apps/roomote ./apps/roomote/
55+
COPY packages/config-eslint ./packages/config-eslint/
56+
COPY packages/config-typescript ./packages/config-typescript/
57+
COPY packages/types ./packages/types/
58+
COPY packages/ipc ./packages/ipc/
59+
60+
WORKDIR /roo/apps/roomote
61+
ENV NODE_ENV=production
62+
CMD ["pnpm", "worker"]

apps/roomote/docker-compose.yml

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
services:
2+
base:
3+
build:
4+
context: ../../
5+
dockerfile: apps/roomote/Dockerfile.base
6+
image: roomote-base
7+
8+
db:
9+
container_name: roomote-db
10+
image: postgres:17.5
11+
ports:
12+
- "5435:5432"
13+
volumes:
14+
- ./.docker/postgres:/var/lib/postgresql/data
15+
environment:
16+
- POSTGRES_USER=postgres
17+
- POSTGRES_PASSWORD=password
18+
- POSTGRES_DB=cloud_agents
19+
healthcheck:
20+
test: ["CMD-SHELL", "pg_isready -U postgres -d cloud_agents"]
21+
interval: 5s
22+
timeout: 5s
23+
retries: 5
24+
start_period: 30s
25+
26+
redis:
27+
container_name: roomote-redis
28+
image: redis:7-alpine
29+
ports:
30+
- "6385:6379"
31+
volumes:
32+
- ./.docker/redis:/data
33+
command: redis-server --appendonly yes
34+
35+
dashboard:
36+
container_name: roomote-dashboard
37+
build:
38+
context: ../../
39+
dockerfile: apps/roomote/Dockerfile.dashboard
40+
image: roomote-dashboard
41+
ports:
42+
- "3002:3002"
43+
environment:
44+
- REDIS_URL=redis://redis:6379
45+
- NODE_ENV=production
46+
depends_on:
47+
redis:
48+
condition: service_started
49+
50+
api:
51+
container_name: roomote-api
52+
build:
53+
context: ../../
54+
dockerfile: apps/roomote/Dockerfile.api
55+
image: roomote-api
56+
ports:
57+
- "3001:3001"
58+
environment:
59+
- DATABASE_URL=postgresql://postgres:password@db:5432/cloud_agents
60+
- REDIS_URL=redis://redis:6379
61+
- NODE_ENV=production
62+
volumes:
63+
- /var/run/docker.sock:/var/run/docker.sock
64+
depends_on:
65+
db:
66+
condition: service_healthy
67+
redis:
68+
condition: service_started
69+
70+
controller:
71+
container_name: roomote-controller
72+
build:
73+
context: ../../
74+
dockerfile: apps/roomote/Dockerfile.controller
75+
args:
76+
- GH_TOKEN=${GH_TOKEN}
77+
image: roomote-controller
78+
env_file:
79+
- .env
80+
environment:
81+
- HOST_EXECUTION_METHOD=docker
82+
- DATABASE_URL=postgresql://postgres:password@db:5432/cloud_agents
83+
- REDIS_URL=redis://redis:6379
84+
- NODE_ENV=production
85+
volumes:
86+
- /var/run/docker.sock:/var/run/docker.sock
87+
- /tmp/roomote:/var/log/roomote
88+
depends_on:
89+
db:
90+
condition: service_healthy
91+
redis:
92+
condition: service_started
93+
restart: unless-stopped
94+
95+
worker:
96+
build:
97+
context: ../../
98+
dockerfile: apps/roomote/Dockerfile.worker
99+
args:
100+
- GH_TOKEN=${GH_TOKEN}
101+
image: roomote-worker
102+
env_file:
103+
- .env
104+
environment:
105+
- HOST_EXECUTION_METHOD=docker
106+
volumes:
107+
- /var/run/docker.sock:/var/run/docker.sock
108+
- /tmp/roomote:/var/log/roomote
109+
stdin_open: true
110+
tty: true
111+
depends_on:
112+
db:
113+
condition: service_healthy
114+
redis:
115+
condition: service_started
116+
117+
networks:
118+
default:
119+
name: roomote_default
120+
driver: bridge

0 commit comments

Comments
 (0)