cacode commited on
Commit
5d1728c
·
verified ·
1 Parent(s): bf5aec6

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +23 -9
  2. start.sh +23 -0
Dockerfile CHANGED
@@ -13,11 +13,15 @@ ARG KOTLIN_VERSION=1.9.25
13
  ARG ANDROID_CMDLINE_TOOLS_VERSION=11076708
14
  ARG ANDROID_PLATFORM=34
15
  ARG ANDROID_BUILD_TOOLS=34.0.0
 
16
 
17
  ENV KOTLIN_HOME=/opt/kotlin
18
  ENV ANDROID_SDK_ROOT=/opt/android-sdk
19
  ENV ANDROID_HOME=/opt/android-sdk
20
- ENV PATH="${PATH}:${KOTLIN_HOME}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools"
 
 
 
21
 
22
  RUN apt-get update && apt-get install -y --no-install-recommends \
23
  ca-certificates curl git bash sudo tini jq procps unzip \
@@ -33,7 +37,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
33
  redis-server redis-tools \
34
  # Rust + Go
35
  rustc cargo rustfmt \
36
- golang-go \
37
  && rm -rf /var/lib/apt/lists/*
38
 
39
  # Install code-server (pinned version)
@@ -49,6 +52,12 @@ RUN curl -fsSL "https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_
49
  && ln -s "${KOTLIN_HOME}/bin/kotlinc" /usr/local/bin/kotlinc \
50
  && rm -f /tmp/kotlin.zip
51
 
 
 
 
 
 
 
52
  # Android SDK command-line tools + common packages
53
  RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \
54
  && curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS_VERSION}_latest.zip" -o /tmp/android-tools.zip \
@@ -61,22 +70,27 @@ RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \
61
 
62
  # Python core deps
63
  RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
64
- pip install --no-cache-dir \
65
  numpy pandas scipy scikit-learn matplotlib \
66
  jupyterlab ipykernel notebook \
67
  requests httpx aiohttp pyyaml python-dotenv tqdm rich \
68
  fastapi uvicorn[standard] pydantic flask \
69
  sqlalchemy alembic psycopg2-binary redis \
70
- pytest black isort ruff mypy
 
 
 
 
71
 
72
- # Codex CLI
73
- RUN npm install -g @openai/codex && npm cache clean --force
 
74
 
75
  # Create user
76
  RUN useradd -m -u 1000 -s /bin/bash coder \
77
  && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
78
- && mkdir -p /home/coder/.config/code-server /home/coder/.codex \
79
- && chown -R coder:coder /home/coder /opt/kotlin /opt/android-sdk
80
 
81
  # Quick C build check (build-time)
82
  RUN printf '#include <stdio.h>\nint main(){puts("ok");return 0;}\n' > /tmp/t.c \
@@ -92,4 +106,4 @@ WORKDIR /home/coder
92
 
93
  EXPOSE 7860
94
  ENTRYPOINT ["/usr/bin/tini", "--"]
95
- CMD ["/usr/local/bin/start.sh"]
 
13
  ARG ANDROID_CMDLINE_TOOLS_VERSION=11076708
14
  ARG ANDROID_PLATFORM=34
15
  ARG ANDROID_BUILD_TOOLS=34.0.0
16
+ ARG GO_VERSION=1.26.1
17
 
18
  ENV KOTLIN_HOME=/opt/kotlin
19
  ENV ANDROID_SDK_ROOT=/opt/android-sdk
20
  ENV ANDROID_HOME=/opt/android-sdk
21
+ ENV GOROOT=/usr/local/go
22
+ ENV GOPATH=/home/coder/go
23
+ ENV PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright
24
+ ENV PATH="${PATH}:${KOTLIN_HOME}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${GOROOT}/bin:${GOPATH}/bin"
25
 
26
  RUN apt-get update && apt-get install -y --no-install-recommends \
27
  ca-certificates curl git bash sudo tini jq procps unzip \
 
37
  redis-server redis-tools \
38
  # Rust + Go
39
  rustc cargo rustfmt \
 
40
  && rm -rf /var/lib/apt/lists/*
41
 
42
  # Install code-server (pinned version)
 
52
  && ln -s "${KOTLIN_HOME}/bin/kotlinc" /usr/local/bin/kotlinc \
53
  && rm -f /tmp/kotlin.zip
54
 
55
+ # Go (official tarball for newer version than Debian repos)
56
+ RUN curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" -o /tmp/go.tgz \
57
+ && rm -rf /usr/local/go \
58
+ && tar -C /usr/local -xzf /tmp/go.tgz \
59
+ && rm -f /tmp/go.tgz
60
+
61
  # Android SDK command-line tools + common packages
62
  RUN mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools" \
63
  && curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS_VERSION}_latest.zip" -o /tmp/android-tools.zip \
 
70
 
71
  # Python core deps
72
  RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
73
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 pip install --no-cache-dir \
74
  numpy pandas scipy scikit-learn matplotlib \
75
  jupyterlab ipykernel notebook \
76
  requests httpx aiohttp pyyaml python-dotenv tqdm rich \
77
  fastapi uvicorn[standard] pydantic flask \
78
  sqlalchemy alembic psycopg2-binary redis \
79
+ pytest black isort ruff mypy \
80
+ playwright
81
+
82
+ # Codex CLI + Playwright + Playwright MCP
83
+ RUN npm install -g @openai/codex playwright @playwright/mcp && npm cache clean --force
84
 
85
+ # Playwright browsers + system deps (Chromium/Firefox/WebKit)
86
+ RUN mkdir -p "${PLAYWRIGHT_BROWSERS_PATH}" \
87
+ && playwright install --with-deps
88
 
89
  # Create user
90
  RUN useradd -m -u 1000 -s /bin/bash coder \
91
  && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
92
+ && mkdir -p /home/coder/.config/code-server /home/coder/.codex /home/coder/go \
93
+ && chown -R coder:coder /home/coder /opt/kotlin /opt/android-sdk /opt/ms-playwright
94
 
95
  # Quick C build check (build-time)
96
  RUN printf '#include <stdio.h>\nint main(){puts("ok");return 0;}\n' > /tmp/t.c \
 
106
 
107
  EXPOSE 7860
108
  ENTRYPOINT ["/usr/bin/tini", "--"]
109
+ CMD ["/usr/local/bin/start.sh"]
start.sh CHANGED
@@ -46,6 +46,10 @@ fi
46
  : "${CODEX_BASE_URL:=https://cacode-sub2api-dev.hf.space}"
47
  : "${CODEX_WIRE_API:=responses}"
48
  : "${CODEX_REQUIRES_OPENAI_AUTH:=true}"
 
 
 
 
49
 
50
  cat > "${CODEX_DIR}/config.toml" <<EOF
51
  model_provider = "${CODEX_MODEL_PROVIDER}"
@@ -63,6 +67,14 @@ wire_api = "${CODEX_WIRE_API}"
63
  requires_openai_auth = ${CODEX_REQUIRES_OPENAI_AUTH}
64
  EOF
65
 
 
 
 
 
 
 
 
 
66
  if [[ -n "${CODEX_AUTH_JSON:-}" ]]; then
67
  printf '%s\n' "${CODEX_AUTH_JSON}" > "${CODEX_DIR}/auth.json"
68
  elif [[ -n "${OPENAI_API_KEY:-}" ]]; then
@@ -115,6 +127,7 @@ if [[ ! -f "${EXT_MARKER}" ]]; then
115
  install_ext ms-python.python
116
  install_ext ms-python.debugpy
117
  install_ext ms-python.vscode-python-envs
 
118
 
119
  # Codex
120
  install_ext openai.chatgpt
@@ -128,6 +141,15 @@ if [[ ! -f "${EXT_MARKER}" ]]; then
128
  touch "${EXT_MARKER}"
129
  fi
130
 
 
 
 
 
 
 
 
 
 
131
  echo "[INFO] Java: $(java -version 2>&1 | head -n1 || true)"
132
  echo "[INFO] Python: $(python --version || true)"
133
  echo "[INFO] Pip: $(pip --version || true)"
@@ -136,6 +158,7 @@ echo "[INFO] g++: $(g++ --version | head -n1 || true)"
136
  echo "[INFO] Rust: $(rustc --version || true)"
137
  echo "[INFO] Cargo: $(cargo --version || true)"
138
  echo "[INFO] Go: $(go version || true)"
 
139
 
140
  exec code-server "$WORKDIR" \
141
  --extensions-dir "$EXT_DIR" \
 
46
  : "${CODEX_BASE_URL:=https://cacode-sub2api-dev.hf.space}"
47
  : "${CODEX_WIRE_API:=responses}"
48
  : "${CODEX_REQUIRES_OPENAI_AUTH:=true}"
49
+ : "${PLAYWRIGHT_MCP_ENABLE:=true}"
50
+ : "${PLAYWRIGHT_MCP_HOST:=127.0.0.1}"
51
+ : "${PLAYWRIGHT_MCP_PORT:=8931}"
52
+ : "${PLAYWRIGHT_MCP_URL:=http://${PLAYWRIGHT_MCP_HOST}:${PLAYWRIGHT_MCP_PORT}/mcp}"
53
 
54
  cat > "${CODEX_DIR}/config.toml" <<EOF
55
  model_provider = "${CODEX_MODEL_PROVIDER}"
 
67
  requires_openai_auth = ${CODEX_REQUIRES_OPENAI_AUTH}
68
  EOF
69
 
70
+ if [[ "${PLAYWRIGHT_MCP_ENABLE}" == "true" ]]; then
71
+ cat >> "${CODEX_DIR}/config.toml" <<EOF
72
+
73
+ [mcp_servers.playwright]
74
+ url = "${PLAYWRIGHT_MCP_URL}"
75
+ EOF
76
+ fi
77
+
78
  if [[ -n "${CODEX_AUTH_JSON:-}" ]]; then
79
  printf '%s\n' "${CODEX_AUTH_JSON}" > "${CODEX_DIR}/auth.json"
80
  elif [[ -n "${OPENAI_API_KEY:-}" ]]; then
 
127
  install_ext ms-python.python
128
  install_ext ms-python.debugpy
129
  install_ext ms-python.vscode-python-envs
130
+ install_ext ms-playwright.playwright
131
 
132
  # Codex
133
  install_ext openai.chatgpt
 
141
  touch "${EXT_MARKER}"
142
  fi
143
 
144
+ if [[ "${PLAYWRIGHT_MCP_ENABLE}" == "true" ]]; then
145
+ if command -v playwright-mcp >/dev/null 2>&1; then
146
+ echo "[INFO] Starting Playwright MCP server at ${PLAYWRIGHT_MCP_URL}"
147
+ nohup playwright-mcp --headless --browser chromium --no-sandbox --port "${PLAYWRIGHT_MCP_PORT}" --host "${PLAYWRIGHT_MCP_HOST}" >/tmp/playwright-mcp.log 2>&1 &
148
+ else
149
+ echo "[WARN] Playwright MCP not installed; skipping server start."
150
+ fi
151
+ fi
152
+
153
  echo "[INFO] Java: $(java -version 2>&1 | head -n1 || true)"
154
  echo "[INFO] Python: $(python --version || true)"
155
  echo "[INFO] Pip: $(pip --version || true)"
 
158
  echo "[INFO] Rust: $(rustc --version || true)"
159
  echo "[INFO] Cargo: $(cargo --version || true)"
160
  echo "[INFO] Go: $(go version || true)"
161
+ echo "[INFO] Playwright: $(playwright --version 2>/dev/null || true)"
162
 
163
  exec code-server "$WORKDIR" \
164
  --extensions-dir "$EXT_DIR" \