#!/bin/bash # Интерактивный скрипт для автоматизации релиза # Использование: ./scripts/release-interactive.sh [version] # Если версия не указана, скрипт запросит её интерактивно set -e # Остановить выполнение при ошибке # Функция для получения версии интерактивно get_version_interactive() { echo "🚀 Создание нового релиза" echo "" # Показываем текущую версию CURRENT_VERSION=$(grep 'const version = "' main.go | sed 's/const version = "\([^"]*\)"/\1/') echo "📋 Текущая версия: $CURRENT_VERSION" echo "" # Запрашиваем новую версию read -r -p "Введите новую версию (формат X.Y.Z): " VERSION # Проверяем, что версия не пустая if [ -z "$VERSION" ]; then echo "❌ Версия не может быть пустой" exit 1 fi # Проверяем формат версии if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "❌ Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)" exit 1 fi # Подтверждение echo "" echo "📝 Подтверждение:" echo " Текущая версия: $CURRENT_VERSION" echo " Новая версия: $VERSION" if [ $CURRENT_VERSION == $VERSION ]; then echo "⚠️ Новая версия совпадает с текущей. Возможно будет обновлен тег ..." fi echo "" read -r -p "Продолжить? (y/N): " CONFIRM if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then echo "❌ Релиз отменен" exit 0 fi } # Проверяем, передана ли версия как аргумент if [ $# -eq 0 ]; then # Версия не указана, запрашиваем интерактивно get_version_interactive else # Версия указана как аргумент VERSION=$1 # Проверка формата версии if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Ошибка: Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)" exit 1 fi fi echo "🚀 Начинаем релиз версии v$VERSION..." # Проверяем, что мы в git репозитории if ! git rev-parse --git-dir > /dev/null 2>&1; then echo "Ошибка: Не найден git репозиторий" exit 1 fi # Проверяем, существует ли уже тег с такой версией if git tag -l "v$VERSION" | grep -q "v$VERSION"; then echo "⚠️ Тег v$VERSION уже существует!" echo "" read -r -p "Обновить существующий тег? (y/N): " UPDATE_TAG if [[ ! $UPDATE_TAG =~ ^[Yy]$ ]]; then echo "❌ Обновление тега отменено" exit 0 fi echo "🔄 Обновляем существующий тег..." # Удаляем локальный тег git tag -d "v$VERSION" 2>/dev/null || true # Удаляем удаленный тег git push origin ":refs/tags/v$VERSION" 2>/dev/null || true echo "✅ Старый тег удален" fi # Обновляем версию в main.go echo "📝 Обновляем версию в main.go..." if [[ "$OSTYPE" == "darwin"* ]]; then # macOS sed -i '' "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go else # Linux sed -i "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go fi # Проверяем, что изменение применилось if ! grep -q "const version = \"$VERSION\"" main.go; then echo "Ошибка: Не удалось обновить версию в main.go" exit 1 fi echo "✅ Версия обновлена в main.go" # Обновляем версию в makefile echo "📝 Обновляем версию в makefile..." if [[ "$OSTYPE" == "darwin"* ]]; then # macOS sed -i '' "s/^VERSION=.*/VERSION=$VERSION/" makefile else # Linux sed -i "s/^VERSION=.*/VERSION=$VERSION/" makefile fi # Проверяем, что изменение применилось if ! grep -q "^VERSION=$VERSION" makefile; then echo "Ошибка: Не удалось обновить версию в makefile" exit 1 fi echo "✅ Версия обновлена в makefile" # Выполняем git команды echo "📦 Добавляем изменения в git..." git add . echo "💾 Создаем коммит..." git commit -m "Release v$VERSION" echo "🏷️ Создаем тег..." git tag -a "v$VERSION" -m "Release v$VERSION" echo "🚀 Отправляем изменения и теги..." git push git push --tags echo "🎉 Релиз v$VERSION успешно завершен!" echo "📋 Выполненные действия:" echo " - Обновлена версия в main.go" echo " - Обновлена версия в makefile" echo " - Создан коммит с сообщением 'Release v$VERSION'" echo " - Создан тег v$VERSION" echo " - Изменения отправлены в удаленный репозиторий"