77 push :
88 branches :
99 - main
10+ pull_request :
11+ types : [opened, synchronize, reopened]
12+ branches :
13+ - main
1014
1115jobs :
1216 calculate-score :
4852 fi
4953 echo "article_bonus=$ARTICLE_BONUS" >> $GITHUB_ENV
5054
55+ - name : Check for lesson assignments
56+ id : check_lessons
57+ if : github.event_name == 'pull_request'
58+ run : |
59+ REPO_NAME=${{ github.repository }}
60+ OWNER=$(echo $REPO_NAME | cut -d'/' -f1)
61+ REPO=$(echo $REPO_NAME | cut -d'/' -f2)
62+
63+ LESSON1_EXISTS=0
64+ LESSON2_EXISTS=0
65+
66+ # Check lesson1 assignment
67+ LESSON1_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
68+ "https://api.github.com/repos/$OWNER/$REPO/contents/assignments/lesson1")
69+
70+ if echo "$LESSON1_RESPONSE" | jq -r '.[].name' 2>/dev/null | grep -q "^$OWNER\.md$"; then
71+ LESSON1_EXISTS=1
72+ echo "Found lesson1 assignment: assignments/lesson1/$OWNER.md"
73+ else
74+ echo "No lesson1 assignment found for $OWNER"
75+ fi
76+
77+ # Check lesson2 assignment
78+ LESSON2_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
79+ "https://api.github.com/repos/$OWNER/$REPO/contents/assignments/lesson2")
80+
81+ if echo "$LESSON2_RESPONSE" | jq -r '.[].name' 2>/dev/null | grep -q "^$OWNER\.md$"; then
82+ LESSON2_EXISTS=1
83+ echo "Found lesson2 assignment: assignments/lesson2/$OWNER.md"
84+ else
85+ echo "No lesson2 assignment found for $OWNER"
86+ fi
87+
88+ echo "lesson1_exists=$LESSON1_EXISTS" >> $GITHUB_ENV
89+ echo "lesson2_exists=$LESSON2_EXISTS" >> $GITHUB_ENV
90+
91+ if [ $LESSON1_EXISTS -eq 1 ]; then
92+ LESSON1_SCORE=10
93+ else
94+ LESSON1_SCORE=0
95+ fi
96+
97+ if [ $LESSON2_EXISTS -eq 1 ]; then
98+ LESSON2_SCORE=10
99+ else
100+ LESSON2_SCORE=0
101+ fi
102+
103+ echo "lesson1_score=$LESSON1_SCORE" >> $GITHUB_ENV
104+ echo "lesson2_score=$LESSON2_SCORE" >> $GITHUB_ENV
105+
51106 - name : Calculate score based on GitHub metrics
52107 id : calculate
53108 run : |
@@ -81,22 +136,29 @@ jobs:
81136 PR_WEIGHT=30
82137
83138 ARTICLE_BONUS=${{ env.article_bonus }}
139+ LESSON1_SCORE=${{ env.lesson1_score || 0 }}
140+ LESSON2_SCORE=${{ env.lesson2_score || 0 }}
84141
85142 SCORE=$((STARS * STAR_WEIGHT + CLOSED_ISSUES * ISSUE_WEIGHT + PR_COUNT * PR_WEIGHT + ARTICLE_BONUS))
143+ LESSON_SCORE=$((LESSON1_SCORE + LESSON2_SCORE))
86144
87145 echo "=================== 学员成绩报告 ==================="
88146 echo "Stars: $STARS (权重: $STAR_WEIGHT) = $((STARS * STAR_WEIGHT)) 分"
89147 echo "已解决的Issues: $CLOSED_ISSUES (权重: $ISSUE_WEIGHT) = $((CLOSED_ISSUES * ISSUE_WEIGHT)) 分"
90148 echo "Pull Requests: $PR_COUNT (权重: $PR_WEIGHT) = $((PR_COUNT * PR_WEIGHT)) 分"
91- echo "个人文章提交: $ARTICLE_EXISTS (权重: 20) = $ARTICLE_BONUS 分"
149+ echo "个人文章提交: ${{ env.article_exists }} (权重: 20) = $ARTICLE_BONUS 分"
150+ echo "Lesson1作业: ${{ env.lesson1_exists }} (权重: 10) = $LESSON1_SCORE 分"
151+ echo "Lesson2作业: ${{ env.lesson2_exists }} (权重: 10) = $LESSON2_SCORE 分"
92152 echo "=================================================="
93153 echo "总分: $SCORE 分"
154+ echo "课程作业总分: $LESSON_SCORE 分"
94155 echo "更新时间: $(date)"
95156
96157 echo "stars=$STARS" >> $GITHUB_ENV
97158 echo "issues=$CLOSED_ISSUES" >> $GITHUB_ENV
98159 echo "prs=$PR_COUNT" >> $GITHUB_ENV
99160 echo "score=$SCORE" >> $GITHUB_ENV
161+ echo "lesson_score=$LESSON_SCORE" >> $GITHUB_ENV
100162
101163 - name : Post summary JSON to remote API
102164 run : |
@@ -130,4 +192,31 @@ jobs:
130192 -d "$SUMMARY" \
131193 -v
132194
133- rm /tmp/decrypted-config.env
195+ rm /tmp/decrypted-config.env
196+
197+ - name : Post lesson assignments score to remote API
198+ if : github.event_name == 'pull_request'
199+ run : |
200+ ACTOR=${{ github.actor }}
201+ API_URL="https://api.opencamp.cn/web/api/courseRank/createByThirdToken"
202+ API_TOKEN="f7071e69e65d4d0587e0333420ca84a0"
203+ COURSE_ID=1945
204+
205+ LESSON_SUMMARY=$(cat <<EOF
206+ {
207+ "channel": "github",
208+ "courseId": $COURSE_ID,
209+ "ext": "lesson_assignments",
210+ "name": "$ACTOR",
211+ "score": ${{ env.lesson_score }},
212+ "totalScore": 20
213+ }
214+ EOF
215+ )
216+
217+ curl -X POST "$API_URL" \
218+ -H "accept: application/json;charset=utf-8" \
219+ -H "Content-Type: application/json" \
220+ -H "token: $API_TOKEN" \
221+ -d "$LESSON_SUMMARY" \
222+ -v
0 commit comments