[GitHub] velog와 GitHub 연동하기 (velog 글 작성 시, 자동으로 깃허브에 커밋하는 방법)

류넹·2024년 9월 20일
11

etc

목록 보기
13/21

[ + 추가 내용 ]

3일동안 커밋 내역을 지켜본 후, 문제를 발견했다.
그에 맞는 해결을 시도해보았지만, 아직 확실한 방법은 찾지 못했다.
해결 방법을 찾게 되면 꼭 다시 시도해봐야겠다.

  • 문제 : 커밋은 자동으로 잘 생성되지만, 깃허브 잔디(활동 그래프)에는 기록이 되지 않는다.
  • 원인 : GitHub Actions 봇 계정으로 작업을 수행하기 때문에, 실제 사용자의 활동으로 인식되지 않을 가능성이 있다고 한다.
  • 해결 시도 : GitHub Action 파일에 git config --global user.namegit config --global user.email 정보를 내 계정으로 변경해서 실제 내 계정으로 커밋되는 것까지 확인했다.
    하지만, 여전히 잔디에는 기록이 되지 않았다.

    • 아래 이미지에서 2번째 커밋이 내 계정으로 자동 커밋된 내역이지만, 실제 잔디에는 기록되지 않았다.

  • 혹시 해결 방법 아시는 분 있으시면 공유 좀 부탁드립니다 🥲



[ 원문 ]

이미지가 많아서 스크롤이 길지만, 진행해보면 생각보다 간단하니 잘 따라해보자!


1. GitHub > Repository 생성

  • Public으로 생성



2. update_blog.yml 파일 생성

> GitHub action 작성

  • 0) creating a new file 클릭
  • 1) 파일 경로 : .github/workflows/update_blog.yml
    > 이대로 작성하면 폴더도 자동으로 함께 생성됨
  • 2) 내용
name: Update Blog Posts
  

on:
  push:
      branches:
        - [1.브랜치명]  # 또는 워크플로우를 트리거하고 싶은 브랜치 이름
  schedule:
    # 테스트를 원한다면, `한국 표준시 = UTC + 9` 참고해서 시간 수정한 후 테스트해보기
    - cron: '0 0 * * *'  # 매일 자정에 실행, UTC 협정 세계시 기준 (한국 시간 기준 오전 9시)
    - cron: '0 15 * * *' # 매일 자정에 실행, 한국 시간 기준 (UTC 15:00)

jobs:
  update_blog:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Push changes
      run: |
        git config --global user.name 'github-actions[bot]'
        git config --global user.email 'github-actions[bot]@users.noreply.github.com'
        git push https://${{ secrets.GH_PAT }}@github.com/[2.본인깃허브아이디]/velog.git

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'

    - name: Install dependencies
      run: |
        pip install feedparser gitpython

    - name: Run script
      run: python scripts/update_blog.py
  • 3) Commit changes 클릭해서 커밋
  • 참고 이미지



3. update_blog.py 파일 생성

> 파이썬 스크립트 작성

  • 0) velog 리포지토리 > Add file > Create new file 클릭
  • 1) 파일 경로 : scripts/update_blog.py
    > 이대로 작성하면 폴더도 자동으로 함께 생성됨
  • 2) 내용
import feedparser
import git
import os

# 벨로그 RSS 피드 URL
# example : rss_url = 'https://api.velog.io/rss/@rimgosu'
rss_url = 'https://api.velog.io/rss/@[본인벨로그아이디]'

# 깃허브 레포지토리 경로
repo_path = '.'

# 'velog-posts' 폴더 경로
posts_dir = os.path.join(repo_path, 'velog-posts')

# 'velog-posts' 폴더가 없다면 생성
if not os.path.exists(posts_dir):
    os.makedirs(posts_dir)

# 레포지토리 로드
repo = git.Repo(repo_path)

# RSS 피드 파싱
feed = feedparser.parse(rss_url)

# 각 글을 파일로 저장하고 커밋
for entry in feed.entries:
    # 파일 이름에서 유효하지 않은 문자 제거 또는 대체
    file_name = entry.title
    file_name = file_name.replace('/', '-')  # 슬래시를 대시로 대체
    file_name = file_name.replace('\\', '-')  # 백슬래시를 대시로 대체
    # 필요에 따라 추가 문자 대체
    file_name += '.md'
    file_path = os.path.join(posts_dir, file_name)

    # 파일이 이미 존재하지 않으면 생성
    if not os.path.exists(file_path):
        with open(file_path, 'w', encoding='utf-8') as file:
            file.write(entry.description)  # 글 내용을 파일에 작성

        # 깃허브 커밋
        repo.git.add(file_path)
        repo.git.commit('-m', f'Add post: {entry.title}')

# 변경 사항을 깃허브에 푸시
repo.git.push()
  • 3) Commit changes 클릭해서 커밋
  • 참고 이미지



4. PAT 권한 받기

1) GitHub 계정 > Settings 클릭


2) Developer settings 클릭


3) Personal access tokens > Tokens (classic) > Generate new token > Generate new token (classic) 클릭


4) 토큰 이름 작성 & repo, workflow 체크 후 Generate token 클릭


5) 토큰 복사

  • 이 창을 벗어나면 이후에는 토큰 확인이 불가하니 꼭 복사 !! 해두기

6) velog 리포지토리 > Settings > Secrets and Variables > Actions > New repository secret 클릭


7) Name, Secret 작성 후 Add secret 클릭

  • Name : GH_PAT
  • Secret : 위에서 복사한 토큰 붙여넣기



5. 리포지토리에 외부 권한 부여

  • 1) velog 리포지토리 > Settings 클릭
  • 2) Actions > General 클릭
  • 3) 4개 체크 및 Save (각 항목 변경할 때마다 Save도 잊지 말고 눌러주기)


💡 성공 확인!

velog-posts 폴더와 함께 벨로그에 작성한 글이 커밋된 것을 확인할 수 있다.




References

profile
학습용 커스터마이징 간단 개발자 사전

6개의 댓글

comment-user-thumbnail
2025년 3월 8일

덕분에 깃허브 연동 쉽게 했습니다! 그러면 리포지토리 연동한 이후에 작성한 글만 깃허브로 올라가는게 맞나요? 기존의 것들은 제외하구요?

1개의 답글
comment-user-thumbnail
2025년 7월 12일

덕분에 깃허브 연동은 성공을 하였습니다! velog 에 작성한 글들도 제대로 올라가는것도 확인을 했는데 깃허브에 잔디는 따로 심어지지 않는 것을 확인하였습니다. 혹시 이부분에 대해서 아시는바가 있는지 궁금해서 여쭤봅니다! 감사합니다

2개의 답글