-
Notifications
You must be signed in to change notification settings - Fork 0
143 lines (119 loc) · 4.73 KB
/
move-leetcode.yml
File metadata and controls
143 lines (119 loc) · 4.73 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
name: LeetHub Setting
on:
push:
branches: [ "main" ]
permissions:
contents: write
jobs:
detect:
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.check_leethub.outputs.should_run }}
package_name: ${{ steps.detect_package.outputs.PACKAGE_NAME }}
commit_msg: ${{ steps.check_leethub.outputs.commit_msg }}
level: ${{ steps.extract_level.outputs.leetcode_level }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 2 # 이전 로그 2개까지 해서 변경점 비교(디폴트는 1)
- name: Check if LeetHub Commit
id: check_leethub
run: |
COMMIT_MSG=$(git log -1 --pretty=%B | tail -n 1)
echo "Latest commit message: $COMMIT_MSG"
if [[ "$COMMIT_MSG" == Time:* && "$COMMIT_MSG" == *"- LeetHub" ]]; then
echo "should_run=true" >> $GITHUB_OUTPUT
echo "commit_msg=${COMMIT_MSG}" >> $GITHUB_OUTPUT
echo "LeetHub 커밋 확인, 패키지 이사 작업 준비 ✅"
else
echo "should_run=false" >> $GITHUB_OUTPUT
echo "commit_msg=" >> $GITHUB_OUTPUT
echo "작업 없이 패스하면 됩니다 ❌"
fi
- name: Detect New Solve Package
id: detect_package
if: steps.check_leethub.outputs.should_run == 'true'
run: |
EXCLUDE_DIRS=("LeetCode" "백준" "프로그래머스" ".github")
NEW_DIRS=$(git diff --name-only HEAD~1 HEAD | awk -F/ 'NF==2 {print $1}' | sort -u)
for DIR in $NEW_DIRS; do
SKIP=false
for EX in "${EXCLUDE_DIRS[@]}"; do
if [[ "$DIR" == "$EX" ]]; then
SKIP=true
break
fi
done
if [[ "$SKIP" == false ]]; then
echo "새로 추가된 문제풀이 패키지명: $DIR"
echo "PACKAGE_NAME=$DIR" >> $GITHUB_OUTPUT
break
fi
done
- name: Extract Level from README
id: extract_level
if: steps.check_leethub.outputs.should_run == 'true' && steps.detect_package.outputs.PACKAGE_NAME != ''
run: |
PACKAGE_NAME="${{ steps.detect_package.outputs.PACKAGE_NAME }}"
README_PATH="$PACKAGE_NAME/README.md"
if [ ! -f "$README_PATH" ]; then
echo "README.md 파일 없음 ❌"
echo "leetcode_level=Unknown" >> $GITHUB_OUTPUT
exit 0
fi
# h3 태그 안에서 난이도 추출
LEVEL=$(grep -oP '(?<=<h3>).*?(?=</h3>)' "$README_PATH" | head -n 1)
# 없으면 fallback
if [ -z "$LEVEL" ]; then
LEVEL="Unknown"
fi
echo "LeetCode 문제 난이도: $LEVEL"
echo "leetcode_level=$LEVEL" >> $GITHUB_OUTPUT
move:
needs: detect
if: ${{ needs.detect.outputs.should_run == 'true' && needs.detect.outputs.package_name != '' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Move Directory
run: |
PACKAGE_NAME="${{ needs.detect.outputs.PACKAGE_NAME }}"
LEVEL_DIRECTORY="${{ needs.detect.outputs.level }}"
ROOT_DIR="LeetCode"
echo "옮겨야 할 패키지 확인: $PACKAGE_NAME"
echo "감지된 레벨: $LEVEL_DIRECTORY"
# 먼저 기존에 동일한 디렉토리 위치가 있는지 탐색
FOUND_EXISTING_PATH=""
for dir in "$ROOT_DIR"/*; do
if [ -d "$dir/$PACKAGE_NAME" ]; then
FOUND_EXISTING_PATH="$dir"
echo "기존 디렉토리 발견: $dir/$PACKAGE_NAME"
break
fi
done
# 기존 위치로 이동
if [ -n "$FOUND_EXISTING_PATH" ]; then
DEST="$FOUND_EXISTING_PATH/$PACKAGE_NAME"
echo "→ 기존 디렉토리로 병합 이동: $DEST"
mv "$PACKAGE_NAME"/* "$DEST"/
rmdir "$PACKAGE_NAME" || true
# 새로 이동해야 할 경우
else
DEST="$ROOT_DIR/$LEVEL_DIRECTORY/$PACKAGE_NAME"
echo "→ 새 디렉토리로 이동: $DEST"
mkdir -p "$ROOT_DIR/$LEVEL_DIRECTORY"
mv "$PACKAGE_NAME" "$ROOT_DIR/$LEVEL_DIRECTORY/"
fi
- name: Commit and Push
run: |
COMMIT_MSG="${{ needs.detect.outputs.commit_msg }}"
echo "커밋 메세지 확인: $COMMIT_MSG"
git config --global user.name codewith-MJ
git config --global user.email minji.regina.kim@gmail.com
git add .
git commit -m "$COMMIT_MSG" || echo "No changes to commit"
git push