Skip to content

Commit 7f3ff8e

Browse files
authored
Create daily-commit-check.yml
1 parent 2d8fc94 commit 7f3ff8e

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
name: 매일 커밋 체크
2+
3+
on:
4+
schedule:
5+
# 매일 00:01 KST (UTC 15:01, 전날)
6+
- cron: '1 15 * * *'
7+
workflow_dispatch: # 수동 실행 가능
8+
9+
jobs:
10+
check-commits:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0 # 전체 히스토리 가져오기
18+
19+
- name: Set up Node.js
20+
uses: actions/setup-node@v4
21+
with:
22+
node-version: '20'
23+
24+
- name: Check yesterday's commits
25+
id: check
26+
run: |
27+
# 한국 시간 기준 어제 날짜 계산
28+
YESTERDAY=$(TZ='Asia/Seoul' date -d 'yesterday' +%Y-%m-%d)
29+
TODAY=$(TZ='Asia/Seoul' date +%Y-%m-%d)
30+
31+
echo "체크 대상 날짜: $YESTERDAY"
32+
echo "yesterday=$YESTERDAY" >> $GITHUB_OUTPUT
33+
echo "today=$TODAY" >> $GITHUB_OUTPUT
34+
35+
# 활성 멤버 목록 (GitHub ID -> 한국어 이름)
36+
declare -A MEMBERS=(
37+
["oncsr"]="권혁준"
38+
["0224LJH"]="이종환"
39+
["Ukj0ng"]="한종욱"
40+
["suyeun84"]="김수연"
41+
["lkhyun"]="이강현"
42+
["zinnnn37"]="김민진"
43+
["JHLEE325"]="이준희"
44+
["Seol-JY"]="설진영"
45+
["LiiNi-coder"]="이인희"
46+
["ksinji"]="강신지"
47+
)
48+
49+
# 탈퇴한 멤버 (체크 제외)
50+
GRADUATED=("03do-new30" "ShinHeeEul")
51+
52+
# 커밋이 없는 멤버 저장
53+
NO_COMMIT_MEMBERS=()
54+
55+
# 각 멤버별로 체크
56+
for github_id in "${!MEMBERS[@]}"; do
57+
korean_name="${MEMBERS[$github_id]}"
58+
59+
# 해당 멤버의 폴더에서 어제 날짜의 커밋이 있는지 확인
60+
# author-date를 사용하여 한국 시간 기준으로 체크
61+
COMMITS=$(git log --all \
62+
--author-date-order \
63+
--since="$YESTERDAY 00:00:00 +0900" \
64+
--until="$YESTERDAY 23:59:59 +0900" \
65+
--pretty=format:"%H" \
66+
-- "$github_id/" 2>/dev/null || echo "")
67+
68+
if [ -z "$COMMITS" ]; then
69+
echo "❌ $korean_name ($github_id): 커밋 없음"
70+
NO_COMMIT_MEMBERS+=("$korean_name")
71+
else
72+
COMMIT_COUNT=$(echo "$COMMITS" | wc -l)
73+
echo "✅ $korean_name ($github_id): $COMMIT_COUNT 개 커밋"
74+
fi
75+
done
76+
77+
# 결과 요약
78+
echo ""
79+
echo "=== 커밋 체크 결과 ==="
80+
echo "체크 날짜: $YESTERDAY"
81+
82+
if [ ${#NO_COMMIT_MEMBERS[@]} -eq 0 ]; then
83+
echo "🎉 모든 멤버가 커밋했습니다!"
84+
echo "no_commit_count=0" >> $GITHUB_OUTPUT
85+
echo "no_commit_list=" >> $GITHUB_OUTPUT
86+
else
87+
echo "❌ 커밋하지 않은 멤버 (${#NO_COMMIT_MEMBERS[@]}명):"
88+
for name in "${NO_COMMIT_MEMBERS[@]}"; do
89+
echo " - $name"
90+
done
91+
92+
# GitHub Output으로 내보내기
93+
echo "no_commit_count=${#NO_COMMIT_MEMBERS[@]}" >> $GITHUB_OUTPUT
94+
95+
# 배열을 쉼표로 구분된 문자열로 변환
96+
NO_COMMIT_LIST=$(IFS=','; echo "${NO_COMMIT_MEMBERS[*]}")
97+
echo "no_commit_list=$NO_COMMIT_LIST" >> $GITHUB_OUTPUT
98+
fi
99+
100+
- name: Create Issue if there are missing commits
101+
if: steps.check.outputs.no_commit_count != '0'
102+
uses: actions/github-script@v7
103+
with:
104+
github-token: ${{ secrets.GITHUB_TOKEN }}
105+
script: |
106+
const yesterday = '${{ steps.check.outputs.yesterday }}';
107+
const noCommitList = '${{ steps.check.outputs.no_commit_list }}'.split(',');
108+
const count = '${{ steps.check.outputs.no_commit_count }}';
109+
110+
const body = `## 📊 ${yesterday} 커밋 체크 결과
111+
112+
**커밋하지 않은 멤버: ${count}명**
113+
114+
${noCommitList.map(name => `- ${name} (벌금 5,000원)`).join('\n')}
115+
116+
---
117+
118+
💰 총 벌금: ${parseInt(count) * 5000}원
119+
120+
⏰ 체크 시간: ${new Date().toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })}`;
121+
122+
// 이슈 생성
123+
await github.rest.issues.create({
124+
owner: context.repo.owner,
125+
repo: context.repo.repo,
126+
title: `[${yesterday}] 커밋 미제출 알림`,
127+
body: body,
128+
labels: ['daily-check', 'penalty']
129+
});
130+
131+
- name: Print summary
132+
run: |
133+
echo "### 커밋 체크 완료 ✅" >> $GITHUB_STEP_SUMMARY
134+
echo "" >> $GITHUB_STEP_SUMMARY
135+
echo "**체크 날짜**: ${{ steps.check.outputs.yesterday }}" >> $GITHUB_STEP_SUMMARY
136+
echo "" >> $GITHUB_STEP_SUMMARY
137+
138+
if [ "${{ steps.check.outputs.no_commit_count }}" == "0" ]; then
139+
echo "🎉 **모든 멤버가 커밋했습니다!**" >> $GITHUB_STEP_SUMMARY
140+
else
141+
echo "❌ **커밋하지 않은 멤버**: ${{ steps.check.outputs.no_commit_count }}명" >> $GITHUB_STEP_SUMMARY
142+
echo "" >> $GITHUB_STEP_SUMMARY
143+
echo "**대상자**: ${{ steps.check.outputs.no_commit_list }}" >> $GITHUB_STEP_SUMMARY
144+
echo "" >> $GITHUB_STEP_SUMMARY
145+
echo "💰 **총 벌금**: $(($${{ steps.check.outputs.no_commit_count }} * 5000))원" >> $GITHUB_STEP_SUMMARY
146+
fi

0 commit comments

Comments
 (0)