From 313fce67724d4a519069f24bb8a6ff310d9e729e Mon Sep 17 00:00:00 2001 From: git_admin Date: Wed, 28 Jan 2026 16:13:26 +0300 Subject: [PATCH] [PR] edited workflow yaml --- .gitea/workflows/pr-validation.yml | 47 ++++++++++++++---------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/.gitea/workflows/pr-validation.yml b/.gitea/workflows/pr-validation.yml index 768bc93..d19ce0f 100644 --- a/.gitea/workflows/pr-validation.yml +++ b/.gitea/workflows/pr-validation.yml @@ -25,7 +25,8 @@ jobs: echo "username=${{ github.actor }}" >> $GITHUB_OUTPUT echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT - # 3. Проверка: Шаблон сообщения коммита [##] * + +# 3. Проверка: Шаблон сообщения коммита [1] ... - name: Check Commit Message Format run: | USERNAME="${{ steps.pr_info.outputs.username }}" @@ -36,40 +37,36 @@ jobs: # Перебираем все коммиты в PR git log $BASE_SHA..$HEAD_SHA --pretty=format:"%H %s" | while read -r commit_hash commit_msg; do - # Проверяем, начинается ли сообщение с [##] - if ! echo "$commit_msg" | grep -q "^[##]"; then - echo "❌ ОШИБКА: Коммит '$commit_msg' не соответствует шаблону '[##] *'" - echo "Коммит должен начинаться с '[##]'" + # Проверяем, начинается ли сообщение с [X] (где X - цифра) + # Регулярное выражение: символ '^', открывающая '[', цифра, закрывающая ']' + if ! echo "$commit_msg" | grep -q "^\[[0-9]+\]"; then + echo "❌ ОШИБКА: Коммит '$commit_msg' не соответствует шаблону '[X] *'" + echo "Коммит должен начинаться с цифры в квадратных скобках, например: [1] ..." exit 1 fi done echo "✅ Шаблон сообщений соответствует требованиям." - # 4. Проверка: Изменения только в папке автора - - name: Check File Paths + # 4. Проверка: Проверка, что файлы лежат в подпапке автора + - name: Check Files Location run: | USERNAME="${{ steps.pr_info.outputs.username }}" BASE_SHA="${{ github.event.pull_request.base.sha }}" HEAD_SHA="${{ github.event.pull_request.head.sha }}" - echo "Checking files in changes..." + echo "Checking file locations..." - # Получаем список измененных файлов - CHANGED_FILES=$(git diff --name-only $BASE_SHA..$HEAD_SHA) + # Получаем список файлов, которые изменились или добавились в PR + git diff --name-only --diff-filter=ACM $BASE_SHA..$HEAD_SHA | while read -r file; do + # Извлекаем первую папку из пути к файлу (разделитель '/') + # Например: "author/subfolder/file.txt" -> "author" + first_folder=$(echo "$file" | cut -d'/' -f1) - # Перебираем каждый файл - while IFS= read -r file; do - # Если файл существует (не пустой) - if [ -n "$file" ]; then - # Получаем имя папки (путь до первого слэша) - DIR_NAME=$(echo "$file" | cut -d'/' -f1) - - # Проверяем, что папка совпадает с username ИЛИ файл лежит в корне (пустая папка) - if [ "$DIR_NAME" != "$USERNAME" ] && [ -n "$DIR_NAME" ]; then - echo "❌ ОШИБКА: Файл '$file' находится в папке '$DIR_NAME', которая отличается от имени автора '$USERNAME'" - exit 1 - fi + # Проверяем, совпадает ли эта папка с именем автора PR + if [ "$first_folder" != "$USERNAME" ]; then + echo "❌ ОШИБКА: Файл '$file' не находится в подпапке автора ('$USERNAME')." + echo "Все изменения должны лежать в папке с именем автора." + exit 1 fi - done <<< "$CHANGED_FILES" - - echo "✅ Файлы соответствуют папке автора." + done + echo "✅ Файлы находятся в правильных папках."