Spaces:
Running
Running
| param( | |
| [string] $SpaceName = "sub2api", | |
| [string] $Owner = "", | |
| [switch] $Private | |
| ) | |
| $ErrorActionPreference = "Stop" | |
| if (-not $env:HF_TOKEN) { | |
| throw "请先设置环境变量 HF_TOKEN。示例:`$env:HF_TOKEN = 'hf_xxx'" | |
| } | |
| $root = Resolve-Path (Join-Path $PSScriptRoot "..") | |
| Set-Location $root | |
| $requiredFiles = @( | |
| "Dockerfile", | |
| "start-space.sh", | |
| "README.md", | |
| "PUBLIC_USAGE.md", | |
| "ADMIN_SETUP.md", | |
| ".env.example", | |
| ".gitattributes", | |
| ".gitignore" | |
| ) | |
| foreach ($file in $requiredFiles) { | |
| if (-not (Test-Path -LiteralPath (Join-Path $root $file))) { | |
| throw "缺少部署文件:$file" | |
| } | |
| } | |
| $headers = @{ | |
| Authorization = "Bearer $env:HF_TOKEN" | |
| } | |
| $whoami = Invoke-RestMethod ` | |
| -Uri "https://huggingface.co/api/whoami-v2" ` | |
| -Headers $headers ` | |
| -Method GET | |
| if (-not $Owner) { | |
| $Owner = $whoami.name | |
| } | |
| $repoId = "$Owner/$SpaceName" | |
| $createBody = @{ | |
| name = $SpaceName | |
| type = "space" | |
| sdk = "docker" | |
| private = [bool] $Private | |
| } | |
| if ($Owner -ne $whoami.name) { | |
| $createBody.organization = $Owner | |
| } | |
| $json = $createBody | ConvertTo-Json -Depth 5 | |
| try { | |
| Invoke-RestMethod ` | |
| -Uri "https://huggingface.co/api/repos/create" ` | |
| -Headers ($headers + @{ "Content-Type" = "application/json" }) ` | |
| -Method POST ` | |
| -Body $json | Out-Null | |
| Write-Host "已创建 Hugging Face Space:$repoId" | |
| } catch { | |
| $statusCode = $null | |
| if ($_.Exception.Response) { | |
| $statusCode = [int] $_.Exception.Response.StatusCode | |
| } | |
| if ($statusCode -eq 409) { | |
| Write-Host "Space 已存在,继续推送文件:$repoId" | |
| } else { | |
| throw | |
| } | |
| } | |
| git add Dockerfile start-space.sh README.md PUBLIC_USAGE.md ADMIN_SETUP.md .env.example .gitattributes .gitignore package.json scripts/check-supabase.mjs scripts/generate-secrets.ps1 scripts/deploy-hf-space.ps1 | |
| $hasCommit = $true | |
| git rev-parse --verify HEAD *> $null | |
| if ($LASTEXITCODE -ne 0) { | |
| $hasCommit = $false | |
| } | |
| $hasStagedChanges = $false | |
| git diff --cached --quiet | |
| if ($LASTEXITCODE -ne 0) { | |
| $hasStagedChanges = $true | |
| } | |
| if ($hasStagedChanges) { | |
| git commit -m "Deploy sub2api HF Space" | |
| } elseif (-not $hasCommit) { | |
| throw "没有可提交的文件,请检查 git 状态。" | |
| } else { | |
| Write-Host "没有新的本地文件需要提交。" | |
| } | |
| $pushUrl = "https://hf_user:$($env:HF_TOKEN)@huggingface.co/spaces/$repoId" | |
| git push $pushUrl HEAD:main | |
| Write-Host "" | |
| Write-Host "部署文件已推送。Space 页面:" | |
| Write-Host "https://huggingface.co/spaces/$repoId" | |
| Write-Host "" | |
| Write-Host "构建完成后的公开访问地址:" | |
| Write-Host "https://$($Owner)-$($SpaceName).hf.space" | |
| Write-Host "" | |
| Write-Host "下一步:到 Space Settings -> Variables and secrets 添加 Supabase 和管理员 Secrets。" | |