# CircleCIワークフローによるSpacesの管理

**CircleCI ワークフロー**を使用することで、アプリを GitHub リポジトリと同期した状態に保つことができます。

[CircleCI](https://circleci.com)は、ソフトウェア開発プロセスの自動化を支援する継続的インテグレーションおよび継続的デリバリー（CI/CD）プラットフォームです。[CircleCI ワークフロー](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 アプリを追加のリモートとして追加してください。

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

次に、初回にすべてを同期するために強制プッシュを実行します:

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

次に、[CircleCI ワークフロー](https://circleci.com/docs/workflows/)を設定して、`main` git ブランチを Spaces にプッシュします。

以下の例では:

* `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
```

