Skip to content

Commit 03755ed

Browse files
author
liuxiaotong
committed
fix: auto-review 安全加固(命令注入+token校验+错误处理)
1 parent ba3cecf commit 03755ed

1 file changed

Lines changed: 51 additions & 23 deletions

File tree

.github/workflows/auto-review.yml

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,11 @@ jobs:
233233
SUMMARY=$(cat /tmp/review_summary.txt)
234234
COMMENTS=$(cat /tmp/review_comments.txt)
235235
236+
# [Fix #2] CREW_API_TOKEN 校验
237+
if [ -z "${CREW_API_TOKEN}" ]; then
238+
echo "::warning::CREW_API_TOKEN not configured — skipping auto-dispatch"
239+
fi
240+
236241
# 添加轮次 label
237242
gh pr edit "$PR_NUMBER" --add-label "review-round-${ROUND}" 2>/dev/null || \
238243
gh label create "review-round-${ROUND}" --color "0E8A16" 2>/dev/null && \
@@ -257,25 +262,37 @@ jobs:
257262
EOF
258263
)"
259264
260-
# 审查不通过 — 只在第 1 轮自动派回修复(避免循环:审查→派单→修复→再审查再派单)
261-
if [ "$ROUND" -eq 1 ]; then
262-
curl -s -X POST "https://crew.knowlyr.com/run/employee/ceo-assistant" \
263-
-H "Authorization: Bearer ${CREW_API_TOKEN}" \
264-
-H "Content-Type: application/json" \
265-
-d "$(python3 -c "
266-
import json
267-
task = '''PR #${PR_NUMBER} 第 ${ROUND} 轮审查不通过,需要派人修复。
268-
仓库: ${REPO}
265+
# 审查不通过 — 只在第 1 轮自动派回修复(避免循环:审查->派单->修复->再审查->再派单)
266+
if [ "$ROUND" -eq 1 ] && [ -n "${CREW_API_TOKEN}" ]; then
267+
# [Fix #1] 用环境变量+文件方式传参,避免命令注入
268+
PR_NUMBER="$PR_NUMBER" ROUND="$ROUND" REPO="$REPO" python3 << 'PYEOF' > /tmp/dispatch_payload.json
269+
import json, os
270+
summary = open('/tmp/review_summary.txt').read()
271+
comments = open('/tmp/review_comments.txt').read()
272+
task = f"""PR #{os.environ['PR_NUMBER']} 第 {os.environ['ROUND']} 轮审查不通过,需要派人修复。
273+
仓库: {os.environ['REPO']}
269274
270275
审查意见:
271-
${SUMMARY}
276+
{summary}
272277
273-
${COMMENTS}
278+
{comments}
274279
275-
请根据仓库和问题类型派合适的工程师修复,修完后推代码触发下一轮审查。'''
280+
请根据仓库和问题类型派合适的工程师修复,修完后推代码触发下一轮审查。"""
276281
print(json.dumps({'task': task}))
277-
")"
278-
echo "Auto-dispatch: review feedback sent to ceo-assistant"
282+
PYEOF
283+
284+
# [Fix #3] dispatch curl 加 HTTP 状态码检查
285+
DISPATCH_RESP=$(curl -s -w "\n%{http_code}" -X POST "https://crew.knowlyr.com/run/employee/ceo-assistant" \
286+
-H "Authorization: Bearer ${CREW_API_TOKEN}" \
287+
-H "Content-Type: application/json" \
288+
-d @/tmp/dispatch_payload.json)
289+
HTTP_CODE=$(echo "$DISPATCH_RESP" | tail -n1)
290+
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
291+
echo "::warning::Auto-dispatch failed (HTTP $HTTP_CODE)"
292+
else
293+
echo "Auto-dispatch: review feedback sent to ceo-assistant"
294+
fi
295+
rm -f /tmp/dispatch_payload.json
279296
fi
280297
281298
# 第 4 轮:需要人工介入
@@ -284,15 +301,26 @@ jobs:
284301
gh label create "needs-human-review" --color "D93F0B" 2>/dev/null || true
285302
gh pr edit "$PR_NUMBER" --add-label "needs-human-review"
286303
287-
# 通知 Kai
288-
curl -s -X POST "https://crew.knowlyr.com/run/employee/ceo-assistant" \
289-
-H "Authorization: Bearer ${CREW_API_TOKEN}" \
290-
-H "Content-Type: application/json" \
291-
-d "$(python3 -c "
292-
import json
293-
task = 'PR #${PR_NUMBER} 经过 ${ROUND} 轮审查仍未通过,需要 Kai 介入。仓库: ${REPO}。请通过飞书通知 Kai。'
304+
if [ -n "${CREW_API_TOKEN}" ]; then
305+
# [Fix #1] 用环境变量+文件方式传参,避免命令注入
306+
PR_NUMBER="$PR_NUMBER" ROUND="$ROUND" REPO="$REPO" python3 << 'PYEOF' > /tmp/escalate_payload.json
307+
import json, os
308+
task = f"PR #{os.environ['PR_NUMBER']} 经过 {os.environ['ROUND']} 轮审查仍未通过,需要 Kai 介入。仓库: {os.environ['REPO']}。请通过飞书通知 Kai。"
294309
print(json.dumps({'task': task}))
295-
")"
296-
echo "Human review notification sent"
310+
PYEOF
311+
312+
# [Fix #3] dispatch curl 加 HTTP 状态码检查
313+
ESCALATE_RESP=$(curl -s -w "\n%{http_code}" -X POST "https://crew.knowlyr.com/run/employee/ceo-assistant" \
314+
-H "Authorization: Bearer ${CREW_API_TOKEN}" \
315+
-H "Content-Type: application/json" \
316+
-d @/tmp/escalate_payload.json)
317+
HTTP_CODE=$(echo "$ESCALATE_RESP" | tail -n1)
318+
if [ "$HTTP_CODE" != "200" ] && [ "$HTTP_CODE" != "201" ]; then
319+
echo "::warning::Human review notification failed (HTTP $HTTP_CODE)"
320+
else
321+
echo "Human review notification sent"
322+
fi
323+
rm -f /tmp/escalate_payload.json
324+
fi
297325
fi
298326
fi

0 commit comments

Comments
 (0)