init
This commit is contained in:
204
back/scripts/quick-release.sh
Executable file
204
back/scripts/quick-release.sh
Executable file
@@ -0,0 +1,204 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для быстрого создания релиза Port Knocker
|
||||
# Использование: ./docs/scripts/quick-release.sh v1.0.7
|
||||
|
||||
set -e
|
||||
|
||||
# Цвета для вывода
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Функция для вывода сообщений
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Проверка аргументов
|
||||
VERSION=$1
|
||||
if [ -z "$VERSION" ]; then
|
||||
log_error "Не указана версия!"
|
||||
echo "Использование: $0 <version>"
|
||||
echo "Пример: $0 v1.0.4"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверка формата версии
|
||||
if [[ ! $VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
log_error "Неверный формат версии: $VERSION"
|
||||
echo "Используйте формат: vX.Y.Z (например: v1.0.4)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_info "Начинаем создание релиза $VERSION..."
|
||||
|
||||
# Проверка зависимостей
|
||||
log_info "Проверяем зависимости..."
|
||||
command -v go >/dev/null 2>&1 || {
|
||||
log_error "Go не установлен"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Проверка версии Go
|
||||
GO_VERSION=$(go version | awk '{print $3}' | sed 's/go//')
|
||||
log_info "Версия Go: $GO_VERSION"
|
||||
if [[ "$(echo -e "1.20\n$GO_VERSION" | sort -V | head -n1)" != "1.20" ]]; then
|
||||
log_warning "Рекомендуется Go 1.20+ для лучшей совместимости"
|
||||
fi
|
||||
command -v git >/dev/null 2>&1 || {
|
||||
log_error "Git не установлен"
|
||||
exit 1
|
||||
}
|
||||
command -v tar >/dev/null 2>&1 || {
|
||||
log_error "tar не установлен"
|
||||
exit 1
|
||||
}
|
||||
command -v zip >/dev/null 2>&1 || {
|
||||
log_error "zip не установлен"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Проверка статуса git
|
||||
log_info "Проверяем статус Git..."
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
log_warning "Есть незакоммиченные изменения!"
|
||||
echo "Текущие изменения:"
|
||||
git status --short
|
||||
read -p "Продолжить? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
log_info "Отменено пользователем"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Обновление версии
|
||||
log_info "Обновляем версию в main.go..."
|
||||
sed -i "s/Version.*=.*\".*\"/Version = \"$VERSION\"/" main.go
|
||||
|
||||
log_info "Обновляем версию в README.md..."
|
||||
sed -i "s/Версия.*: [0-9.]*/Версия**: ${VERSION#v}/" README.md
|
||||
|
||||
# Проверка изменений
|
||||
log_info "Проверяем изменения..."
|
||||
if [ -z "$(git diff)" ]; then
|
||||
log_warning "Нет изменений для коммита"
|
||||
else
|
||||
echo "Изменения:"
|
||||
git diff --stat
|
||||
fi
|
||||
|
||||
# Коммит изменений
|
||||
log_info "Коммитим изменения..."
|
||||
git add .
|
||||
git commit -m "Prepare for release $VERSION"
|
||||
git push origin main
|
||||
|
||||
# Сборка бинарников
|
||||
log_info "Собираем бинарники для всех платформ..."
|
||||
export VERSION_NUM="${VERSION#v}"
|
||||
export BUILD_TIME=$(date -u '+%Y-%m-%d_%H:%M:%S')
|
||||
|
||||
# Функция сборки для платформы
|
||||
build_for_platform() {
|
||||
local os=$1
|
||||
local arch=$2
|
||||
local suffix=$3
|
||||
local binary_name="port-knocker-$suffix"
|
||||
|
||||
log_info "Собираем для $os/$arch..."
|
||||
GOOS=$os GOARCH=$arch go build \
|
||||
-ldflags "-X main.Version=${VERSION_NUM} -X main.BuildTime=${BUILD_TIME} -s -w" \
|
||||
-o "$binary_name" .
|
||||
|
||||
# Создание архива
|
||||
if [[ "$os" == "windows" ]]; then
|
||||
zip "${binary_name}.zip" "$binary_name"
|
||||
else
|
||||
tar -czf "${binary_name}.tar.gz" "$binary_name"
|
||||
fi
|
||||
|
||||
# Удаление бинарника
|
||||
rm "$binary_name"
|
||||
|
||||
log_success "Создан архив для $os/$arch"
|
||||
}
|
||||
|
||||
# Сборка для всех платформ
|
||||
build_for_platform "linux" "amd64" "linux-amd64"
|
||||
build_for_platform "linux" "arm64" "linux-arm64"
|
||||
build_for_platform "windows" "amd64" "windows-amd64.exe"
|
||||
build_for_platform "darwin" "amd64" "darwin-amd64"
|
||||
build_for_platform "darwin" "arm64" "darwin-arm64"
|
||||
|
||||
# Проверка созданных файлов
|
||||
log_info "Проверяем созданные архивы..."
|
||||
ls -la port-knocker-*
|
||||
|
||||
# Создание Git тега
|
||||
log_info "Создаем Git тег..."
|
||||
# Читаем release-notes.md и сохраняем содержимое в переменную NOTES
|
||||
NOTES=$(cat docs/scripts/release-notes.md)
|
||||
# Заменяем все переменные вида $VERSION в NOTES на их значения
|
||||
NOTES=$(echo "$NOTES" | sed "s/\\\$VERSION/$VERSION/g")
|
||||
|
||||
git tag -a "$VERSION" -m "$NOTES"
|
||||
|
||||
git push origin "$VERSION"
|
||||
|
||||
# Проверка GitHub CLI
|
||||
if command -v gh >/dev/null 2>&1; then
|
||||
log_info "GitHub CLI найден. Создаем релиз..."
|
||||
|
||||
# Проверка авторизации
|
||||
if gh auth status >/dev/null 2>&1; then
|
||||
log_info "Создаем релиз на GitHub..."
|
||||
gh release create "$VERSION" \
|
||||
--title "Port Knocker $VERSION" \
|
||||
--notes "$NOTES" \
|
||||
--draft=false \
|
||||
--prerelease=false
|
||||
|
||||
log_info "Загружаем бинарники..."
|
||||
gh release upload "$VERSION" port-knocker-*.tar.gz port-knocker-*.zip
|
||||
|
||||
log_success "Релиз $VERSION создан и опубликован на GitHub!"
|
||||
else
|
||||
log_warning "GitHub CLI не авторизован. Создайте релиз вручную."
|
||||
log_info "Перейдите на: https://github.com/Direct-Dev-Ru/port-knocker/releases"
|
||||
log_info "Загрузите файлы: port-knocker-*.tar.gz port-knocker-*.zip"
|
||||
fi
|
||||
else
|
||||
log_warning "GitHub CLI не установлен. Создайте релиз вручную."
|
||||
log_info "Перейдите на: https://github.com/Direct-Dev-Ru/port-knocker/releases"
|
||||
log_info "Загрузите файлы: port-knocker-*.tar.gz port-knocker-*.zip"
|
||||
fi
|
||||
|
||||
# Очистка
|
||||
log_info "Очищаем временные файлы..."
|
||||
rm -f port-knocker-*.tar.gz port-knocker-*.zip
|
||||
|
||||
log_success "Релиз $VERSION успешно создан!"
|
||||
log_info "Тег: $VERSION"
|
||||
log_info "Релиз: https://github.com/Direct-Dev-Ru/port-knocker/releases/tag/$VERSION"
|
||||
|
||||
echo
|
||||
log_info "Следующие шаги:"
|
||||
echo "1. Проверьте релиз на GitHub"
|
||||
echo "2. Протестируйте скачанные бинарники"
|
||||
echo "3. Обновите документацию если нужно"
|
Reference in New Issue
Block a user