GitHub Actions로 Spaces 관리하기

GitHub Actions로 Spaces 관리하기

공식 huggingface/hub-sync GitHub Action을 사용하면 Space를 GitHub 저장소와 동기화 상태로 유지할 수 있어요.

출처: 문서

본문

hub-sync는 Models와 Datasets에서도 동작해요. 일반적인 사용법은 GitHub Actions를 참고하세요.

설정

  1. Hugging Face 액세스 토큰을 담은 HF_TOKEN이라는 이름의 GitHub 시크릿을 만드세요.
  2. 저장소에 워크플로 파일(예: .github/workflows/sync-to-hub.yml)을 추가하세요.
name: Sync to Hugging Face Hub
on:
  push:
    branches: [main]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: huggingface/[email protected]
        with:
          github_repo_id: ${{ github.repository }}
          huggingface_repo_id: username/my-space
          hf_token: ${{ secrets.HF_TOKEN }}

Space SDK는 space_sdk로 설정할 수 있어요(기본값은 gradio). 모든 파라미터를 살펴보세요.

동작 방식

이 액션은 hf CLI(hf repo create + hf upload)를 사용해 파일을 Hub로 미러링해요. git-to-git 동기화가 아니라 파일 내용을 업로드하는 방식이고, .github/.git/ 디렉토리는 자동으로 제외해요. GitHub 저장소에서 제거된 파일은 Hub에서도 제거돼요.

더 복잡한 워크플로(예: 빌드 단계, 사용자 지정 로직)가 필요하면 워크플로 안에서 hf CLI를 직접 설치해 사용할 수 있어요.

파일 크기 고려사항

10MB보다 큰 파일은 Spaces가 Git-LFS를 요구해요. 동기화 전에 GitHub 저장소의 대용량 파일이 LFS로 추적되고 있는지 확인하세요.

대안: 수동 git push

파일 미러링 대신 git-to-git 동기화를 직접 하고 싶다면 Space의 git 원격으로 바로 푸시할 수 있어요.

name: Sync to Hugging Face hub
on:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  sync-to-hub:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          lfs: true
      - name: Push to hub
        env:
          HF_TOKEN: ${{ secrets.HF_TOKEN }}
        run: git push https://HF_USERNAME:[email protected]/spaces/HF_USERNAME/SPACE_NAME main

HF_USERNAME을 사용자 이름으로, SPACE_NAME을 Space 이름으로 바꾸세요.

더 알아보기 (Learn more)

hub-sync는 파일 내용을 업로드하는 미러링 방식이라 .github/·.git/을 자동 제외해요. 10MB 초과 파일은 미리 Git-LFS로 추적해 두는 게 핵심이에요. git-to-git 동기화가 필요하면 대안 섹션의 직접 push 방식을 쓰면 돼요.