Skip to content

Commit 8004e34

Browse files
authored
LeetHub settings
1 parent 08d6801 commit 8004e34

1 file changed

Lines changed: 143 additions & 0 deletions

File tree

.github/workflows/setting.yml

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
name: LeetHub Setting
2+
3+
on:
4+
push:
5+
branches: [ "main" ]
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
detect:
12+
runs-on: ubuntu-latest
13+
outputs:
14+
should_run: ${{ steps.check_leethub.outputs.should_run }}
15+
package_name: ${{ steps.detect_package.outputs.PACKAGE_NAME }}
16+
commit_msg: ${{ steps.check_leethub.outputs.commit_msg }}
17+
level: ${{ steps.extract_level.outputs.leetcode_level }}
18+
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v3
22+
with:
23+
fetch-depth: 2 # 이전 로그 2개까지 해서 변경점 비교(디폴트는 1)
24+
25+
- name: Check if LeetHub Commit
26+
id: check_leethub
27+
run: |
28+
COMMIT_MSG=$(git log -1 --pretty=%B | tail -n 1)
29+
echo "Latest commit message: $COMMIT_MSG"
30+
31+
if [[ "$COMMIT_MSG" == Time:* && "$COMMIT_MSG" == *"- LeetHub" ]]; then
32+
echo "should_run=true" >> $GITHUB_OUTPUT
33+
echo "commit_msg=${COMMIT_MSG}" >> $GITHUB_OUTPUT
34+
echo "LeetHub 커밋 확인, 패키지 이사 작업 준비 ✅"
35+
else
36+
echo "should_run=false" >> $GITHUB_OUTPUT
37+
echo "commit_msg=" >> $GITHUB_OUTPUT
38+
echo "작업 없이 패스하면 됩니다 ❌"
39+
fi
40+
41+
- name: Detect New Solve Package
42+
id: detect_package
43+
if: steps.check_leethub.outputs.should_run == 'true'
44+
run: |
45+
EXCLUDE_DIRS=("LeetCode" "백준" "프로그래머스" ".github")
46+
NEW_DIRS=$(git diff --name-only HEAD~1 HEAD | awk -F/ 'NF==2 {print $1}' | sort -u)
47+
48+
for DIR in $NEW_DIRS; do
49+
SKIP=false
50+
for EX in "${EXCLUDE_DIRS[@]}"; do
51+
if [[ "$DIR" == "$EX" ]]; then
52+
SKIP=true
53+
break
54+
fi
55+
done
56+
57+
if [[ "$SKIP" == false ]]; then
58+
echo "새로 추가된 문제풀이 패키지명: $DIR"
59+
echo "PACKAGE_NAME=$DIR" >> $GITHUB_OUTPUT
60+
break
61+
fi
62+
done
63+
64+
- name: Extract Level from README
65+
id: extract_level
66+
if: steps.check_leethub.outputs.should_run == 'true' && steps.detect_package.outputs.PACKAGE_NAME != ''
67+
run: |
68+
PACKAGE_NAME="${{ steps.detect_package.outputs.PACKAGE_NAME }}"
69+
README_PATH="$PACKAGE_NAME/README.md"
70+
71+
if [ ! -f "$README_PATH" ]; then
72+
echo "README.md 파일 없음 ❌"
73+
echo "leetcode_level=Unknown" >> $GITHUB_OUTPUT
74+
exit 0
75+
fi
76+
77+
# h3 태그 안에서 난이도 추출
78+
LEVEL=$(grep -oP '(?<=<h3>).*?(?=</h3>)' "$README_PATH" | head -n 1)
79+
80+
# 없으면 fallback
81+
if [ -z "$LEVEL" ]; then
82+
LEVEL="Unknown"
83+
fi
84+
85+
echo "LeetCode 문제 난이도: $LEVEL"
86+
echo "leetcode_level=$LEVEL" >> $GITHUB_OUTPUT
87+
88+
move:
89+
needs: detect
90+
if: ${{ needs.detect.outputs.should_run == 'true' && needs.detect.outputs.package_name != '' }}
91+
runs-on: ubuntu-latest
92+
93+
steps:
94+
- name: Checkout
95+
uses: actions/checkout@v3
96+
with:
97+
token: ${{ secrets.GITHUB_TOKEN }}
98+
99+
- name: Move Directory
100+
run: |
101+
PACKAGE_NAME="${{ needs.detect.outputs.PACKAGE_NAME }}"
102+
LEVEL_DIRECTORY="${{ needs.detect.outputs.level }}"
103+
ROOT_DIR="LeetCode"
104+
105+
echo "옮겨야 할 패키지 확인: $PACKAGE_NAME"
106+
echo "감지된 레벨: $LEVEL_DIRECTORY"
107+
108+
# 먼저 기존에 동일한 디렉토리 위치가 있는지 탐색
109+
FOUND_EXISTING_PATH=""
110+
for dir in "$ROOT_DIR"/*; do
111+
if [ -d "$dir/$PACKAGE_NAME" ]; then
112+
FOUND_EXISTING_PATH="$dir"
113+
echo "기존 디렉토리 발견: $dir/$PACKAGE_NAME"
114+
break
115+
fi
116+
done
117+
118+
# 기존 위치로 이동
119+
if [ -n "$FOUND_EXISTING_PATH" ]; then
120+
DEST="$FOUND_EXISTING_PATH/$PACKAGE_NAME"
121+
echo "→ 기존 디렉토리로 병합 이동: $DEST"
122+
mv "$PACKAGE_NAME"/* "$DEST"/
123+
rmdir "$PACKAGE_NAME" || true
124+
125+
# 새로 이동해야 할 경우
126+
else
127+
DEST="$ROOT_DIR/$LEVEL_DIRECTORY/$PACKAGE_NAME"
128+
echo "→ 새 디렉토리로 이동: $DEST"
129+
mkdir -p "$ROOT_DIR/$LEVEL_DIRECTORY"
130+
mv "$PACKAGE_NAME" "$ROOT_DIR/$LEVEL_DIRECTORY/"
131+
fi
132+
133+
- name: Commit and Push
134+
run: |
135+
COMMIT_MSG="${{ needs.detect.outputs.commit_msg }}"
136+
echo "커밋 메세지 확인: $COMMIT_MSG"
137+
138+
git config --global user.name "woolnd"
139+
git config --global user.email "wodnd0418@gmail.com"
140+
141+
git add .
142+
git commit -m "$COMMIT_MSG" || echo "No changes to commit"
143+
git push

0 commit comments

Comments
 (0)