File size: 4,235 Bytes
585219d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d85f0a5
585219d
d85f0a5
 
 
 
585219d
d85f0a5
 
 
 
 
 
 
 
 
 
585219d
d85f0a5
 
 
 
 
 
 
 
 
 
 
 
 
 
585219d
d85f0a5
585219d
 
d85f0a5
585219d
 
 
 
 
 
d85f0a5
585219d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/bash
set -euo pipefail
LOG() { echo "[$(date '+%H:%M:%S')] $*"; }

if [ -d "/data" ]; then DATA_DIR="/data"
else DATA_DIR="/root/.local/codeserver-data"; LOG "⚠️  No /data bucket"; fi

WORKSPACE="${DATA_DIR}/workspace"
CS_USER_DATA="${DATA_DIR}/vscode-user-data"
CS_LOGS="${DATA_DIR}/logs"
CS_EXTENSIONS_DIR="/root/.local/share/code-server/extensions"

mkdir -p "$WORKSPACE" "$CS_USER_DATA/User" "$CS_LOGS"
mkdir -p /tmp/nginx-client-body /tmp/nginx-proxy

SETTINGS="$CS_USER_DATA/User/settings.json"
[ ! -f "$SETTINGS" ] && tee "$SETTINGS" > /dev/null << 'EOF'
{
  "workbench.colorTheme": "Default Dark+",
  "workbench.iconTheme": "vs-seti",
  "editor.fontSize": 14, "editor.fontFamily": "monospace",
  "editor.tabSize": 2, "editor.formatOnSave": true,
  "editor.wordWrap": "on", "editor.minimap.enabled": true,
  "editor.bracketPairColorization.enabled": true,
  "terminal.integrated.fontSize": 13,
  "terminal.integrated.scrollback": 5000,
  "files.autoSave": "afterDelay", "files.autoSaveDelay": 1000,
  "workbench.startupEditor": "none",
  "git.autofetch": true, "extensions.autoUpdate": false,
  "telemetry.telemetryLevel": "off", "update.mode": "none"
}
EOF

export PASSWORD="${PASSWORD:-codeserver123}"
mkdir -p /root/.config/code-server
cat > /root/.config/code-server/config.yaml << CONF
bind-addr: 0.0.0.0:8080
auth: password
password: ${PASSWORD}
cert: false
user-data-dir: ${CS_USER_DATA}
extensions-dir: ${CS_EXTENSIONS_DIR}
CONF

git config --global init.defaultBranch main
git config --global pull.rebase false
[ -n "${GIT_USER_NAME:-}"  ] && git config --global user.name  "$GIT_USER_NAME"
[ -n "${GIT_USER_EMAIL:-}" ] && git config --global user.email "$GIT_USER_EMAIL"
[ -n "${GITHUB_TOKEN:-}"   ] && git config --global \
  url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
[ -n "${HF_TOKEN:-}" ] && \
  huggingface-cli login --token "$HF_TOKEN" --add-to-git-credential 2>/dev/null || true

# ── 1. code-server ───────────────────────────────────────────────
LOG "πŸ’»  Starting code-server..."
code-server \
  --config /root/.config/code-server/config.yaml \
  --disable-telemetry --disable-update-check \
  "$WORKSPACE" >> "$CS_LOGS/code-server.log" 2>&1 &

# Wait for code-server to be ready
LOG "⏳  Waiting for code-server..."
for i in $(seq 1 30); do
  if curl -sf http://127.0.0.1:8080/ -o /dev/null 2>&1; then
    LOG "βœ…  code-server ready (${i}s)"; break
  fi
  sleep 1
done

# ── 2. Browser server ────────────────────────────────────────────
LOG "🌐  Starting stealth browser server..."
cd /app && python3 browser_server.py >> "$CS_LOGS/browser.log" 2>&1 &

# Playwright + Chromium launch takes time β€” wait properly
LOG "⏳  Waiting for browser server (Chromium init)..."
for i in $(seq 1 60); do
  if curl -sf http://127.0.0.1:8888/ -o /dev/null 2>&1; then
    LOG "βœ…  Browser server ready (${i}s)"; break
  fi
  if [ $i -eq 60 ]; then
    LOG "❌  Browser server failed to start. Last logs:"
    tail -20 "$CS_LOGS/browser.log"
  fi
  sleep 1
done

# ── 3. nginx ─────────────────────────────────────────────────────
echo ""
echo "╔══════════════════════════════════════════════════════╗"
echo "β•‘  πŸš€  All services ready                              β•‘"
echo "╠══════════════════════════════════════════════════════╣"
echo "β•‘  Editor  : https://<space>.hf.space/                β•‘"
echo "β•‘  Browser : https://<space>.hf.space/browser/        β•‘"
echo "β•‘  Password: $PASSWORD"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"

LOG "🌐  Starting nginx on :7860..."
exec nginx -g "daemon off;"