#!/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