Достижение: Добавлены скрипты и документация для релиза PDF Compressor.

- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
This commit is contained in:
Dmitriy Fofanov
2025-11-05 09:33:12 +03:00
parent f328d67080
commit ec65cfd05a
43 changed files with 5792 additions and 2 deletions

369
scripts/release-gitea.sh Normal file
View File

@@ -0,0 +1,369 @@
#!/bin/bash
# Скрипт автоматической генерации релиза на Gitea для PDF Compressor
# Автор: PDF Compressor Team
# Версия: 1.0.0
set -e # Остановка при ошибках
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Переменные конфигурации
BINARY_NAME="pdf-compressor"
BUILD_DIR="releases"
GITEA_SERVER="" # Заполните URL вашего Gitea сервера
GITEA_TOKEN="" # Заполните токен доступа Gitea
GITEA_OWNER="" # Заполните владельца репозитория
GITEA_REPO="pdf-compressor"
# Функция вывода сообщений
log() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
exit 1
}
# Функция проверки зависимостей
check_dependencies() {
log "Проверка зависимостей..."
# Проверяем Go
if ! command -v go &> /dev/null; then
error "Go не установлен"
fi
# Проверяем git
if ! command -v git &> /dev/null; then
error "Git не установлен"
fi
# Проверяем curl для API запросов
if ! command -v curl &> /dev/null; then
error "curl не установлен"
fi
# Проверяем zip
if ! command -v zip &> /dev/null; then
error "zip не установлен"
fi
log "Все зависимости найдены"
}
# Функция проверки переменных окружения
check_env() {
log "Проверка переменных окружения..."
if [ -z "$GITEA_SERVER" ]; then
error "GITEA_SERVER не установлен"
fi
if [ -z "$GITEA_TOKEN" ]; then
error "GITEA_TOKEN не установлен"
fi
if [ -z "$GITEA_OWNER" ]; then
error "GITEA_OWNER не установлен"
fi
log "Переменные окружения проверены"
}
# Функция получения версии
get_version() {
if [ -n "$1" ]; then
VERSION="$1"
elif [ -f "VERSION" ]; then
VERSION=$(cat VERSION)
else
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v1.0.0")
fi
# Добавляем префикс v если его нет
if [[ ! $VERSION =~ ^v ]]; then
VERSION="v$VERSION"
fi
log "Версия релиза: $VERSION"
}
# Функция проверки git статуса
check_git_status() {
log "Проверка состояния git..."
# Проверяем что мы в git репозитории
if ! git rev-parse --git-dir > /dev/null 2>&1; then
error "Не найден git репозиторий"
fi
# Проверяем что нет незафиксированных изменений
if ! git diff-index --quiet HEAD --; then
warn "Есть незафиксированные изменения"
read -p "Продолжить? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# Проверяем что мы на master/main ветке
CURRENT_BRANCH=$(git branch --show-current)
if [[ "$CURRENT_BRANCH" != "master" && "$CURRENT_BRANCH" != "main" ]]; then
warn "Вы не на master/main ветке (текущая: $CURRENT_BRANCH)"
read -p "Продолжить? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
}
# Функция запуска тестов
run_tests() {
log "Запуск тестов..."
if ! go test ./...; then
error "Тесты не прошли"
fi
log "Все тесты прошли успешно"
}
# Функция создания тега
create_tag() {
log "Создание тега $VERSION..."
# Проверяем что тег еще не существует
if git rev-parse "$VERSION" >/dev/null 2>&1; then
warn "Тег $VERSION уже существует"
read -p "Перезаписать? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
git tag -d "$VERSION"
else
exit 1
fi
fi
# Создаем аннотированный тег
RELEASE_NOTES="Release $VERSION
✨ Новые возможности:
- Обновления и улучшения интерфейса
- Оптимизация производительности
🐛 Исправления:
- Различные багфиксы и улучшения стабильности
📦 Поддерживаемые платформы:
- Windows (64-bit)
- Linux (64-bit, ARM64)
- macOS (Intel 64-bit, Apple Silicon ARM64)"
git tag -a "$VERSION" -m "$RELEASE_NOTES"
# Отправляем тег в origin
git push origin "$VERSION"
log "Тег $VERSION создан и отправлен"
}
# Функция сборки бинарников
build_binaries() {
log "Сборка бинарников для разных платформ..."
# Создаем директорию для релиза
RELEASE_DIR="$BUILD_DIR/$VERSION"
mkdir -p "$RELEASE_DIR"
# Массив платформ
platforms=(
"windows/amd64"
"linux/amd64"
"linux/arm64"
"darwin/amd64"
"darwin/arm64"
)
for platform in "${platforms[@]}"; do
IFS='/' read -r GOOS GOARCH <<< "$platform"
output="$RELEASE_DIR/${BINARY_NAME}-${VERSION}-${GOOS}-${GOARCH}"
if [ "$GOOS" = "windows" ]; then
output="${output}.exe"
fi
log "Сборка для $GOOS/$GOARCH"
# Сборка с флагами оптимизации
GOOS=$GOOS GOARCH=$GOARCH go build \
-ldflags="-s -w -X main.version=$VERSION -X main.buildTime=$(date -u '+%Y-%m-%d_%H:%M:%S')" \
-o "$output" \
cmd/main.go
if [ $? -eq 0 ]; then
log "$GOOS/$GOARCH построен успешно"
else
error "❌ Ошибка сборки для $GOOS/$GOARCH"
fi
done
}
# Функция создания архивов
create_archives() {
log "Создание архивов..."
cd "$BUILD_DIR/$VERSION"
# Windows - ZIP архивы
for file in *windows*.exe; do
if [ -f "$file" ]; then
archive="${file%.exe}.zip"
zip "$archive" "$file"
rm "$file"
log "Создан архив: $archive"
fi
done
# Linux и macOS - TAR.GZ архивы
for file in *linux* *darwin*; do
if [ -f "$file" ] && [[ ! "$file" == *.zip ]] && [[ ! "$file" == *.tar.gz ]]; then
archive="${file}.tar.gz"
tar -czf "$archive" "$file"
rm "$file"
log "Создан архив: $archive"
fi
done
cd - > /dev/null
}
# Функция создания релиза в Gitea
create_gitea_release() {
log "Создание релиза в Gitea..."
# JSON для создания релиза
RELEASE_JSON=$(cat <<EOF
{
"tag_name": "$VERSION",
"name": "PDF Compressor $VERSION",
"body": "# 🔥 PDF Compressor $VERSION\n\n## ✨ Новые возможности\n- Обновления и улучшения\n- Оптимизация производительности\n\n## 🐛 Исправления\n- Различные багфиксы\n- Улучшения стабильности\n\n## 📦 Установка\n1. Скачайте архив для вашей платформы\n2. Распакуйте и запустите\n\n## 📖 Документация\nПолная документация доступна в README.md",
"draft": false,
"prerelease": false
}
EOF
)
# Создаем релиз через API
RESPONSE=$(curl -s -X POST \
-H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "$RELEASE_JSON" \
"$GITEA_SERVER/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases")
# Получаем ID релиза
RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | cut -d':' -f2 | head -n1)
if [ -z "$RELEASE_ID" ]; then
error "Не удалось создать релиз. Ответ: $RESPONSE"
fi
log "Релиз создан с ID: $RELEASE_ID"
# Загружаем архивы
log "Загрузка архивов..."
for archive in "$BUILD_DIR/$VERSION"/*; do
if [ -f "$archive" ]; then
filename=$(basename "$archive")
log "Загрузка $filename..."
curl -s -X POST \
-H "Authorization: token $GITEA_TOKEN" \
-F "attachment=@$archive" \
"$GITEA_SERVER/api/v1/repos/$GITEA_OWNER/$GITEA_REPO/releases/$RELEASE_ID/assets"
if [ $? -eq 0 ]; then
log "$filename загружен"
else
warn "❌ Ошибка загрузки $filename"
fi
fi
done
}
# Функция очистки
cleanup() {
log "Очистка временных файлов..."
# Здесь можно добавить очистку при необходимости
}
# Функция показа справки
show_help() {
echo -e "${BLUE}Скрипт генерации релиза PDF Compressor${NC}"
echo ""
echo "Использование: $0 [версия]"
echo ""
echo "Параметры:"
echo " версия Версия релиза (например: v1.2.0)"
echo " Если не указана, используется VERSION файл или последний git тег"
echo ""
echo "Переменные окружения:"
echo " GITEA_SERVER URL Gitea сервера"
echo " GITEA_TOKEN Токен доступа Gitea"
echo " GITEA_OWNER Владелец репозитория"
echo ""
echo "Примеры:"
echo " $0 # Автоматическое определение версии"
echo " $0 v1.2.0 # Конкретная версия"
echo ""
}
# Основная функция
main() {
echo -e "${BLUE}🚀 PDF Compressor Release Generator${NC}"
echo ""
# Обработка аргументов
case "${1:-}" in
-h|--help|help)
show_help
exit 0
;;
esac
# Основной процесс
check_dependencies
check_env
get_version "$1"
check_git_status
run_tests
create_tag
build_binaries
create_archives
create_gitea_release
cleanup
log "🎉 Релиз $VERSION успешно создан!"
echo ""
echo -e "${GREEN}Релиз доступен по адресу:${NC}"
echo "$GITEA_SERVER/$GITEA_OWNER/$GITEA_REPO/releases/tag/$VERSION"
echo ""
}
# Обработка сигналов
trap cleanup EXIT
# Запуск основной функции
main "$@"