diff --git a/.github/test.ps1 b/.github/test.ps1 new file mode 100644 index 00000000..e2c7a7c3 --- /dev/null +++ b/.github/test.ps1 @@ -0,0 +1,98 @@ +$ErrorActionPreference = "Stop" + +Write-Host "Current location: $(Get-Location)" + +$cuda = $env:TORCH_CUDA +if (-not $cuda) { + Write-Error "Missing TORCH_CUDA env (cu124 or cu128)" + exit 1 +} + +$date = $env:DATE_SUFFIX +if ([string]::IsNullOrWhiteSpace($date)) { + $date = Get-Date -Format "MMdd" +} + +$pkgName = "GPT-SoVITS-$date" +$tmpDir = "tmp" +$srcDir = $PWD + +$suffix = $env:PKG_SUFFIX +if (-not [string]::IsNullOrWhiteSpace($suffix)) { + $pkgName = "$pkgName$suffix" +} + +$pkgName = "$pkgName-$cuda" + +Write-Host "[INFO] Cleaning .git..." +Remove-Item "$srcDir\.git" -Recurse -Force -ErrorAction SilentlyContinue + +Write-Host "[INFO] Creating tmp dir..." +New-Item -ItemType Directory -Force -Path $tmpDir + +Write-Host "[INFO] System Python version:" +python --version +python -m site + +Write-Host "[INFO] Preparing final directory $pkgName ..." +$items = @(Get-ChildItem -Filter "*.sh") + + @(Get-ChildItem -Filter "*.ipynb") + + @("$tmpDir", ".github", "Docker", "docs", ".gitignore", ".dockerignore", "README.md") +Remove-Item $items -Force -Recurse -ErrorAction SilentlyContinue + +$curr = Get-Location +Set-Location ../ +Get-ChildItem . +Copy-Item -Path $curr -Destination $pkgName -Recurse + +$7zPath = "$pkgName.7z" +$start = Get-Date +Write-Host "Compress Starting at $start" +& "C:\Program Files\7-Zip\7z.exe" a -t7z "$7zPath" "$pkgName" -m0=lzma2 -mx=5 -md=256m -ms=on -mmt=on -bsp1 +$end = Get-Date +Write-Host "Elapsed time: $($end - $start)" + +$config = @" +;!@Install@!UTF-8! +Title="GPT-SoVITS Installation" +BeginPrompt="本软件以MIT协议开源, 作者不对软件具备任何控制力, 使用软件者、传播软件导出的声音者自负全责 / This software is open-sourced under the MIT license. The author has no control over it. Users and distributors of the generated voices are solely responsible." +ExtractPath="." +;!@InstallEnd@! +"@ +Set-Content -Path "config.txt" -Value $config -Encoding UTF8 + +# $SfxModule = "C:\Program Files\7-Zip\7z.sfx" +$SfxModule = "C:\Program Files\7-Zip\7zSD.sfx" +$SfxExePath = "$pkgName.exe" +Write-Host "[INFO] Creating self-extracting archive: $SfxExePath" +# $cmd = 'copy /b "{0}"+"config.txt"+"{1}" "{2}"' -f $SfxModule, $7zPath, $SfxExePath +# Write-Host "[INFO] Running CMD: $cmd" +# cmd /c $cmd + +$cmd = 'copy /b "{0}" + "{1}" "{2}"' -f $SfxModule, $7zPath, $SfxExePath +Write-Host "[INFO] Running CMD: $cmd" +cmd /c $cmd + +python -m pip install --upgrade pip +python -m pip install "modelscope" "huggingface_hub[hf_transfer]" --no-warn-script-location + +Write-Host "[INFO] Uploading to ModelScope..." +$msUser = $env:MODELSCOPE_USERNAME +$msToken = $env:MODELSCOPE_TOKEN +if (-not $msUser -or -not $msToken) { + Write-Error "Missing MODELSCOPE_USERNAME or MODELSCOPE_TOKEN" + exit 1 +} +modelscope upload "$msUser/GPT-SoVITS-Packages" "$SfxExePath" "$SfxExePath" --repo-type model --token $msToken +Write-Host "[SUCCESS] Uploaded: $SfxExePath to ModelScope" + +Write-Host "[INFO] Uploading to HuggingFace..." +$hfUser = $env:HUGGINGFACE_USERNAME +$hfToken = $env:HUGGINGFACE_TOKEN +if (-not $hfUser -or -not $hfToken) { + Write-Error "Missing HUGGINGFACE_USERNAME or HUGGINGFACE_TOKEN" + exit 1 +} +$env:HF_HUB_ENABLE_HF_TRANSFER = "1" +huggingface-cli upload "$hfUser/GPT-SoVITS-Packages" "$SfxExePath" "$SfxExePath" --repo-type model --token $hfToken +Write-Host "[SUCCESS] Uploaded: $SfxExePath to HuggingFace" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..3025f93f --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,38 @@ +name: Build and Upload Windows Package + +on: + workflow_dispatch: + inputs: + date: + description: "Date suffix (optional)" + required: false + default: "" + suffix: + description: "Package name suffix (optional)" + required: false + default: "" + +jobs: + build: + runs-on: windows-latest + strategy: + matrix: + torch_cuda: [cu124, cu128] + env: + TORCH_CUDA: ${{ matrix.torch_cuda }} + MODELSCOPE_USERNAME: ${{ secrets.MODELSCOPE_USERNAME }} + MODELSCOPE_TOKEN: ${{ secrets.MODELSCOPE_TOKEN }} + HUGGINGFACE_USERNAME: ${{ secrets.HUGGINGFACE_USERNAME }} + HUGGINGFACE_TOKEN: ${{ secrets.HUGGINGFACE_TOKEN }} + DATE_SUFFIX: ${{ github.event.inputs.date }} + PKG_SUFFIX: ${{ github.event.inputs.suffix }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Run Build and Upload Script + shell: pwsh + run: | + Move-Item .github/build_windows_packages.ps1 ../build_windows_packages.ps1 + ../test.ps1 \ No newline at end of file