133 lines
4.8 KiB
Bash
Executable File
133 lines
4.8 KiB
Bash
Executable File
#!/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"
|
||
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 diff-index --quiet HEAD --; then
|
||
# echo "Ошибка: Есть незакоммиченные изменения. Сначала закоммитьте их."
|
||
# exit 1
|
||
# 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 " - Изменения отправлены в удаленный репозиторий" |