Refactor install script for improved logging and setup process

This commit is contained in:
Даниил Грабарь
2026-05-19 17:15:01 +03:00
parent d1c250e6b9
commit 5315767638
+15 -28
View File
@@ -18,10 +18,10 @@ INSTALL_DIR="${COBOT_INSTALL_DIR:-$HOME/.lwc/ros2_iiwa7}"
# Определяем интерактивный режим: при запуске через curl | bash stdin не является терминалом # Определяем интерактивный режим: при запуске через curl | bash stdin не является терминалом
if [ -t 0 ]; then IS_INTERACTIVE=true; else IS_INTERACTIVE=false; fi if [ -t 0 ]; then IS_INTERACTIVE=true; else IS_INTERACTIVE=false; fi
log_info() { echo -e "${CYAN}[*]${NC} $1"; } log_info() { echo -e "${CYAN}[*]${NC} $1"; }
log_success() { echo -e "${GREEN}[ok]${NC} $1"; } log_success() { echo -e "${GREEN}[ok]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[!]${NC} $1"; } log_warn() { echo -e "${YELLOW}[!]${NC} $1"; }
log_error() { echo -e "${RED}[err]${NC} $1"; exit 1; } log_error() { echo -e "${RED}[err]${NC} $1"; exit 1; }
print_banner() { print_banner() {
echo "" echo ""
@@ -82,8 +82,6 @@ check_docker() {
return return
fi fi
log_info "Installing Docker via get.docker.com..." log_info "Installing Docker via get.docker.com..."
# Скачиваем установщик во временный файл, а не запускаем через pipe —
# так видны ошибки сети отдельно от ошибок самого установщика
local _installer local _installer
_installer="$(mktemp /tmp/lwc-docker.XXXXXX.sh)" _installer="$(mktemp /tmp/lwc-docker.XXXXXX.sh)"
if ! curl -fsSL https://get.docker.com -o "$_installer"; then if ! curl -fsSL https://get.docker.com -o "$_installer"; then
@@ -116,7 +114,6 @@ install_uv() {
return return
fi fi
log_info "Installing uv..." log_info "Installing uv..."
# Два отдельных файла: лог и установщик — чтобы различать ошибки скачивания и установки
local _log _installer local _log _installer
_log="$(mktemp /tmp/lwc-uv.XXXXXX.log)" _log="$(mktemp /tmp/lwc-uv.XXXXXX.log)"
_installer="$(mktemp /tmp/lwc-uv-installer.XXXXXX.sh)" _installer="$(mktemp /tmp/lwc-uv-installer.XXXXXX.sh)"
@@ -149,7 +146,6 @@ check_python() {
log_success "$ver found" log_success "$ver found"
return return
fi fi
# uv умеет скачивать и изолировать нужную версию Python без sudo
log_info "Installing Python $PYTHON_VERSION via uv..." log_info "Installing Python $PYTHON_VERSION via uv..."
"$UV_CMD" python install "$PYTHON_VERSION" || log_error "Failed to install Python $PYTHON_VERSION" "$UV_CMD" python install "$PYTHON_VERSION" || log_error "Failed to install Python $PYTHON_VERSION"
log_success "Python $PYTHON_VERSION installed" log_success "Python $PYTHON_VERSION installed"
@@ -176,7 +172,6 @@ resolve_install_dir() {
install_cobot() { install_cobot() {
log_info "Installing cobot CLI..." log_info "Installing cobot CLI..."
cd "$INSTALL_DIR" cd "$INSTALL_DIR"
# uv tool install создаёт изолированное окружение и кладёт бинарник cobot в ~/.local/bin
"$UV_CMD" tool install --python "$PYTHON_VERSION" --editable . \ "$UV_CMD" tool install --python "$PYTHON_VERSION" --editable . \
|| log_error "Failed to install cobot" || log_error "Failed to install cobot"
log_success "cobot installed" log_success "cobot installed"
@@ -194,8 +189,8 @@ setup_path() {
if [[ ":$PATH:" != *":$bin_dir:"* ]]; then if [[ ":$PATH:" != *":$bin_dir:"* ]]; then
echo "" >> "$shell_rc" echo "" >> "$shell_rc"
echo "export PATH=\"$bin_dir:\$PATH\"" >> "$shell_rc" echo "export PATH=\"$bin_dir:\$PATH\"" >> "$shell_rc"
# Обновляем PATH внутри скрипта — нужно чтобы cobot setup сработал ниже
export PATH="$bin_dir:$PATH" export PATH="$bin_dir:$PATH"
log_warn "Run 'source $shell_rc' or open a new terminal to use 'cobot'"
fi fi
command -v cobot &>/dev/null && log_success "cobot -> $(command -v cobot)" command -v cobot &>/dev/null && log_success "cobot -> $(command -v cobot)"
} }
@@ -209,25 +204,17 @@ print_success() {
echo "" echo ""
} }
ask_run_setup() { run_setup() {
# В неинтерактивном режиме (curl | bash) пропускаем вопрос log_info "Running cobot setup..."
if [ "$IS_INTERACTIVE" = false ]; then cobot setup
log_info "Run 'cobot setup' to configure the framework"
return
fi
printf "Run setup now? [y/N] " if [ "$IS_INTERACTIVE" = false ]; then
read -r answer echo ""
case "$answer" in echo " To apply PATH changes in this terminal, run:"
[yY]|[yY][eE][sS]) echo " source ~/.bashrc (bash)"
cobot setup echo " source ~/.zshrc (zsh)"
;; echo ""
*) fi
echo ""
echo "To configure the framework, run: cobot setup"
echo ""
;;
esac
} }
main() { main() {
@@ -241,7 +228,7 @@ main() {
install_cobot install_cobot
setup_path setup_path
print_success print_success
ask_run_setup run_setup
} }
main main