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

73 lines
3.3 KiB
YAML
Raw Permalink 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. Проверка: Шаблон сообщения коммита [1] ...
- 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
# Проверяем, начинается ли сообщение с [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 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 file locations..."
# Получаем список файлов, которые изменились или добавились в 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)
# Проверяем, совпадает ли эта папка с именем автора PR
if [ "$first_folder" != "$USERNAME" ]; then
echo "❌ ОШИБКА: Файл '$file' не находится в подпапке автора ('$USERNAME')."
echo "Все изменения должны лежать в папке с именем автора."
exit 1
fi
done
echo "✅ Файлы находятся в правильных папках."