diff --git a/.gitea/workflows/autograde.yml b/.gitea/workflows/autograde.yml index 9cadbc5..fb4b63c 100644 --- a/.gitea/workflows/autograde.yml +++ b/.gitea/workflows/autograde.yml @@ -238,14 +238,19 @@ jobs: SHORT_SHA=$(echo "$COMMIT_SHA" | cut -c1-7) DEST_PATH="reports/grade_report_${SHORT_SHA}.${REPORT_FILE##*.}" - # Base64 编码 + # Base64 编码并保存到临时文件(避免命令行参数过长) CONTENT=$(base64 -w 0 "$REPORT_FILE") + # 创建请求 JSON 文件 + cat > /tmp/upload_request.json << EOF + {"message": "Add grade report for $SHORT_SHA", "content": "$CONTENT"} + EOF + # 先尝试 POST 创建新文件 RESULT=$(curl -s -X POST -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ "$API_URL/repos/$REPO/contents/$DEST_PATH" \ - -d "{\"message\": \"Add grade report for $SHORT_SHA\", \"content\": \"$CONTENT\"}") + -d @/tmp/upload_request.json) if echo "$RESULT" | grep -q '"content"'; then echo "✅ Report uploaded to $DEST_PATH" @@ -257,10 +262,15 @@ jobs: | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('sha','') if isinstance(d,dict) and 'sha' in d else '')" 2>/dev/null || echo "") if [ -n "$SHA" ]; then + # 创建更新请求 JSON 文件 + cat > /tmp/upload_request.json << EOF + {"message": "Update grade report for $SHORT_SHA", "content": "$CONTENT", "sha": "$SHA"} + EOF + RESULT=$(curl -s -X PUT -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ "$API_URL/repos/$REPO/contents/$DEST_PATH" \ - -d "{\"message\": \"Update grade report for $SHORT_SHA\", \"content\": \"$CONTENT\", \"sha\": \"$SHA\"}") + -d @/tmp/upload_request.json) if echo "$RESULT" | grep -q '"content"'; then echo "✅ Report updated at $DEST_PATH" @@ -271,6 +281,9 @@ jobs: echo "⚠️ Could not get file SHA, upload failed" fi fi + + # 清理临时文件 + rm -f /tmp/upload_request.json fi - name: Create metadata