Spaces:
Running
Running
| set -euo pipefail | |
| PORT="${PORT:-7860}" | |
| if [[ -z "${PASSWORD:-}" && -z "${HASHED_PASSWORD:-}" ]]; then | |
| echo "[ERROR] Missing PASSWORD/HASHED_PASSWORD secret." | |
| exit 1 | |
| fi | |
| if [[ -d "/data" ]]; then | |
| WORKDIR="/data/workspace" | |
| EXT_DIR="/data/code-server/extensions" | |
| USER_DATA_DIR="/data/code-server/user-data" | |
| CODEX_DIR="/data/.codex" | |
| else | |
| WORKDIR="${HOME}/workspace" | |
| EXT_DIR="${HOME}/.local/share/code-server/extensions" | |
| USER_DATA_DIR="${HOME}/.local/share/code-server/user-data" | |
| CODEX_DIR="${HOME}/.codex" | |
| fi | |
| mkdir -p "$WORKDIR" "$EXT_DIR" "$USER_DATA_DIR" "${USER_DATA_DIR}/User" "${HOME}/.config/code-server" "$CODEX_DIR" | |
| cat > "${HOME}/.config/code-server/config.yaml" <<EOF | |
| bind-addr: 0.0.0.0:${PORT} | |
| auth: password | |
| cert: false | |
| EOF | |
| if [[ -n "${HASHED_PASSWORD:-}" ]]; then | |
| echo "hashed-password: ${HASHED_PASSWORD}" >> "${HOME}/.config/code-server/config.yaml" | |
| else | |
| echo "password: ${PASSWORD}" >> "${HOME}/.config/code-server/config.yaml" | |
| fi | |
| # Codex config.toml | |
| : "${CODEX_MODEL_PROVIDER:=sub2api}" | |
| : "${CODEX_MODEL:=gpt-5.3-codex}" | |
| : "${CODEX_REASONING_EFFORT:=high}" | |
| : "${CODEX_NETWORK_ACCESS:=enabled}" | |
| : "${CODEX_DISABLE_RESPONSE_STORAGE:=true}" | |
| : "${CODEX_WSL_ACK:=true}" | |
| : "${CODEX_VERBOSITY:=high}" | |
| : "${CODEX_PROVIDER_NAME:=sub2api}" | |
| : "${CODEX_BASE_URL:=https://cacode-sub2api.hf.space}" | |
| : "${CODEX_WIRE_API:=responses}" | |
| : "${CODEX_REQUIRES_OPENAI_AUTH:=true}" | |
| cat > "${CODEX_DIR}/config.toml" <<EOF | |
| model_provider = "${CODEX_MODEL_PROVIDER}" | |
| model = "${CODEX_MODEL}" | |
| model_reasoning_effort = "${CODEX_REASONING_EFFORT}" | |
| network_access = "${CODEX_NETWORK_ACCESS}" | |
| disable_response_storage = ${CODEX_DISABLE_RESPONSE_STORAGE} | |
| windows_wsl_setup_acknowledged = ${CODEX_WSL_ACK} | |
| model_verbosity = "${CODEX_VERBOSITY}" | |
| [model_providers.${CODEX_PROVIDER_NAME}] | |
| name = "${CODEX_PROVIDER_NAME}" | |
| base_url = "${CODEX_BASE_URL}" | |
| wire_api = "${CODEX_WIRE_API}" | |
| requires_openai_auth = ${CODEX_REQUIRES_OPENAI_AUTH} | |
| EOF | |
| if [[ -n "${CODEX_AUTH_JSON:-}" ]]; then | |
| printf '%s\n' "${CODEX_AUTH_JSON}" > "${CODEX_DIR}/auth.json" | |
| elif [[ -n "${OPENAI_API_KEY:-}" ]]; then | |
| cat > "${CODEX_DIR}/auth.json" <<EOF | |
| { | |
| "OPENAI_API_KEY": "${OPENAI_API_KEY}" | |
| } | |
| EOF | |
| fi | |
| chmod 600 "${CODEX_DIR}/config.toml" 2>/dev/null || true | |
| chmod 600 "${CODEX_DIR}/auth.json" 2>/dev/null || true | |
| if [[ "${CODEX_DIR}" != "${HOME}/.codex" ]]; then | |
| rm -rf "${HOME}/.codex" | |
| ln -s "${CODEX_DIR}" "${HOME}/.codex" | |
| fi | |
| # 默认中文界面 | |
| cat > "${USER_DATA_DIR}/User/locale.json" <<EOF | |
| { | |
| "locale": "zh-cn" | |
| } | |
| EOF | |
| # 首次启动安装扩展(幂等) | |
| EXT_MARKER="${USER_DATA_DIR}/.extensions_installed" | |
| if [[ ! -f "${EXT_MARKER}" ]]; then | |
| echo "[INFO] Installing extensions on first boot..." | |
| install_ext() { | |
| code-server --extensions-dir "${EXT_DIR}" --install-extension "$1" || true | |
| } | |
| # 你指定的 3 个(尽量装) | |
| install_ext ms-vscode.cpptools | |
| install_ext ms-vscode.cpptools-themes | |
| install_ext ms-vscode.cpp-devtools | |
| install_ext ms-vscode.cmake-tools | |
| install_ext danielpinto8zz6.c-cpp-compile-run | |
| install_ext redhat.java | |
| install_ext vscjava.vscode-java-debug | |
| install_ext vscjava.vscode-java-test | |
| install_ext vscjava.vscode-maven | |
| install_ext vscjava.vscode-gradle | |
| install_ext vscjava.vscode-java-dependency | |
| install_ext ms-python.vscode-pylance | |
| install_ext ms-python.python | |
| install_ext ms-python.debugpy | |
| install_ext ms-python.vscode-python-envs | |
| # Codex | |
| install_ext openai.chatgpt | |
| # 若微软扩展不可用,装稳定替代 | |
| install_ext MS-CEINTL.vscode-language-pack-zh-hans | |
| install_ext llvm-vs-code-extensions.vscode-clangd | |
| install_ext ms-vscode.makefile-tools | |
| install_ext vadimcn.vscode-lldb | |
| touch "${EXT_MARKER}" | |
| fi | |
| echo "[INFO] Java: $(java -version 2>&1 | head -n1 || true)" | |
| echo "[INFO] Python: $(python --version || true)" | |
| echo "[INFO] Pip: $(pip --version || true)" | |
| echo "[INFO] Node: $(node --version || true)" | |
| echo "[INFO] g++: $(g++ --version | head -n1 || true)" | |
| exec code-server "$WORKDIR" \ | |
| --extensions-dir "$EXT_DIR" \ | |
| --user-data-dir "$USER_DATA_DIR" \ | |
| --disable-telemetry \ | |
| --disable-update-check \ | |
| --log warn |