83 lines
2.8 KiB
YAML
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!"
|