# CircleCI 워크플로우를 사용한 Spaces 관리

**CircleCI 워크플로**를 사용하여 앱을 GitHub 저장소와 동기화할 수 있습니다.

[CircleCI](https://circleci.com)는 소프트웨어 개발 프로세스를 자동화하는 데 도움이 되는 지속적 통합 및 지속적 전달(CI/CD) 플랫폼입니다. [CircleCI workflow](https://circleci.com/docs/workflows/)는 소프트웨어 애플리케이션의 빌드, 테스트 및 배포 프로세스를 간소화하기 위해 CircleCI에 의해 오케스트레이션되는 설정 파일에 정의된 자동화 작업 세트입니다.

*참고: 10MB를 초과하는 파일은 [git-xet](./xet/using-xet-storage#git-xet)(권장) 또는 Git LFS로 추적해야 합니다. 둘 다 사용하지 않으려면 파일을 검토하고 히스토리를 확인해야 할 수 있습니다. [BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/)와 같은 도구를 사용하여 히스토리에서 큰 파일을 제거하세요. BFG Repo-Cleaner는 저장소의 로컬 복사본을 백업으로 유지합니다.*

먼저 GitHub 저장소와 Spaces 앱을 함께 설정합니다. 기존 Git 저장소에 Spaces 앱을 추가 리모트(remote)로 추가합니다.

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

그런 다음 처음에는 모든 것을 동기화하기 위해 강제 푸시(force push)를 수행합니다:

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

다음으로, `main` git 브랜치를 Spaces에 push하기 위한 [CircleCI 워크플로](https://circleci.com/docs/workflows/)를 설정합니다.

아래 예시에서:

* `HF_USERNAME`를 사용자 이름으로, `SPACE_NAME`을 Space 이름으로 교체하세요.
* [CircleCI에서 컨텍스트를 생성](https://circleci.com/docs/contexts/)하고, *HF_PERSONAL_TOKEN*이라는 이름의 환경 변수를 추가합니다(이름은 자유롭게 지정할 수 있으며, HF_PERSONAL_TOKEN 대신 생성한 키를 사용합니다). 값에는 Hugging Face API 토큰을 입력합니다. Hugging Face API 토큰은 [Hugging Face 프로필](https://huggingface.co/settings/tokens)의 **API 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
```

