#!/bin/sh # ════════════════════════════════════════════════════════════════════════════ # Обновление плагинов профиля web (и фикс bind-адреса code-server после этого). # CLI-апдейт dsh НЕ трогает плагины — они обновляются отдельно. # # Использование: # scripts/update-plugins.sh [--add github:/] [--no-restart] # ════════════════════════════════════════════════════════════════════════════ set -eu CONTAINER=${DSH_CONTAINER_NAME:-dsh} ADD="" RESTART=1 while [ $# -gt 0 ]; do case "$1" in --add) ADD="$2"; shift 2 ;; --no-restart) RESTART=0; shift ;; *) echo "unknown arg: $1" >&2; exit 64 ;; esac done docker inspect -f '{{.State.Running}}' "$CONTAINER" >/dev/null 2>&1 || { echo "Контейнер '$CONTAINER' не запущен" >&2; exit 1; } # Внутренний редирект: без него docker exec может виснуть на фоновом потомке pnpm. if [ -n "$ADD" ]; then echo "=== Установка плагина: $ADD" docker exec "$CONTAINER" sh -c "dsh plugin --profile web add '$ADD' >/tmp/dsh-plugin.log 2>&1; tail -5 /tmp/dsh-plugin.log" fi echo "=== Обновление всех плагинов профиля web" docker exec "$CONTAINER" sh -c "dsh plugin --profile web update >/tmp/dsh-plugin.log 2>&1; tail -20 /tmp/dsh-plugin.log" echo "=== Фикс bind-адреса code-server (127.0.0.1 -> 0.0.0.0), иначе порт 18500 снаружи refused" docker exec "$CONTAINER" sh -c \ "sed -i \"s/'--bind-addr', '127.0.0.1:' + port/'--bind-addr', '0.0.0.0:' + port/\" /data/dsh/profiles/web/node_modules/dsh-vsceditor/lib/host.js 2>/dev/null || echo '(dsh-vsceditor не установлен — пропуск)'" if [ "$RESTART" = 1 ]; then echo "=== Рестарт контейнера (pnpm пересобрал граф node_modules под живой процесс)" docker restart "$CONTAINER" echo "ОК. Дождитесь healthy: docker inspect -f '{{.State.Health.Status}}' $CONTAINER" fi