generated from Java-2025Fall/final-vibevault-template
101 lines
3.1 KiB
Bash
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
|