-
Notifications
You must be signed in to change notification settings - Fork 0
168 lines (139 loc) · 6.36 KB
/
daily-commit-check.yml
File metadata and controls
168 lines (139 loc) · 6.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
name: 매일 커밋 체크
on:
schedule:
# 매일 00:01 KST (UTC 15:01, 전날)
- cron: '1 15 * * *'
workflow_dispatch: # 수동 실행 가능
jobs:
check-commits:
runs-on: ubuntu-latest
permissions:
contents: read
issues: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # 전체 히스토리 가져오기
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Check yesterday's commits
id: check
run: |
# 현재 한국 시간 확인
CURRENT_KST=$(TZ='Asia/Seoul' date '+%Y-%m-%d %H:%M:%S %Z')
echo "현재 한국 시간: $CURRENT_KST"
# 한국 시간 기준으로 오늘과 어제 날짜 계산
TODAY_KST=$(TZ='Asia/Seoul' date '+%Y-%m-%d')
YESTERDAY_KST=$(TZ='Asia/Seoul' date -d "$TODAY_KST -1 day" '+%Y-%m-%d')
echo "오늘 (KST): $TODAY_KST"
echo "어제 (KST): $YESTERDAY_KST"
echo "체크 대상 날짜: $YESTERDAY_KST"
echo "yesterday=$YESTERDAY_KST" >> $GITHUB_OUTPUT
echo "today=$TODAY_KST" >> $GITHUB_OUTPUT
# 디버깅: UTC 시간도 출력
CURRENT_UTC=$(date -u '+%Y-%m-%d %H:%M:%S %Z')
echo "현재 UTC 시간: $CURRENT_UTC"
# 활성 멤버 목록 (GitHub ID -> 한국어 이름) - 4명 졸업 후 5명 잔류
declare -A MEMBERS=(
["Ukj0ng"]="한종욱"
["zinnnn37"]="김민진"
["JHLEE325"]="이준희"
["LiiNi-coder"]="이인희"
["ksinji"]="강신지"
)
# 멤버별 폴더명 매핑 (GitHub ID -> 폴더명)
declare -A FOLDERS=(
# 현재 멤버 중 특이사항 있는 경우 여기에 추가
)
# 졸업/탈퇴 멤버 (체크 제외) - 기존 졸업자 + 신규 졸업자 4명 추가
GRADUATED=("03do-new30" "ShinHeeEul" "oncsr" "0224LJH" "lkhyun" "Seol-JY" "suyeun84")
# 커밋이 없는 멤버 저장
NO_COMMIT_MEMBERS=()
# 각 멤버별로 체크
for github_id in "${!MEMBERS[@]}"; do
korean_name="${MEMBERS[$github_id]}"
if [ -n "${FOLDERS[$github_id]}" ]; then
folder_name="${FOLDERS[$github_id]}"
else
folder_name="$github_id"
fi
COMMITS=$(git log --all \
--since="$YESTERDAY_KST 00:00:00 +0900" \
--until="$YESTERDAY_KST 23:59:59 +0900" \
--pretty=format:"%H|%an|%ad" \
--date=iso \
-- "$folder_name/" 2>/dev/null || echo "")
if [ -z "$COMMITS" ]; then
echo "❌ $korean_name ($github_id) [폴더: $folder_name]: 커밋 없음"
NO_COMMIT_MEMBERS+=("$korean_name")
else
COMMIT_COUNT=$(echo "$COMMITS" | wc -l)
FIRST_COMMIT=$(echo "$COMMITS" | head -1)
COMMIT_AUTHOR=$(echo "$FIRST_COMMIT" | cut -d'|' -f2)
echo "✅ $korean_name ($github_id) [폴더: $folder_name]: $COMMIT_COUNT 개 커밋 (작성자: $COMMIT_AUTHOR)"
fi
done
# 결과 요약
echo ""
echo "=== 커밋 체크 결과 ==="
echo "체크 날짜: $YESTERDAY_KST"
if [ ${#NO_COMMIT_MEMBERS[@]} -eq 0 ]; then
echo "🎉 모든 멤버가 커밋했습니다!"
echo "no_commit_count=0" >> $GITHUB_OUTPUT
echo "no_commit_list=" >> $GITHUB_OUTPUT
else
echo "❌ 커밋하지 않은 멤버 (${#NO_COMMIT_MEMBERS[@]}명):"
for name in "${NO_COMMIT_MEMBERS[@]}"; do
echo " - $name"
done
echo "no_commit_count=${#NO_COMMIT_MEMBERS[@]}" >> $GITHUB_OUTPUT
NO_COMMIT_LIST=$(IFS=','; echo "${NO_COMMIT_MEMBERS[*]}")
echo "no_commit_list=$NO_COMMIT_LIST" >> $GITHUB_OUTPUT
fi
- name: Create daily check issue
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const yesterday = '${{ steps.check.outputs.yesterday }}';
const noCommitList = '${{ steps.check.outputs.no_commit_list }}';
const count = '${{ steps.check.outputs.no_commit_count }}';
let body = `## 📊 ${yesterday} 커밋 체크 결과\n\n`;
if (count === '0') {
body += `🎉 **모든 멤버가 커밋했습니다!**\n\n`;
body += `총 5명 전원 제출 완료 ✅`; // 인원수 10명 -> 5명으로 수정
} else {
const members = noCommitList.split(',');
body += `**커밋하지 않은 멤버: ${count}명**\n\n`;
body += members.map(name => `- ${name} (벌금 5,000원)`).join('\n');
body += `\n\n---\n\n`;
body += `💰 **총 벌금**: ${parseInt(count) * 5000}원`;
}
body += `\n\n⏰ 체크 시간: ${new Date().toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })}`;
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: count === '0' ? `[${yesterday}] ✅ 전원 제출 완료` : `[${yesterday}] ❌ 커밋 미제출 알림`,
body: body,
labels: count === '0' ? ['daily-check', 'all-clear'] : ['daily-check', 'penalty']
});
- name: Print summary
run: |
echo "### 커밋 체크 완료 ✅" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**체크 날짜**: ${{ steps.check.outputs.yesterday }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
NO_COMMIT_COUNT="${{ steps.check.outputs.no_commit_count }}"
if [ "$NO_COMMIT_COUNT" == "0" ]; then
echo "🎉 **모든 멤버가 커밋했습니다!**" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **커밋하지 않은 멤버**: ${NO_COMMIT_COUNT}명" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**대상자**: ${{ steps.check.outputs.no_commit_list }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
PENALTY=$((NO_COMMIT_COUNT * 5000))
echo "💰 **총 벌금**: ${PENALTY}원" >> $GITHUB_STEP_SUMMARY
fi