Files
unlimitedcoding/codex_old/update-codex.sh
2026-03-10 06:02:20 +00:00

186 lines
6.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#
# Универсальный скрипт обновления OpenAI Codex CLI
# Автоматически скачивает последнюю версию с GitHub Releases
# Использует musl версию для совместимости со старыми системами
#
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Определяем путь к codex
CODEX_PATH=$(which codex 2>/dev/null || echo "/usr/local/bin/codex")
CODEX_DIR=$(dirname "$CODEX_PATH")
TEMP_DIR="/tmp/codex-update-$$"
GITHUB_API="https://api.github.com/repos/openai/codex/releases/latest"
# Определяем архитектуру - используем musl для совместимости
ARCH=$(uname -m)
case "$ARCH" in
x86_64)
BINARY_SUFFIX="x86_64-unknown-linux-musl"
;;
aarch64|arm64)
BINARY_SUFFIX="aarch64-unknown-linux-musl"
;;
*)
echo -e "${RED}Неподдерживаемая архитектура: $ARCH${NC}"
exit 1
;;
esac
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} OpenAI Codex CLI Updater${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# Функция получения текущей версии
get_current_version() {
if command -v codex &> /dev/null; then
local ver=$(codex --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
if [ -n "$ver" ]; then
echo "$ver"
else
echo "не работает"
fi
else
echo "не установлен"
fi
}
# Функция получения последней версии с GitHub
get_latest_version() {
curl -s "$GITHUB_API" | grep -oP '"tag_name":\s*"rust-v\K[0-9]+\.[0-9]+\.[0-9]+' | head -1
}
# Функция сравнения версий (возвращает 0 если нужно обновление)
version_gt() {
test "$(printf '%s\n' "$1" "$2" | sort -V | tail -n 1)" != "$2"
}
# Получаем версии
echo -e "${YELLOW}Проверка версий...${NC}"
CURRENT_VERSION=$(get_current_version)
echo -e "Текущая версия: ${BLUE}$CURRENT_VERSION${NC}"
LATEST_VERSION=$(get_latest_version)
if [ -z "$LATEST_VERSION" ]; then
echo -e "${RED}Не удалось получить информацию о последней версии${NC}"
exit 1
fi
echo -e "Последняя версия: ${GREEN}$LATEST_VERSION${NC}"
echo ""
# Проверяем нужно ли обновление
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo -e "${GREEN}✓ Codex уже обновлён до последней версии!${NC}"
exit 0
fi
# Если текущая не работает или не установлена - всегда обновляем
if [ "$CURRENT_VERSION" != "не установлен" ] && [ "$CURRENT_VERSION" != "не работает" ]; then
if ! version_gt "$LATEST_VERSION" "$CURRENT_VERSION"; then
echo -e "${GREEN}✓ Текущая версия актуальна или новее${NC}"
exit 0
fi
fi
echo -e "${YELLOW}Требуется обновление: $CURRENT_VERSION$LATEST_VERSION${NC}"
echo ""
# Формируем URL для скачивания
DOWNLOAD_URL="https://github.com/openai/codex/releases/download/rust-v${LATEST_VERSION}/codex-${BINARY_SUFFIX}.tar.gz"
echo -e "${BLUE}Архитектура: $ARCH (${BINARY_SUFFIX})${NC}"
echo -e "${BLUE}URL: $DOWNLOAD_URL${NC}"
echo ""
# Создаём временную директорию
mkdir -p "$TEMP_DIR"
cd "$TEMP_DIR"
# Скачиваем
echo -e "${YELLOW}Скачивание...${NC}"
if ! curl -L -# -o codex.tar.gz "$DOWNLOAD_URL"; then
echo -e "${RED}Ошибка скачивания${NC}"
rm -rf "$TEMP_DIR"
exit 1
fi
# Распаковываем
echo -e "${YELLOW}Распаковка...${NC}"
tar -xzf codex.tar.gz
# Ищем бинарник (может называться codex или codex-$BINARY_SUFFIX)
BINARY_FILE=""
if [ -f "codex" ]; then
BINARY_FILE="codex"
elif [ -f "codex-${BINARY_SUFFIX}" ]; then
BINARY_FILE="codex-${BINARY_SUFFIX}"
else
# Ищем любой файл начинающийся с codex (исключая .tar.gz)
BINARY_FILE=$(find . -maxdepth 1 -name 'codex*' -type f ! -name '*.gz' | head -1)
fi
if [ -z "$BINARY_FILE" ] || [ ! -f "$BINARY_FILE" ]; then
echo -e "${RED}Бинарник codex не найден в архиве${NC}"
ls -la
rm -rf "$TEMP_DIR"
exit 1
fi
echo -e "${GREEN}Найден бинарник: $BINARY_FILE${NC}"
# Проверяем запущен ли codex и завершаем
if pgrep -x "codex" > /dev/null; then
echo -e "${YELLOW}Обнаружен запущенный процесс codex, завершаем...${NC}"
pkill -9 -x "codex" 2>/dev/null || true
sleep 1
echo -e "${GREEN}✓ Процесс завершён${NC}"
fi
# Устанавливаем
echo -e "${YELLOW}Установка в $CODEX_PATH...${NC}"
chmod +x "$BINARY_FILE"
# Проверяем нужен ли sudo
if [ -w "$CODEX_DIR" ]; then
mv -f "$BINARY_FILE" "$CODEX_PATH"
else
echo -e "${YELLOW}Требуются права sudo для записи в $CODEX_DIR${NC}"
sudo mv -f "$BINARY_FILE" "$CODEX_PATH"
fi
# Очистка
cd /
rm -rf "$TEMP_DIR"
# Обновляем PATH кэш
hash -r 2>/dev/null || true
# Проверяем результат
echo ""
NEW_VERSION=$(get_current_version)
echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}✓ Обновление завершено!${NC}"
echo -e "${BLUE}========================================${NC}"
echo -e "Было: ${RED}$CURRENT_VERSION${NC}"
echo -e "Стало: ${GREEN}$NEW_VERSION${NC}"
echo ""
# Финальная проверка
if [ "$NEW_VERSION" = "$LATEST_VERSION" ]; then
echo -e "${GREEN}✓ Версия успешно обновлена до $LATEST_VERSION${NC}"
elif [ "$NEW_VERSION" = "не работает" ]; then
echo -e "${RED}✗ Бинарник не запускается! Проверьте зависимости.${NC}"
ldd "$CODEX_PATH" 2>&1 | grep "not found" || true
else
echo -e "${YELLOW}⚠ Версия после установки: $NEW_VERSION (ожидалась $LATEST_VERSION)${NC}"
fi