[level 1] Title: 평균 일일 대여 요금 구하기, Time: 0.00 ms, Memory: 0.0 MB -Baek… #50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Auto-generate Wiki Page for AC/PS | |
| on: | |
| push: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| jobs: | |
| build-wiki: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout Main Repo | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 2 | |
| - name: Get newly added README.md files | |
| id: get_files | |
| run: | | |
| git config core.quotePath false | |
| FILES=$(git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -E "^(백준|프로그래머스)/.*/README.md$" || true) | |
| echo "Found new files: $FILES" | |
| echo "files=$FILES" >> $GITHUB_OUTPUT | |
| - name: Checkout Wiki Repo | |
| if: steps.get_files.outputs.files != '' | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ${{ github.repository }}.wiki | |
| path: wiki | |
| token: ${{ secrets.WIKI_TOKEN }} | |
| - name: Generate and Commit to Wiki | |
| if: steps.get_files.outputs.files != '' | |
| run: | | |
| touch wiki_log.txt | |
| while IFS= read -r FILE_PATH; do | |
| [ -z "$FILE_PATH" ] && continue | |
| echo "--- Processing: $FILE_PATH ---" | |
| PLATFORM=$(echo "$FILE_PATH" | cut -d'/' -f1) | |
| DIR_PATH=$(dirname "$FILE_PATH") | |
| # README 첫 줄 파싱 | |
| TITLE_LINE=$(head -n 1 "$FILE_PATH" | sed 's/^# //') | |
| # 난이도 추출 | |
| DIFFICULTY=$(echo "$TITLE_LINE" | grep -o '\[.*\]' | head -n 1) | |
| DIFFICULTY_CLEAN=$(echo "$DIFFICULTY" | sed 's/\[//g' | sed 's/\]//g') | |
| # 문제 번호 추출 | |
| PROBLEM_NUM=$(echo "$TITLE_LINE" | grep -oE '[0-9]+' | tail -n 1) | |
| # [수정 1] 문제 이름 추출 시 앞뒤 공백(xargs) 제거 및 정규식 보완 | |
| # sed -E "s/ - ${PROBLEM_NUM}\s*$//" : 숫자 뒤에 공백이 있어도 처리하도록 \s* 추가 | |
| PROBLEM_NAME=$(echo "$TITLE_LINE" | sed -E 's/^\[.*\] //' | sed -E "s/ - ${PROBLEM_NUM}.*$//" | xargs) | |
| PROBLEM_LINK="" | |
| if [ "$PLATFORM" == "백준" ]; then | |
| PROBLEM_LINK="https://www.acmicpc.net/problem/$PROBLEM_NUM" | |
| elif [ "$PLATFORM" == "프로그래머스" ]; then | |
| PROBLEM_LINK="https://school.programmers.co.kr/learn/courses/30/lessons/$PROBLEM_NUM" | |
| fi | |
| SOLUTION_FILE_NAME=$(find "$DIR_PATH" -maxdepth 1 \( -name "*.java" -o -name "*.py" -o -name "*.cpp" -o -name "*.js" \) -exec basename {} \; | head -n 1) | |
| ENCODED_DIR_PATH=$(echo "$DIR_PATH" | sed 's/ /%20/g') | |
| ENCODED_FILE_NAME=$(echo "$SOLUTION_FILE_NAME" | sed 's/ /%20/g') | |
| SOLUTION_LINK="https://github.com/${{ github.repository }}/blob/main/${ENCODED_DIR_PATH}/${ENCODED_FILE_NAME}" | |
| WIKI_PAGE_TITLE="[$PLATFORM] $DIFFICULTY_CLEAN. $PROBLEM_NAME" | |
| # 1. 대괄호 제거 | |
| # 2. 공백을 -로 변경 | |
| # 3. 연속된 -(--)를 하나(-)로 변경 (squeeze) | |
| # 4. 맨 앞이나 맨 뒤에 있는 - 제거 | |
| SAFE_FILENAME=$(echo "$WIKI_PAGE_TITLE" | sed 's/\[//g' | sed 's/\]//g' | sed 's/ /-/g' | sed 's/-\+/-/g' | sed 's/^-\|-$//g') | |
| WIKI_FILE_NAME="${SAFE_FILENAME}.md" | |
| WIKI_FILE_PATH="./wiki/$WIKI_FILE_NAME" | |
| # URL에는 .md가 들어가지 않음 | |
| WIKI_FULL_URL="https://github.com/${{ github.repository }}/wiki/$SAFE_FILENAME" | |
| echo "Creating Wiki Page: $WIKI_PAGE_TITLE" | |
| echo "Safe Filename: $SAFE_FILENAME" | |
| { | |
| echo "### 1. 풀이 시간" | |
| echo "- (여기를 수정하세요)" | |
| echo "" | |
| echo "### 2. 난이도" | |
| echo "- 유형: (여기를 수정하세요)" | |
| echo "- 풀이법: ✅ 15분 이내 ⬜ 15분 이상" | |
| echo "- 구현: ⬜ 30분 이내 ⬜ 30분 이상" | |
| echo "- 총평: ⬜ Easy ⬜ Normal ⬜ Hard ⬜ Hell" | |
| echo "" | |
| echo "### 3. 문제 설명" | |
| echo "- (여기를 수정하세요)" | |
| echo "" | |
| echo "### 4. 접근 방법" | |
| echo "- 사용 알고리즘: (여기를 수정하세요. ex. \`DFS\`)" | |
| echo "- (여기를 수정하세요)" | |
| echo "" | |
| echo "### 5. 배운 점 / 느낀 점" | |
| echo "- (여기를 수정하세요)" | |
| echo "" | |
| echo "<br>" | |
| echo "" | |
| echo "> [문제 링크]($PROBLEM_LINK) <br>" | |
| echo "> [My Solution Code]($SOLUTION_LINK)" | |
| } > "$WIKI_FILE_PATH" | |
| echo " - [$WIKI_PAGE_TITLE]($WIKI_FULL_URL)" >> wiki_log.txt | |
| done <<< "${{ steps.get_files.outputs.files }}" | |
| - name: Push changes to Wiki | |
| if: steps.get_files.outputs.files != '' | |
| run: | | |
| cd wiki | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| git config --global user.name "Wiki Bot" | |
| git add . | |
| if ! git diff-index --quiet HEAD; then | |
| git commit -m "Auto-generate wiki page(s) for new solution(s) [skip ci]" | |
| git push | |
| else | |
| echo "No new wiki pages to commit." | |
| fi | |
| - name: Update Main README | |
| if: steps.get_files.outputs.files != '' | |
| run: | | |
| if [ -s wiki_log.txt ]; then | |
| TODAY=$(date '+%Y.%m.%d') | |
| HEADER="- **$TODAY**" | |
| # grep -F: 고정 문자열 검색 (특수문자 무시) | |
| # README.md가 끝에 줄바꿈이 없을 경우를 대비해 tail로 확인하지 않고 전체 검색 | |
| if grep -Fq "$HEADER" README.md; then | |
| echo "Date header '$HEADER' exists. Appending links." | |
| cat wiki_log.txt >> README.md | |
| else | |
| echo "Date header '$HEADER' not found. Creating new block." | |
| # 파일 끝에 강제로 줄바꿈 추가 (안전장치) | |
| echo "" >> README.md | |
| echo "$HEADER" >> README.md | |
| cat wiki_log.txt >> README.md | |
| fi | |
| git config --global user.email "github-actions[bot]@users.noreply.github.com" | |
| git config --global user.name "Wiki Bot" | |
| git add README.md | |
| git commit -m "Docs: Update README with new Wiki links [skip ci]" | |
| git push | |
| fi |