Skip to content

수정 1트

수정 1트 #294

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