Skip to content

Commit f626e2e

Browse files
CI:新增课程作业提交情况检测
1 parent 9e46a9c commit f626e2e

1 file changed

Lines changed: 91 additions & 2 deletions

File tree

.github/workflows/calculate-score.yml

Lines changed: 91 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ on:
77
push:
88
branches:
99
- main
10+
pull_request:
11+
types: [opened, synchronize, reopened]
12+
branches:
13+
- main
1014

1115
jobs:
1216
calculate-score:
@@ -48,6 +52,57 @@ jobs:
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

Comments
 (0)