@@ -2,12 +2,9 @@ name: Calculate Student Score
22
33on :
44 schedule :
5- # 每天北京时间早上8点运行(UTC时间0点,北京时间=UTC+8)
65 - cron : ' 0 0 * * *'
76 workflow_dispatch :
8- # 允许手动触发
97 push :
10- # 每次push都会触发CI
118 branches :
129 - main
1310
@@ -26,19 +23,15 @@ jobs:
2623 - name : Check for student's article
2724 id : check_article
2825 run : |
29- # 获取仓库信息
3026 REPO_NAME=${{ github.repository }}
3127 OWNER=$(echo $REPO_NAME | cut -d'/' -f1)
3228 REPO=$(echo $REPO_NAME | cut -d'/' -f2)
3329
34- # 检查是否存在以用户名命名的.md文件
3530 ARTICLE_EXISTS=0
3631
37- # 获取仓库内容列表
3832 CONTENTS_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
3933 "https://api.github.com/repos/$OWNER/$REPO/contents")
4034
41- # 检查是否有以OWNER命名的md文件
4235 if echo "$CONTENTS_RESPONSE" | jq -r '.[].name' | grep -q "^$OWNER\.md$"; then
4336 ARTICLE_EXISTS=1
4437 echo "Found article file: $OWNER.md"
4841
4942 echo "article_exists=$ARTICLE_EXISTS" >> $GITHUB_ENV
5043
51- # 如果文章存在,给20分奖励
5244 if [ $ARTICLE_EXISTS -eq 1 ]; then
5345 ARTICLE_BONUS=20
5446 else
@@ -59,50 +51,39 @@ jobs:
5951 - name : Calculate score based on GitHub metrics
6052 id : calculate
6153 run : |
62- # 获取仓库信息
6354 REPO_NAME=${{ github.repository }}
6455 OWNER=$(echo $REPO_NAME | cut -d'/' -f1)
6556 REPO=$(echo $REPO_NAME | cut -d'/' -f2)
6657
6758 echo "Repository: $OWNER/$REPO"
6859
69- # 使用GitHub API获取数据
70- # 获取star数量
7160 STARS_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
7261 "https://api.github.com/repos/$OWNER/$REPO")
7362 STARS=$(echo $STARS_RESPONSE | jq -r '.stargazers_count // 0')
7463 echo "Stars response: $STARS_RESPONSE"
7564
76- # 获取所有issues(不包括PR)
7765 ALL_ISSUES_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
7866 "https://api.github.com/repos/$OWNER/$REPO/issues?state=all&per_page=100")
7967 ALL_ISSUES=$(echo "$ALL_ISSUES_RESPONSE" | jq -r 'map(select(.pull_request == null)) | length')
8068
81- # 获取open issues(不包括PR)
8269 OPEN_ISSUES_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
8370 "https://api.github.com/repos/$OWNER/$REPO/issues?state=open&per_page=100")
8471 OPEN_ISSUES=$(echo "$OPEN_ISSUES_RESPONSE" | jq -r 'map(select(.pull_request == null)) | length')
8572
86- # 计算closed issues
8773 CLOSED_ISSUES=$((ALL_ISSUES - OPEN_ISSUES))
8874
89- # 获取PR数量
9075 PRS_RESPONSE=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
9176 "https://api.github.com/repos/$OWNER/$REPO/pulls?state=all&per_page=100")
9277 PR_COUNT=$(echo "$PRS_RESPONSE" | jq -r 'length')
9378
94- # 权重定义
9579 STAR_WEIGHT=10
9680 ISSUE_WEIGHT=20
9781 PR_WEIGHT=30
9882
99- # 获取文章奖励分数
10083 ARTICLE_BONUS=${{ env.article_bonus }}
10184
102- # 计算分数
10385 SCORE=$((STARS * STAR_WEIGHT + CLOSED_ISSUES * ISSUE_WEIGHT + PR_COUNT * PR_WEIGHT + ARTICLE_BONUS))
10486
105- # 输出结果
10687 echo "=================== 学员成绩报告 ==================="
10788 echo "Stars: $STARS (权重: $STAR_WEIGHT) = $((STARS * STAR_WEIGHT)) 分"
10889 echo "已解决的Issues: $CLOSED_ISSUES (权重: $ISSUE_WEIGHT) = $((CLOSED_ISSUES * ISSUE_WEIGHT)) 分"
@@ -112,30 +93,24 @@ jobs:
11293 echo "总分: $SCORE 分"
11394 echo "更新时间: $(date)"
11495
115- # 保存为环境变量供后续步骤使用
11696 echo "stars=$STARS" >> $GITHUB_ENV
11797 echo "issues=$CLOSED_ISSUES" >> $GITHUB_ENV
11898 echo "prs=$PR_COUNT" >> $GITHUB_ENV
11999 echo "score=$SCORE" >> $GITHUB_ENV
120100
121101 - name : Post summary JSON to remote API
122102 run : |
123- # 获取仓库信息
124103 REPO_NAME=${{ github.repository }}
125104 OWNER=$(echo $REPO_NAME | cut -d'/' -f1)
126105 REPO=$(echo $REPO_NAME | cut -d'/' -f2)
127106
128- # 获取触发CI的用户
129107 ACTOR=${{ github.actor }}
130108
131- # 加密的配置信息 (Base64编码)
132109 ENCRYPTED_CONFIG="QVBJX1RPS0VOPWUzNjE5Y2NkZGFmYzQ3NTg5YmJlNzg4Y2EzMWEyZGYwCkFQSV9VUkw9aHR0cHM6Ly9hcGkub3BlbmNhbXAuY24vd2ViL2FwaS9jb3Vyc2VSYW5rL2NyZWF0ZUJ5VGhpcmRUb2tlbgpDT1VSU0VfSUQ9MTk0OAo="
133110
134- # 解密配置信息
135111 echo "$ENCRYPTED_CONFIG" | base64 -d > /tmp/decrypted-config.env
136112 source /tmp/decrypted-config.env
137113
138- # 创建JSON数据
139114 SUMMARY=$(cat <<EOF
140115 {
141116 "channel": "github",
@@ -148,13 +123,11 @@ jobs:
148123 EOF
149124 )
150125
151- # 发送到远程API
152126 curl -X POST "$API_URL" \
153127 -H "accept: application/json;charset=utf-8" \
154128 -H "Content-Type: application/json" \
155129 -H "token: $API_TOKEN" \
156130 -d "$SUMMARY" \
157131 -v
158132
159- # 清理临时文件
160133 rm /tmp/decrypted-config.env
0 commit comments