2311061111-lyt/autograde/run.sh
liyitian e265757617
All checks were successful
autograde-final-vibevault / check-trigger (push) Successful in 4s
autograde-final-vibevault / grade (push) Has been skipped
修复路径错误:修正项目名数字和目录前缀
2025-12-14 19:34:57 +08:00

101 lines
3.1 KiB
Bash

#!/bin/bash
set -e
# 核心评分脚本 - 从 autograde.yml 中提取的关键评分命令
echo "=== VibeVault 自动评分流程 ==="
# 1. 运行 Gradle 测试
echo "\n1. 运行 Gradle 测试..."
./gradlew test --no-daemon || true
# 2. 运行编程测试评分
echo "\n2. 运行编程测试评分..."
python3 ./autograde/grade_grouped.py \
--junit-dir build/test-results/test \
--groups autograde/test_groups.json \
--out grade.json \
--summary summary.md
# 3. 评分 REPORT.md
echo "\n3. 评分 REPORT.md..."
if [ -f REPORT.md ]; then
python3 ./autograde/llm_grade.py \
--question "请评估这份后端与系统设计报告" \
--answer REPORT.md \
--rubric .llm_rubrics/rubric_report.json \
--out report_grade.json \
--summary report_summary.md
echo "✅ REPORT.md graded"
else
echo '{"total": 0, "flags": ["missing_file"]}' > report_grade.json
echo "⚠️ REPORT.md or rubric not found"
fi
# 4. 评分 FRONTEND.md
echo "\n4. 评分 FRONTEND.md..."
if [ -f FRONTEND.md ]; then
python3 ./autograde/llm_grade.py \
--question "请评估这份前端界面与交互设计报告" \
--answer FRONTEND.md \
--rubric .llm_rubrics/rubric_frontend.json \
--out frontend_grade.json \
--summary frontend_summary.md
echo "✅ FRONTEND.md graded"
else
echo '{"total": 0, "flags": ["missing_file"]}' > frontend_grade.json
echo "⚠️ FRONTEND.md or rubric not found"
fi
# 5. 聚合最终成绩
echo "\n5. 聚合最终成绩..."
python3 ./autograde/aggregate_final_grade.py \
--programming grade.json \
--report report_grade.json \
--frontend frontend_grade.json \
--out final_grade.json \
--summary final_summary.md
# 6. 生成 PDF 报告
echo "\n6. 生成 PDF 报告..."
if [ -f final_grade.json ]; then
# 读取学生信息文件(如果存在)
STUDENT_ID=""
STUDENT_NAME=""
CLASS_NAME=""
if [ -f .student_info.json ]; then
STUDENT_ID=$(python3 -c "import json; d=json.load(open('.student_info.json')); print(d.get('student_id',''))" 2>/dev/null || echo "")
STUDENT_NAME=$(python3 -c "import json; d=json.load(open('.student_info.json')); print(d.get('name',''))" 2>/dev/null || echo "")
CLASS_NAME=$(python3 -c "import json; d=json.load(open('.student_info.json')); print(d.get('class_name',''))" 2>/dev/null || echo "")
fi
# 如果没有学生信息文件,从仓库名提取学号
if [ -z "$STUDENT_ID" ]; then
REPO="$(basename "$PWD")"
STUDENT_ID=$(echo "$REPO" | sed -n 's/.*-stu[_-]\?\(st\)\?\([0-9]*\)$/\2/p')
fi
python3 ./autograde/generate_pdf_report.py \
--report REPORT.md \
--frontend FRONTEND.md \
--grade final_grade.json \
--images images \
--out grade_report.pdf \
--student-id "$STUDENT_ID" \
--student-name "$STUDENT_NAME" \
--class-name "$CLASS_NAME" \
--commit-sha "$(git rev-parse HEAD 2>/dev/null || echo "unknown")"
fi
echo "\n=== 评分完成 ==="
# 显示最终成绩
if [ -f final_grade.json ]; then
echo "\n最终成绩:"
python3 -c "import json; print(json.dumps(json.load(open('final_grade.json')), indent=2, ensure_ascii=False))"
else
echo "\n❌ 评分失败,未生成最终成绩文件"
exit 1
fi