This file contains 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: Rename and Add New Markdown Files | |
on: | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
jobs: | |
process-markdown: | |
runs-on: ubuntu-latest | |
env: | |
destination_directory: koreanPageTitle # 환경 변수로 선언 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.GITBOOKKEY }} | |
fetch-depth: 0 | |
- name: Set UTF-8 Encoding | |
run: | | |
export LC_CTYPE="UTF-8" | |
- name: Rename Folders Based on README H1 and Copy Markdown Files | |
run: | | |
set -euxo pipefail # 디버깅을 위한 셸 옵션 설정 | |
# 목적지 디렉토리 설정 | |
destination_directory="${destination_directory}" | |
# 목적지 디렉토리 생성 | |
mkdir -p "$destination_directory" | |
# 모든 README.md 파일의 경로와 헤딩을 미리 수집 | |
mapfile -t readme_files < <(find developLog -type f -name 'README.md') | |
declare -A dir_mappings # 원본 디렉토리와 새로운 디렉토리의 매핑을 저장 | |
# README.md 파일을 기반으로 새로운 디렉토리 이름 생성 | |
for file in "${readme_files[@]}"; do | |
echo "Processing $file" | |
# README.md 파일에서 첫 번째 h1 헤딩 추출 | |
heading=$(grep -m 1 '^# ' "$file" | sed 's/^# //') | |
# 헤딩이 없는 경우 건너뜁니다 | |
if [[ -z "$heading" ]]; then | |
echo "헤딩을 찾을 수 없습니다: $file" | |
continue | |
fi | |
# 헤딩 정제 (파일명에 적합하도록) | |
heading=$(echo "$heading" | tr -cd '[:alnum:] _-') | |
# README.md 파일이 있는 디렉토리 경로 | |
dir=$(dirname "$file") | |
relative_dir=$(realpath --relative-to="developLog" "$dir") | |
# 새로운 디렉토리 경로 생성 | |
new_dir="$destination_directory/$relative_dir" | |
new_dir_parent=$(dirname "$new_dir") | |
new_dir="$new_dir_parent/$heading" | |
# 디렉토리 매핑 저장 | |
dir_mappings["$dir"]="$new_dir" | |
done | |
# 파일 및 디렉토리 복사 및 이름 변경 | |
for src_dir in "${!dir_mappings[@]}"; do | |
dest_dir="${dir_mappings[$src_dir]}" | |
echo "Copying from $src_dir to $dest_dir" | |
# 디렉토리 복사 | |
mkdir -p "$dest_dir" | |
cp -r "$src_dir/"* "$dest_dir/" || true # 오류 무시 (파일이 없을 수 있음) | |
# README.md 파일은 이미 복사되었으므로 추가 처리 불필요 | |
done | |
# 나머지 마크다운 파일 처리 | |
find developLog -type f -name '*.md' ! -name 'README.md' | while read file; do | |
echo "Processing $file" | |
# 첫 번째 h1 헤딩을 추출하여 제목으로 사용 | |
title=$(grep -m 1 '^#' "$file" | sed 's/^# //') | |
if [ -n "$title" ]; then | |
# 제목 정제 (파일명에 적합하도록) | |
title=$(echo "$title" | tr -cd '[:alnum:] _-') | |
src_dir=$(dirname "$file") | |
relative_dir=$(realpath --relative-to="developLog" "$src_dir") | |
# 기존의 디렉토리 매핑이 있는 경우 적용 | |
if [[ -n "${dir_mappings[$src_dir]}" ]]; then | |
dest_dir="${dir_mappings[$src_dir]}" | |
else | |
dest_dir="$destination_directory/$relative_dir" | |
mkdir -p "$dest_dir" | |
fi | |
new_filename="$dest_dir/$title.md" | |
if [ -f "$new_filename" ]; then | |
if cmp -s "$file" "$new_filename"; then | |
echo "파일 $new_filename 이 이미 존재하며 동일합니다. 건너뜁니다..." | |
else | |
echo "파일 $new_filename 이 이미 존재하지만 다릅니다. 덮어씁니다." | |
cp "$file" "$new_filename" | |
fi | |
else | |
echo "$file 을(를) $new_filename 으로 복사합니다" | |
cp "$file" "$new_filename" | |
fi | |
else | |
echo "유효한 제목을 찾을 수 없습니다: $file, 건너뜁니다." | |
fi | |
done | |
# .gitbook/assets 디렉토리 복사 | |
if [ -d "developLog/.gitbook/assets" ]; then | |
mkdir -p "$destination_directory/developLog/.gitbook/assets" | |
cp -r developLog/.gitbook/assets/* "$destination_directory/developLog/.gitbook/assets/" | |
echo ".gitbook/assets 디렉토리를 $destination_directory/developLog 으로 복사했습니다." | |
fi | |
# 복사된 파일 확인 | |
echo "$destination_directory 디렉토리의 내용:" | |
find "$destination_directory" -type f | |
- name: Commit changes in koreanPageTitle branch | |
run: | | |
set -euxo pipefail # 디버깅을 위한 셸 옵션 설정 | |
# 목적지 디렉토리 설정 | |
destination_directory="${destination_directory}" | |
# Git 사용자 설정 (이미 설정되어 있다면 생략 가능) | |
git config user.name 'GoldenPearls' | |
git config user.email 'prettylee620@naver.com' | |
# 새로운 브랜치 생성 및 체크아웃 | |
git checkout -b koreanPageTitle | |
# 변경된 파일 추가 | |
git add "$destination_directory" | |
# 커밋 작성 | |
git commit -m "Rename and update Markdown files based on h1 titles in koreanPageTitle" | |
# 원격 저장소에 브랜치 푸시 | |
git push origin koreanPageTitle --force |