/
tm-project
/
rbac-react-system
Обзор
Документация
Войти
/
tm-project
/
rbac-react-system
Код
Запросы
0
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
gitverse
scripts/release.sh
211 строк
8 KB
Artem
fix pipeline
30 ноя 2025, 22:23
30 ноя 2025, 22:23
6846d31
Код
Авторство
О чём код?
#!/bin/bash # Скрипт автоматизации релиза rbac-react-system # Использование: ./scripts/release.sh [patch|minor|major] set -e # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Функция вывода цветного текста print_info() { echo -e "${BLUE}ℹ ${NC}$1" } print_success() { echo -e "${GREEN}✓ ${NC}$1" } print_warning() { echo -e "${YELLOW}⚠ ${NC}$1" } print_error() { echo -e "${RED}✗ ${NC}$1" } # Проверка аргумента VERSION_TYPE=${1:-patch} if [[ ! "$VERSION_TYPE" =~ ^(patch|minor|major)$ ]]; then print_error "Неверный тип версии: $VERSION_TYPE" echo "Использование: $0 [patch|minor|major]" echo " patch - для исправлений (1.0.0 -> 1.0.1)" echo " minor - для новых функций (1.0.0 -> 1.1.0)" echo " major - для breaking changes (1.0.0 -> 2.0.0)" exit 1 fi echo "" print_info "🚀 Начинаем процесс релиза rbac-react-system" echo "" # Проверка на чистое состояние git print_info "Проверка состояния git..." if [[ -n $(git status -s) ]]; then print_error "Рабочая директория не чистая. Закоммитьте или спрячьте изменения." git status -s exit 1 fi print_success "Git статус чистый" # Проверка текущей ветки CURRENT_BRANCH=$(git branch --show-current) print_info "Текущая ветка: $CURRENT_BRANCH" if [[ "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "master" ]]; then print_warning "Вы не на ветке main/master. Продолжить? (y/n)" read -r response if [[ ! "$response" =~ ^[Yy]$ ]]; then print_error "Релиз отменен" exit 1 fi fi # Обновление из удаленного репозитория print_info "Получение последних изменений из origin..." git pull origin $CURRENT_BRANCH print_success "Репозиторий обновлен" # Установка зависимостей print_info "Установка зависимостей..." npm ci print_success "Зависимости установлены" # Запуск проверок print_info "Запуск ESLint..." npm run lint print_success "ESLint проверка пройдена" print_info "Проверка форматирования..." npm run format:check print_success "Форматирование корректно" print_info "Проверка типов TypeScript..." npm run type-check print_success "Типы корректны" # Запуск тестов print_info "Запуск тестов..." npm test print_success "Все тесты пройдены" # Сборка print_info "Сборка проекта..." npm run build print_success "Проект собран" # Получение текущей и новой версии CURRENT_VERSION=$(node -p "require('./package.json').version") print_info "Текущая версия: $CURRENT_VERSION" # Обновление версии print_info "Обновление версии ($VERSION_TYPE)..." NEW_VERSION=$(npm version $VERSION_TYPE --no-git-tag-version) NEW_VERSION=${NEW_VERSION#v} # Убираем 'v' из начала print_success "Новая версия: $NEW_VERSION" # Обновление версии в документации и коде print_info "Обновление версии в документации и исходном коде..." # 1. Обновляем заголовки версий в основных файлах sed -i "s/> \*\*Версия\*\*: [0-9]\+\.[0-9]\+\.[0-9]\+/> **Версия**: $NEW_VERSION/" README.md sed -i "s/> \*\*Версия\*\*: [0-9]\+\.[0-9]\+\.[0-9]\+/> **Версия**: $NEW_VERSION/" CONTRIBUTING.md # 2. Обновляем все файлы в docs/ (заголовки) find docs -name "*.md" -type f -exec sed -i "s/> \*\*Версия\*\*: [0-9]\+\.[0-9]\+\.[0-9]\+/> **Версия**: $NEW_VERSION/" {} \; # 2.1. Обновляем примеры package.json в документации find docs -name "*.md" -type f -exec sed -i "s/\"version\": \"[0-9]\+\.[0-9]\+\.[0-9]\+\"/\"version\": \"$NEW_VERSION\"/" {} \; # 3. Обновляем версию в заголовках всех файлов src/ find src -type f \( -name "*.ts" -o -name "*.tsx" \) -exec sed -i "s/rbac-react-system v[0-9]\+\.[0-9]\+\.[0-9]\+/rbac-react-system v$NEW_VERSION/" {} \; # 4. Обновляем версию .tgz файлов в документации sed -i "s/rbac-react-system-[0-9]\+\.[0-9]\+\.[0-9]\+\.tgz/rbac-react-system-$NEW_VERSION.tgz/g" README.md find docs -name "*.md" -type f -exec sed -i "s/rbac-react-system-[0-9]\+\.[0-9]\+\.[0-9]\+\.tgz/rbac-react-system-$NEW_VERSION.tgz/g" {} \; find scripts -name "*.md" -type f -exec sed -i "s/rbac-react-system-[0-9]\+\.[0-9]\+\.[0-9]\+\.tgz/rbac-react-system-$NEW_VERSION.tgz/g" {} \; # 5. Обновляем версию в scripts/pack-local.sh sed -i "s/rbac-react-system-[0-9]\+\.[0-9]\+\.[0-9]\+\.tgz/rbac-react-system-$NEW_VERSION.tgz/g" scripts/pack-local.sh print_success "Версия $NEW_VERSION обновлена во всех файлах (код + документация)" # Обновление CHANGELOG print_info "Обновляем CHANGELOG.md..." TODAY=$(date +%Y-%m-%d) # Заменяем [Unreleased] на новую версию sed -i "s/## \[Unreleased\]/## [Unreleased]\n\n## [$NEW_VERSION] - $TODAY/" CHANGELOG.md # Обновляем ссылки внизу sed -i "s|\[Unreleased\]:.*|[Unreleased]: https://gitlab.asdev.ru/tm-project/rbac-react-system/-/compare/v$NEW_VERSION...main\n[$NEW_VERSION]: https://gitlab.asdev.ru/tm-project/rbac-react-system/-/releases/v$NEW_VERSION|" CHANGELOG.md print_success "CHANGELOG.md обновлен" # Коммит изменений print_info "Создание коммита..." git add package.json package-lock.json CHANGELOG.md README.md CONTRIBUTING.md docs/ src/ scripts/ git commit -m "chore: release v$NEW_VERSION 🎉 Релиз версии $NEW_VERSION Автоматически сгенерировано скриптом release.sh " print_success "Коммит создан" # Создание тега print_info "Создание git тега v$NEW_VERSION..." git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION См. CHANGELOG.md для деталей изменений. " print_success "Тег создан" # Вывод инструкций echo "" print_success "✨ Релиз подготовлен успешно!" echo "" print_info "📋 Следующие шаги:" echo "" echo " 1. Проверьте изменения:" echo " ${GREEN}git log --oneline -5${NC}" echo " ${GREEN}git show v$NEW_VERSION${NC}" echo "" echo " 2. Отправьте изменения в репозиторий:" echo " ${GREEN}git push origin $CURRENT_BRANCH${NC}" echo " ${GREEN}git push origin v$NEW_VERSION${NC}" echo "" echo " 3. GitLab CI/CD автоматически:" echo " - Запустит все проверки" echo " - Соберет проект" echo " - Опубликует в npm" echo " - Создаст релиз" echo "" print_info "📦 Пакет будет доступен на: https://www.npmjs.com/package/rbac-react-system" print_info "🔗 Релиз будет доступен на: https://gitlab.asdev.ru/tm-project/rbac-react-system/-/releases" echo "" # Спрашиваем о push print_warning "Отправить изменения сейчас? (y/n)" read -r response if [[ "$response" =~ ^[Yy]$ ]]; then print_info "Отправка в origin..." git push origin $CURRENT_BRANCH git push origin "v$NEW_VERSION" print_success "🎉 Релиз v$NEW_VERSION отправлен!" echo "" print_info "🔗 Pipeline: https://gitlab.asdev.ru/tm-project/rbac-react-system/-/pipelines" else print_warning "Релиз подготовлен, но не отправлен" print_info "Отправьте вручную когда будете готовы:" echo " ${GREEN}git push origin $CURRENT_BRANCH && git push origin v$NEW_VERSION${NC}" fi echo ""