# GitHub Actions

Bạn có thể sử dụng [GitHub Actions](https://docs.github.com/en/actions) để tự động đồng bộ hóa kho GitHub của bạn với Hugging Face Hub. Hành động chính thức [`huggingface/hub-sync`](https://github.com/marketplace/actions/sync-github-to-hugging-face-hub) hỗ trợ đồng bộ hóa **Models**, **Datasets** và **Spaces**.

> [!TIP]
> Đối với việc phát hành không cần khóa — không phải lưu trữ hay xoay vòng bí mật `HF_TOKEN` — hãy xem [Trusted Publishers](./trusted-publishers), thành phần trao đổi token OIDC tích hợp sẵn của GitHub Actions lấy token Hub có thời hạn ngắn, phạm vi kho, tại đầu mỗi lần chạy.

## Cài đặt

1. Tạo một [access token](https://huggingface.co/settings/tokens) của Hugging Face với quyền **write** cho kho đích. Để bảo mật tốt hơn, hãy sử dụng [fine-grained token](https://huggingface.co/settings/tokens) được giới hạn phạm vi chỉ cho kho mà bạn đang đồng bộ hóa.
2. Thêm token dưới dạng [GitHub secret](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-an-environment) có tên `HF_TOKEN` trong cài đặt kho của bạn.
3. Thêm một tệp workflow (ví dụ: `.github/workflows/sync-to-hub.yml`) vào kho của bạn.

## Cách sử dụng cơ bản

```yaml
name: Sync to Hugging Face Hub
on:
  push:
    branches: [main]

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: huggingface/hub-sync@v0.3.0
        with:
          github_repo_id: ${{ github.repository }}
          huggingface_repo_id: username/repo-name
          hf_token: ${{ secrets.HF_TOKEN }}
```

Mặc định, thao tác này đồng bộ hóa đến một **Space**. Để đồng bộ hóa một mô hình hoặc tập dữ liệu, hãy đặt tham số `repo_type`:

```yaml
      - uses: huggingface/hub-sync@v0.3.0
        with:
          github_repo_id: ${{ github.repository }}
          huggingface_repo_id: username/my-dataset
          hf_token: ${{ secrets.HF_TOKEN }}
          repo_type: dataset
```

## Tham số

| Tham số | Bắt buộc | Mặc định | Mô tả |
|---|---|---|---|
| `github_repo_id` | Có | — | Kho GitHub (sử dụng `${{ github.repository }}`) |
| `huggingface_repo_id` | Có | — | Kho đích trên Hub (`username/repo-name`) |
| `hf_token` | Có | — | Token truy cập Hugging Face |
| `repo_type` | Không | `space` | `space`, `model` hoặc `dataset` |
| `space_sdk` | Không | `gradio` | `gradio`, `streamlit`, `docker` hoặc `static` |
| `private` | Không | `false` | Có tạo kho lưu trữ ở chế độ riêng tư hay không |
| `subdirectory` | Không | `.` | Đồng bộ một thư mục con cụ thể (hữu ích cho các monorepo) |

Hành động này sao chép các tệp của bạn lên Hub bằng CLI `hf` — đây không phải là đồng bộ hóa git-to-git. Nó tự động loại trừ các thư mục `.github/` và `.git/` và đồng bộ hóa các thao tác xóa (các tệp bị xóa khỏi GitHub sẽ bị xóa khỏi Hub).

Đối với các quy trình làm việc phức tạp hơn (ví dụ: các bước build, logic tải lên tùy chỉnh), bạn có thể cài đặt và sử dụng [`hf` CLI](https://huggingface.co/docs/huggingface_hub/en/guides/cli) trực tiếp trong quy trình làm việc của mình thay thế.

Để có hướng dẫn dành riêng cho Spaces (giới hạn kích thước tệp, xử lý LFS), hãy xem [Quản lý Spaces bằng GitHub Actions](./spaces-github-actions).

