Files
2026-06-11 23:22:08 +08:00

83 lines
2.8 KiB
YAML

name: PR Check
on:
pull_request:
types: [opened, reopened]
jobs:
pr-quality:
name: PR Quality Check
runs-on: act-runner-4c6g
env:
RUNNER_TOOL_CACHE: /toolcache
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Check PR description
env:
GITEA_TOKEN: ${{ secrets.PACKAGES_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
REPO: admin/new-api
GITEA_URL: https://git.viaeon.com
run: |
# 获取 PR 信息
PR_INFO=$(curl -s -H "Authorization: token ${GITEA_TOKEN}" \
"${GITEA_URL}/api/v1/repos/${REPO}/pulls/${PR_NUMBER}")
PR_BODY=$(echo "$PR_INFO" | jq -r '.body // empty')
PR_TITLE=$(echo "$PR_INFO" | jq -r '.title // empty')
PR_USER=$(echo "$PR_INFO" | jq -r '.user.login // empty')
FAILED=0
REASONS=""
# 检查 PR 描述是否为空
if [ -z "$PR_BODY" ] || [ "$PR_BODY" = "null" ]; then
FAILED=1
REASONS="${REASONS}- PR description is empty\n"
fi
# 检查 PR 标题是否为空
if [ -z "$PR_TITLE" ] || [ "$PR_TITLE" = "null" ]; then
FAILED=1
REASONS="${REASONS}- PR title is empty\n"
fi
# 检查是否包含纯 AI 生成标记
if echo "$PR_BODY" | grep -qi "Generated with Claude Code"; then
FAILED=1
REASONS="${REASONS}- PR appears to be purely AI-generated without meaningful human involvement\n"
fi
if [ "$FAILED" -eq 1 ]; then
echo "PR check failed:"
echo -e "$REASONS"
# 添加标签
curl -s -X POST \
"${GITEA_URL}/api/v1/repos/${REPO}/issues/${PR_NUMBER}/labels" \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"labels": ["pr-check-failed"]}'
# 添加评论
curl -s -X POST \
"${GITEA_URL}/api/v1/repos/${REPO}/issues/${PR_NUMBER}/comments" \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"body": "感谢您的提交。由于该 PR 未遵循我们的贡献模板,且被识别为缺乏人工参与的纯 AI 生成内容,我们将先予以关闭。我们更欢迎经过人工审核、验证并带有个人思考的贡献。如果您认为这其中存在误解,请回复告知。"}'
# 关闭 PR
curl -s -X PATCH \
"${GITEA_URL}/api/v1/repos/${REPO}/pulls/${PR_NUMBER}" \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"state": "closed"}'
exit 1
fi
echo "PR check passed!"