| #!/bin/bash |
| |
| |
| |
| |
| |
| set -euo pipefail |
|
|
| |
| if [ -d "/data" ]; then |
| DATA_DIR="/data" |
| echo "β
/data storage bucket mounted" |
| else |
| DATA_DIR="/root/.local/codeserver-data" |
| echo "β οΈ /data not found β using local storage (not persistent)" |
| 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" \ |
| "$CS_EXTENSIONS_DIR" |
|
|
| |
| SETTINGS_FILE="$CS_USER_DATA/User/settings.json" |
| if [ ! -f "$SETTINGS_FILE" ]; then |
| cat > "$SETTINGS_FILE" << 'SETTINGS' |
| { |
| "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, |
| "editor.guides.bracketPairs": true, |
| "editor.smoothScrolling": true, |
| "editor.cursorBlinking": "smooth", |
| "terminal.integrated.fontSize": 13, |
| "terminal.integrated.scrollback": 5000, |
| "terminal.integrated.defaultProfile.linux": "bash", |
| "files.autoSave": "afterDelay", |
| "files.autoSaveDelay": 1000, |
| "files.trimTrailingWhitespace": true, |
| "workbench.startupEditor": "none", |
| "git.autofetch": true, |
| "git.confirmSync": false, |
| "extensions.autoUpdate": false, |
| "telemetry.telemetryLevel": "off", |
| "update.mode": "none" |
| } |
| SETTINGS |
| echo "β
VS Code settings written" |
| fi |
|
|
| |
| mkdir -p /root/.config/code-server |
| cat > /root/.config/code-server/config.yaml << CSCONFIG |
| bind-addr: 0.0.0.0:7860 |
| auth: password |
| password: ${PASSWORD:-codeserver123} |
| cert: false |
| user-data-dir: ${CS_USER_DATA} |
| extensions-dir: ${CS_EXTENSIONS_DIR} |
| CSCONFIG |
|
|
| |
| git config --global init.defaultBranch main |
| git config --global pull.rebase false |
| git config --global core.editor "code --wait" |
| [ -n "${GIT_USER_NAME:-}" ] && git config --global user.name "$GIT_USER_NAME" |
| [ -n "${GIT_USER_EMAIL:-}" ] && git config --global user.email "$GIT_USER_EMAIL" |
|
|
| if [ -n "${GITHUB_TOKEN:-}" ]; then |
| git config --global \ |
| url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/" |
| echo "β
GitHub token configured" |
| fi |
|
|
| |
| if [ -n "${HF_TOKEN:-}" ]; then |
| huggingface-cli login --token "$HF_TOKEN" --add-to-git-credential 2>/dev/null || true |
| echo "β
HuggingFace token configured" |
| fi |
|
|
| |
| README_FILE="$WORKSPACE/README.md" |
| if [ ! -f "$README_FILE" ]; then |
| |
| tee "$README_FILE" > /dev/null << 'WSREADME' |
| |
|
|
| Your persistent workspace is backed by HF Storage Bucket at `/data`. |
|
|
| |
| | Path | Purpose | |
| |------|---------| |
| | `/data/workspace` | Your code (this folder) | |
| | `/data/vscode-user-data` | Settings & keybindings | |
| | `/root/.local/share/code-server/extensions` | Extensions (image-local) | |
|
|
| |
| Access any running server: |
| https://-.hf.space/proxy/PORT/ |
| Example: app on port 3000 β `/proxy/3000/` |
|
|
| |
| | Secret | Purpose | |
| |--------|---------| |
| | `PASSWORD` | code-server login password | |
| | `GITHUB_TOKEN` | Private GitHub repo auth | |
| | `HF_TOKEN` | HuggingFace CLI auth | |
| | `GIT_USER_NAME` | Git commit name | |
| | `GIT_USER_EMAIL` | Git commit email | |
|
|
| |
| - Python 3, pip, venv, numpy, pandas, black |
| - Node.js 20, npm, yarn, pnpm |
| - Git, GitHub CLI (gh) |
| - build-essential, cmake, curl, wget, jq, ripgrep |
| - Extensions: Python, Jupyter, Prettier, GitLens, Material Icons |
| WSREADME |
| echo "β
Workspace README created" |
| fi |
|
|
| |
| echo "" |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo "β π₯οΈ Code Server starting... β" |
| echo "β βββββββββββββββββββββββββββββββββββββββββββββββββββ£" |
| echo "β Workspace : $WORKSPACE" |
| echo "β Extensions : $CS_EXTENSIONS_DIR" |
| echo "β Port : 7860" |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo "" |
|
|
| exec code-server \ |
| --config /root/.config/code-server/config.yaml \ |
| --disable-telemetry \ |
| --disable-update-check \ |
| "$WORKSPACE" \ |
| 2>&1 | tee -a "$CS_LOGS/code-server.log" |