2026-rff_mp/.gitea/workflows/pr-validation.yml

76 lines
3.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: PR Validation
on:
pull_request:
branches:
- main
- develop
types: [opened, synchronize, reopened]
jobs:
pr_checks:
runs-on: ubuntu-latest
steps:
# 1. Клонируем репозиторий
- name: Checkout code
uses: https://gitea.com/gitea/act_runner@v0.2.8 # Используем официальный action для проверки кода
with:
fetch-depth: 0
# 2. Получаем имя автора PR
- name: Get PR Author
id: pr_info
run: |
echo "username=${{ github.actor }}" >> $GITHUB_OUTPUT
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
# 3. Проверка: Шаблон сообщения коммита [##] *
- name: Check Commit Message Format
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 commits between $BASE_SHA and $HEAD_SHA..."
# Перебираем все коммиты в 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 "Коммит должен начинаться с '[##]'"
exit 1
fi
done
echo "✅ Шаблон сообщений соответствует требованиям."
# 4. Проверка: Изменения только в папке автора
- name: Check File Paths
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..."
# Получаем список измененных файлов
CHANGED_FILES=$(git diff --name-only $BASE_SHA..$HEAD_SHA)
# Перебираем каждый файл
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
fi
done <<< "$CHANGED_FILES"
echo "✅ Файлы соответствуют папке автора."