# Quản lý Spaces bằng các luồng CircleCI

Bạn có thể đồng bộ hóa ứng dụng của mình với kho GitHub bằng một **luồng công việc CircleCI**.

[CircleCI](https://circleci.com) là nền tảng tích hợp liên tục và triển khai liên tục (CI/CD) giúp tự động hóa quy trình phát triển phần mềm. Một [CircleCI workflow](https://circleci.com/docs/workflows/) là tập hợp các tác vụ tự động được định nghĩa trong tệp cấu hình, do CircleCI điều phối, nhằm tối ưu hóa quy trình xây dựng, kiểm thử và triển khai các ứng dụng phần mềm.

*Lưu ý: Các tệp lớn hơn 10MB phải được theo dõi bằng [git-xet](./xet/using-xet-storage#git-xet) (khuyến nghị) hoặc Git LFS. Nếu bạn không muốn sử dụng bất kỳ phương pháp nào, bạn có thể cần xem xét lại các tệp của mình và kiểm tra lịch sử. Hãy sử dụng một công cụ như [BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/) để xóa các tệp lớn khỏi lịch sử của bạn. BFG Repo-Cleaner sẽ giữ một bản sao cục bộ của kho lưu trữ của bạn làm bản sao lưu.*

Đầu tiên, hãy thiết lập cùng lúc kho GitHub và ứng dụng Spaces của bạn. Thêm ứng dụng Spaces của bạn như một remote bổ sung vào kho Git hiện có của bạn.

```bash
git remote add space https://huggingface.co/spaces/HF_USERNAME/SPACE_NAME
```

Sau đó, thực hiện force push để đồng bộ hóa mọi thứ lần đầu tiên:

```bash
git push --force space main
```

Tiếp theo, hãy thiết lập một [luồng công việc CircleCI](https://circleci.com/docs/workflows/) để đẩy nhánh git `main` của bạn lên Spaces.

Trong ví dụ dưới đây:

* Thay `HF_USERNAME` bằng tên người dùng của bạn và `SPACE_NAME` bằng tên Space của bạn.
* [Tạo một context trong CircleCI](https://circleci.com/docs/contexts/) và thêm một biến môi trường vào đó có tên là *HF_PERSONAL_TOKEN* (bạn có thể đặt bất kỳ tên nào, sử dụng khóa bạn đã tạo thay cho HF_PERSONAL_TOKEN) và giá trị là token API Hugging Face của bạn. Bạn có thể tìm thấy token API Hugging Face của mình tại **API Tokens** trên [trang hồ sơ Hugging Face của bạn](https://huggingface.co/settings/tokens).

```yaml
version: 2.1

workflows:
  main:
    jobs:
      - sync-to-huggingface:
          context:
            - HuggingFace
          filters:
            branches:
              only:
                - main

jobs:
  sync-to-huggingface:
    docker:
      - image: alpine
    resource_class: small
    steps:
      - run: 
          name: install git
          command: apk update && apk add openssh-client git
      - checkout
      - run:
          name: push to Huggingface hub
          command: |
                  git config user.email "<your-email@here>" 
                  git config user.name "<your-identifier>" 
                  git push -f https://HF_USERNAME:${HF_PERSONAL_TOKEN}@huggingface.co/spaces/HF_USERNAME/SPACE_NAME main
```

