/
architector.net
/
GitVersion
Обзор
Документация
Войти
/
architector.net
/
GitVersion
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
hooks/prepare-commit-msg
105 строк
4 KB
Шишляев Дмитрий (домашний ноут)
Исправил проблему: при наличии в сообщениее bump-message версия в сообщении коммита не менялась 0.5.0-alpha.1
13 сен 2025, 17:08
13 сен 2025, 17:08
78b9c2d
Код
Авторство
О чём код?
#!/bin/bash # Путь к файлу сообщения коммита COMMIT_MSG_FILE=$1 # Источник коммита (пустой для ручного, 'message' для -m и т.д.) COMMIT_SOURCE=$2 # SHA1 при изменении коммита SHA1=$3 # Пропускаем, если это merge или template-коммит if [ -n "$COMMIT_SOURCE" ] && [ "$COMMIT_SOURCE" != "message" ] && [ "$COMMIT_SOURCE" != "" ]; then exit 0 fi # Переходим в корень репозитория REPO_ROOT=$(git rev-parse --show-toplevel) cd "$REPO_ROOT" || exit 1 # Получаем имя текущей ветки BRANCH=$(git rev-parse --abbrev-ref HEAD) # Извлекаем номер задачи для веток hotfixes/* или features/* TASK_PREFIX="" if [[ $BRANCH =~ ^hotfixes/([0-9]+)_ ]]; then TASK_PREFIX="#${BASH_REMATCH[1]} " elif [[ $BRANCH =~ ^features/([0-9]+)_ ]]; then TASK_PREFIX="#${BASH_REMATCH[1]} " fi # Добавляем все изменения в индекс git add . # Получаем текущую версию FullSemVer FULL_SEMVER=$(dotnet-gitversion -showvariable fullsemver 2>/dev/null) if [ -z "$FULL_SEMVER" ]; then FULL_SEMVER="unknown-version" # Fallback, если GitVersion не сработал fi # Читаем исходное сообщение коммита ORIGINAL_MSG=$(cat "$COMMIT_MSG_FILE") # Проверяем наличие +semver:major, +semver:breaking или +semver:minor SEMVER_TYPE="" if echo "$ORIGINAL_MSG" | grep -q "+semver:major\|+semver:breaking"; then SEMVER_TYPE="major" elif echo "$ORIGINAL_MSG" | grep -q "+semver:minor" && [[ $BRANCH =~ ^hotfixes/ ]]; then SEMVER_TYPE="minor" fi # Попытка спрогнозировать следующую версию if [ -n "$SEMVER_TYPE" ]; then # Разбираем текущую версию if [[ $FULL_SEMVER =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-(alpha|beta|[0-9]+-[a-zA-Z0-9-]+)\.([0-9]+))?$ ]]; then MAJOR=${BASH_REMATCH[1]} # Например, 0 MINOR=${BASH_REMATCH[2]} # Например, 4 PATCH=${BASH_REMATCH[3]} # Например, 1 TAG=${BASH_REMATCH[5]} # Например, alpha или 1-test INCREMENT=${BASH_REMATCH[6]} # Например, 2 if [ "$SEMVER_TYPE" = "major" ]; then # Увеличиваем мажорную версию, обнуляем минор и патч MAJOR=$((MAJOR + 1)) MINOR=0 PATCH=0 elif [ "$SEMVER_TYPE" = "minor" ]; then # Увеличиваем минорную версию, обнуляем патч (только для hotfixes) MINOR=$((MINOR + 1)) PATCH=0 fi # Увеличиваем инкремент тега, если он есть if [ -n "$TAG" ]; then INCREMENT=$((INCREMENT + 1)) FULL_SEMVER="${MAJOR}.${MINOR}.${PATCH}-${TAG}.${INCREMENT}" else FULL_SEMVER="${MAJOR}.${MINOR}.${PATCH}" fi else # Если формат версии не распознан, оставляем как есть FULL_SEMVER="${FULL_SEMVER}" fi else # Обычная логика для инкремента патч-версии или тега if [[ $FULL_SEMVER =~ ^([0-9]+\.[0-9]+\.[0-9]+-[0-9]+-[a-zA-Z0-9-]+)\.([0-9]+)$ ]]; then VERSION_PREFIX=${BASH_REMATCH[1]} # Например, 0.3.0-1-test INCREMENT=${BASH_REMATCH[2]} # Например, 2 NEXT_INCREMENT=$((INCREMENT + 1)) # Увеличиваем на 1 FULL_SEMVER="${VERSION_PREFIX}.${NEXT_INCREMENT}" # Например, 0.3.0-1-test.3 elif [[ $FULL_SEMVER =~ ^([0-9]+\.[0-9]+\.[0-9]+)-(alpha|beta)\.([0-9]+)$ ]]; then VERSION_PREFIX=${BASH_REMATCH[1]} # Например, 0.3.0 TAG=${BASH_REMATCH[2]} # Например, alpha INCREMENT=${BASH_REMATCH[3]} # Например, 0 NEXT_INCREMENT=$((INCREMENT + 1)) # Увеличиваем на 1 FULL_SEMVER="${VERSION_PREFIX}-${TAG}.${NEXT_INCREMENT}" # Например, 0.3.0-alpha.1 else # Если формат не распознан, оставляем как есть FULL_SEMVER="${FULL_SEMVER}" fi fi # Формируем новое сообщение: префикс + оригинал + версия NEW_MSG="${TASK_PREFIX}${ORIGINAL_MSG} ${FULL_SEMVER}" # Записываем новое сообщение в файл echo "$NEW_MSG" > "$COMMIT_MSG_FILE"