KyosukeIchikawa commited on
Commit
e957020
·
1 Parent(s): fb3c066

Hugging Face Spacesへのデプロイ用のGitHub Actionsワークフローを追加し、デプロイ手順をドキュメント化しました。CIが成功した場合のみ手動でデプロイできるように設定しました。

Browse files
.github/workflows/deploy-to-hf.yml ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Deploy to Hugging Face Space
2
+
3
+ on:
4
+ workflow_dispatch: # 手動デプロイボタン
5
+
6
+ jobs:
7
+ check-ci:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - name: Check CI status
11
+ uses: actions/github-script@v6
12
+ with:
13
+ script: |
14
+ const { data: runs } = await github.rest.actions.listWorkflowRuns({
15
+ owner: context.repo.owner,
16
+ repo: context.repo.repo,
17
+ workflow_id: 'ci.yml',
18
+ branch: 'main',
19
+ status: 'success',
20
+ per_page: 1
21
+ });
22
+
23
+ if (runs.total_count === 0) {
24
+ core.setFailed('CIが成功していません。デプロイする前にCIを実行して成功させてください。');
25
+ }
26
+
27
+ deploy:
28
+ needs: check-ci
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v3
32
+
33
+ - name: Set up Python
34
+ uses: actions/setup-python@v4
35
+ with:
36
+ python-version: '3.11'
37
+
38
+ - name: Install Hugging Face Hub CLI
39
+ run: pip install huggingface_hub
40
+
41
+ - name: Login to Hugging Face
42
+ env:
43
+ HF_TOKEN: ${{ secrets.HF_TOKEN }}
44
+ run: huggingface-cli login --token $HF_TOKEN
45
+
46
+ - name: Deploy to Hugging Face Space
47
+ env:
48
+ HF_SPACE_ID: Kyosuke0/yomitalk
49
+ run: |
50
+ # 必要なファイルをスペースにプッシュ
51
+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
52
+ git config --global user.name "GitHub Actions"
53
+
54
+ # huggingface_hubを使用して直接アップロード
55
+ python -c "
56
+ from huggingface_hub import HfApi
57
+ import os
58
+ import glob
59
+
60
+ api = HfApi()
61
+ space_id = os.environ.get('HF_SPACE_ID')
62
+
63
+ # すべての必要なファイルをアップロード
64
+ files_to_upload = [
65
+ 'app.py',
66
+ 'requirements.txt',
67
+ 'pyproject.toml',
68
+ 'LICENSE',
69
+ 'README.md',
70
+ ]
71
+
72
+ # ディレクトリ全体をアップロード
73
+ dirs_to_upload = ['yomitalk', 'assets', 'docs']
74
+
75
+ # 個々のファイルをアップロード
76
+ for file in files_to_upload:
77
+ if os.path.exists(file):
78
+ print(f'Uploading {file}')
79
+ api.upload_file(
80
+ path_or_fileobj=file,
81
+ path_in_repo=file,
82
+ repo_id=space_id,
83
+ repo_type='space',
84
+ )
85
+
86
+ # ディレクトリ内のファイルをアップロード
87
+ for dir_path in dirs_to_upload:
88
+ if os.path.exists(dir_path):
89
+ for root, _, files in os.walk(dir_path):
90
+ for file in files:
91
+ file_path = os.path.join(root, file)
92
+ # 不要なファイルをスキップ
93
+ if '__pycache__' in file_path or '.git' in file_path:
94
+ continue
95
+ print(f'Uploading {file_path}')
96
+ api.upload_file(
97
+ path_or_fileobj=file_path,
98
+ path_in_repo=file_path,
99
+ repo_id=space_id,
100
+ repo_type='space',
101
+ )
102
+ "
docs/deploy-to-hf.md ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Hugging Face Spacesへのデプロイ方法
2
+
3
+ このプロジェクトは、GitHub Actionsを使用してHugging Face Spacesにデプロイする設定が含まれています。
4
+ **デプロイは手動で実行でき、CIが成功した場合のみ実行可能です。**
5
+
6
+ ## 事前準備
7
+
8
+ ### 1. Hugging Face APIトークンの取得
9
+ 1. [Hugging Face](https://huggingface.co/)にログインします。
10
+ 2. 右上のプロフィールアイコンをクリックし、「Settings」を選択します。
11
+ 3. 左サイドバーから「Access Tokens」を選択します。
12
+ 4. 「New token」ボタンをクリックします。
13
+ 5. トークン名を入力し、権限を「Write」に設定します。
14
+ 6. 「Generate token」ボタンをクリックします。
15
+ 7. 生成されたトークンをコピーします(このページを離れると二度と表示されないので注意)。
16
+
17
+ ### 2. GitHubリポジトリにシークレットを設定
18
+ 1. GitHubリポジトリのページに移動します。
19
+ 2. 「Settings」タブをクリックします。
20
+ 3. 左サイドバーから「Secrets and variables」→「Actions」を選択します。
21
+ 4. 「New repository secret」ボタンをクリックします。
22
+ 5. 名前に「HF_TOKEN」と入力し、値に先ほどコピーしたHugging Face APIトークンを貼り付けます。
23
+ 6. 「Add secret」ボタンをクリックします。
24
+
25
+ ## デプロイの流れ
26
+
27
+ 1. `main`ブランチにプッシュまたはPRがマージされると、自動的にCIが実行されます。
28
+ 2. CIが成功したことを確認します。
29
+ 3. GitHubリポジトリの「Actions」タブに移動します。
30
+ 4. 左サイドバーから「Deploy to Hugging Face Space」ワークフローを選択します。
31
+ 5. 「Run workflow」ボタンをクリックします。
32
+ - 注意: CIが成功していない場合は、デプロイボタンを押しても失敗します。
33
+ 6. デプロイが完了するまで待ちます(数分かかることがあります)。
34
+ 7. デプロイが完了したら、[https://huggingface.co/spaces/Kyosuke0/yomitalk](https://huggingface.co/spaces/Kyosuke0/yomitalk)にアクセスしてアプリケーションが正常に動作しているか確認します。
35
+
36
+ ## トラブルシューティング
37
+
38
+ ### デプロイに失敗する場合
39
+ 1. GitHub Actionsのログを確認し、エラーメッセージを確認します。
40
+ 2. CIが成功しているか確認します。
41
+ - CIが成功していない場合は、まずCIを実行して成功させてください。
42
+ 3. Hugging Face APIトークンが正しく設定されているか確認します。
43
+ 4. Hugging Face Spacesの容量制限に達していないか確認します。
44
+ 5. Dockerfileに必要なパッケージがすべて含まれているか確認します。
45
+
46
+ ### アプリケーションが正常に動作しない場合
47
+ 1. Hugging Face Spaces上のログを確認します(Spacesページの「Files and versions」タブ→「logs」フォルダ)。
48
+ 2. 必要な環境変数が設定されているか確認します。
49
+ 3. Dockerfileに必要なファイルがすべてコピーされているか確認します。