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 "✅ Файлы соответствуют папке автора."