본문 바로가기

개발/GitHub

Profile Readme 꾸미기 - 블로그 최신 글 추가하기 (2)

728x90
반응형

이전 글 참고

2024.07.12 - [개발/GitHub] - Profile Readme 꾸미기 - 블로그 최신 글 추가하기 (1)

 

Profile Readme 꾸미기 - 블로그 최신 글 추가하기 (1)

항상 뭐든지 시작 전에 끝을 봐야 한다고 생각해 시작을 안 하는 병이 있다.그렇게 GitHub Profile Readme를 꾸며야지 해놓고 방치한지 어언 2년...도저히 미룰 수 없어 조금씩 꾸미자는 생각으로 오랜

jjrdd.tistory.com

 

저번에 워크플로우를 실행시킬 때 마다 readme에 누적되는 오류가 있었는데 오늘 수정해보겠다!

 

저번과 달라진게 없지만 2차 완료 ㅋㅋ 사실상 썸네일 용 이미지 ㅎ

수정 과정

우선 기존의 readme에서 내가 수정하고 하는 부분만 추출하기 위해 주석을 작성해둔다.

시작 부분에 <!-- BLOG-POST-LIST:START -->, 끝 부분에 <!-- BLOG_POST_LIST:END -->를 작성해두었다.

 

 

저번에 작성했던 update-readme.yml에서 5개의 최신 블로그 글을 작성하는 부분을 수정해야한다.

아까 readme에 추가했던 주석과 똑같이 시작과 끝 부분에 출력하는 부분을 추가해야 한다.

그래야 수정 후에도 주석이 남아 있어 여러 번 실행되어도 문제 없다!

(앗 근데 지금 보니까 제목은 굳이 여러번 바꿀 필요가 없잖아? 나중에 수정해야지😅)

 

그 후 기존 readme와 새로 작성한 readme를 결합하는 부분을 수정해야 한다.

원본 텍스트를 변경하기 위해 sed -i를 사용한다.

 

<!-- BLOG-POST-LIST:START -->와 <!-- BLOG-POST-LIST:END --> 사이의 범위를 지정 후

시작 주석(<!-- BLOG-POST-LIST:START -->)이 나타나면, latest-post.md 파일의 내용을 해당 위치에 삽입한다.

그 후 범위 내 모든 줄을 삭제합니다.

 

echo "<!-- BLOG-POST-LIST:START -->" > latest-post.md
echo "### Latest Blog Posts" >> latest-post.md
for ((i=1; i<=5; i++)); do
  TITLE=$(echo "$XML_DATA" | xmllint --xpath "string(/rss/channel/item[$i]/title)" - 2>/dev/null || echo "No title")
  LINK=$(echo "$XML_DATA" | xmllint --xpath "string(/rss/channel/item[$i]/link)" - 2>/dev/null || echo "No link")
  echo "- [$TITLE]($LINK)" >> latest-post.md
done
echo "<!-- BLOG-POST-LIST:END -->" >> latest-post.md

sed -i '/<!-- BLOG-POST-LIST:START -->/,/<!-- BLOG-POST-LIST:END -->/ {
  /<!-- BLOG-POST-LIST:START -->/ {
    r latest-post.md
  }
  d
}' README.md
반응형

최종 코드

name: Update README with Latest Blog Post
on:
  workflow_dispatch:

jobs:
  update-readme:
    name: Update README
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2
      
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y curl jq libxml2-utils

      - name: Extract latest blog post
        run: |
          RSS_FEED="http://jjrdd.tistory.com/rss"
          XML_DATA=$(curl -s $RSS_FEED)
          if [[ $? -ne 0 ]]; then
            echo "Failed to download RSS feed"
            exit 1
          fi

          echo "<!-- BLOG-POST-LIST:START -->" > latest-post.md # 범위 시작 주석
          echo "### Latest Blog Posts" >> latest-post.md
          for ((i=1; i<=5; i++)); do
            TITLE=$(echo "$XML_DATA" | xmllint --xpath "string(/rss/channel/item[$i]/title)" - 2>/dev/null || echo "No title")
            LINK=$(echo "$XML_DATA" | xmllint --xpath "string(/rss/channel/item[$i]/link)" - 2>/dev/null || echo "No link")
            echo "- [$TITLE]($LINK)" >> latest-post.md
          done
          echo "<!-- BLOG-POST-LIST:END -->" >> latest-post.md # 범위 끝 주석

          sed -i '/<!-- BLOG-POST-LIST:START -->/,/<!-- BLOG-POST-LIST:END -->/ { # 범위를 찾고
            /<!-- BLOG-POST-LIST:START -->/ { # 시작 주석이 나타나면
              r latest-post.md # latest-post.md를 해당 위치에 삽입
            }
            d # 범위 내 모든 줄 삭제
          }' README.md

      - name: Commit and Push Changes
        run: |
          git config --global user.name 'JoHyeonJi0408'
          git config --global user.email '1692074@hansung.ac.kr'
          git add README.md
          git commit -m "Update README with latest blog post"
          git push
728x90
반응형