From 63bf20aa21a3f0d71bb964af909a07781c2d0b3f Mon Sep 17 00:00:00 2001 From: MediaCrawler User Date: Wed, 1 Jul 2026 00:06:19 +0800 Subject: [PATCH] Recommend portable release downloads --- .github/workflows/release.yml | 43 ++++------------- docs/NVIDIA_RELEASE.md | 6 +-- docs/PACKAGING.md | 4 +- docs/RELEASE_NOTES_v0.4.17.md | 56 ++++++++-------------- scripts/check_nvidia_release_assets.mjs | 10 +++- scripts/check_release_notes_i18n.mjs | 12 +++-- scripts/package_artifact_smoke.mjs | 2 +- scripts/release_artifact_smoke.mjs | 2 +- scripts/verify_release_artifacts.mjs | 4 +- tests/no-lite-release-contract.test.mjs | 4 +- tests/nvidia-release-contract.test.mjs | 7 ++- tests/release-notes-i18n-contract.test.mjs | 15 +++--- 12 files changed, 70 insertions(+), 95 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0de2d46..117c65f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -563,25 +563,21 @@ jobs: } } Push-Location $releaseDir - & 7z a -t7z -m0=LZMA2 -mx=7 -mmt=on -v1900m "GoAgent-$version-win-x64-nvidia-portable.7z" ".\win-unpacked\*" | Out-Host + & 7z a -t7z -m0=LZMA2 -mx=7 -mmt=on "GoAgent-$version-win-x64-nvidia-portable.7z" ".\win-unpacked\*" | Out-Host Pop-Location Rename-Item -LiteralPath $installer.FullName -NewName "GoAgent-$version-win-x64-nvidia.exe" -Force - $nvidiaPortableParts = Get-ChildItem -Path $releaseDir -Filter "GoAgent-$version-win-x64-nvidia-portable.7z.*" -File | Sort-Object Name + $nvidiaPortable = Get-Item (Join-Path $releaseDir "GoAgent-$version-win-x64-nvidia-portable.7z") $nvidiaInstaller = Get-Item (Join-Path $releaseDir "GoAgent-$version-win-x64-nvidia.exe") - if (-not $nvidiaPortableParts) { throw "Missing NVIDIA portable split 7z parts after recompression." } - $nvidiaPortableTotal = ($nvidiaPortableParts | Measure-Object -Property Length -Sum).Sum + if (-not $nvidiaPortable) { throw "Missing NVIDIA portable 7z archive after recompression." } + $nvidiaPortableTotal = $nvidiaPortable.Length $nvidiaPortableMax = 2560MB if ($nvidiaPortableTotal -gt $nvidiaPortableMax) { - throw "NVIDIA portable split 7z total bytes exceeds size budget: $nvidiaPortableTotal > $nvidiaPortableMax" + throw "NVIDIA portable 7z bytes exceed size budget: $nvidiaPortableTotal > $nvidiaPortableMax" } - Write-Host "NVIDIA portable split 7z parts: $($nvidiaPortableParts.Count)" - Write-Host "NVIDIA portable split 7z total bytes: $nvidiaPortableTotal" + Write-Host "NVIDIA portable 7z bytes: $nvidiaPortableTotal" Write-Host "NVIDIA installer EXE bytes: $($nvidiaInstaller.Length)" - foreach ($part in $nvidiaPortableParts) { - Write-Host "NVIDIA portable part bytes: $($part.Name) $($part.Length)" - if ($part.Length -ge 2147483648) { - throw "NVIDIA portable split archive part exceeds GitHub's 2 GiB asset limit: $($part.Name) $($part.Length)" - } + if ($nvidiaPortable.Length -ge 2147483648) { + throw "NVIDIA portable archive exceeds GitHub's 2 GiB asset limit: $($nvidiaPortable.Name) $($nvidiaPortable.Length)" } - name: Smoke NVIDIA packaged Windows app @@ -593,7 +589,7 @@ jobs: name: GoAgent-Windows-NVIDIA path: | release/**/*nvidia*.exe - release/**/*nvidia*.7z* + release/**/*nvidia*.7z if-no-files-found: error github-release: @@ -615,24 +611,6 @@ jobs: path: artifacts merge-multiple: true - - name: Generate checksums - shell: bash - run: | - shopt -s globstar nullglob - files=( - artifacts/**/GoAgent-*-mac-arm64.dmg - artifacts/**/GoAgent-*-mac-x64.dmg - artifacts/**/GoAgent-*-win-x64-portable.zip - artifacts/**/GoAgent-*-win-x64.exe - artifacts/**/GoAgent-*-win-x64-nvidia-portable.7z* - artifacts/**/GoAgent-*-win-x64-nvidia.exe - ) - if [[ ${#files[@]} -eq 0 ]]; then - echo "No release assets found for checksum generation." >&2 - exit 1 - fi - sha256sum "${files[@]}" | sed 's# .*/# #' > artifacts/SHA256SUMS.txt - - name: Create release uses: softprops/action-gh-release@v2 with: @@ -643,7 +621,6 @@ jobs: artifacts/**/GoAgent-*-mac-x64.dmg artifacts/**/GoAgent-*-win-x64-portable.zip artifacts/**/GoAgent-*-win-x64.exe - artifacts/**/GoAgent-*-win-x64-nvidia-portable.7z* + artifacts/**/GoAgent-*-win-x64-nvidia-portable.7z artifacts/**/GoAgent-*-win-x64-nvidia.exe - artifacts/SHA256SUMS.txt body_path: docs/RELEASE_NOTES_${{ github.ref_name }}.md diff --git a/docs/NVIDIA_RELEASE.md b/docs/NVIDIA_RELEASE.md index 9beb0cc..7e2246f 100644 --- a/docs/NVIDIA_RELEASE.md +++ b/docs/NVIDIA_RELEASE.md @@ -30,12 +30,10 @@ KataGo assets must live in `resources/data/katago` in the packaged app. They mus ```text GoAgent--win-x64-nvidia.exe -GoAgent--win-x64-nvidia-portable.7z.001 -GoAgent--win-x64-nvidia-portable.7z.002 -GoAgent--win-x64-nvidia-portable.7z.003 +GoAgent--win-x64-nvidia-portable.7z ``` -The portable package is split only when needed for GitHub's per-asset upload limits. The workflow uses solid 7z compression and enforces a size budget so the total NVIDIA portable archive remains in the same order of magnitude as the source NVIDIA runtime bundle. +The portable package is published as a single 7z file without `.001` split-volume suffixes. The workflow uses solid 7z compression and enforces a size budget so the NVIDIA portable archive remains in the same order of magnitude as the source NVIDIA runtime bundle while staying below GitHub's per-asset upload limit. The standard Windows package remains: diff --git a/docs/PACKAGING.md b/docs/PACKAGING.md index a376ada..938d80e 100644 --- a/docs/PACKAGING.md +++ b/docs/PACKAGING.md @@ -60,9 +60,7 @@ The job scans the extracted archive, finds `katago.exe`, copies the whole runtim ```text GoAgent--win-x64-nvidia.exe -GoAgent--win-x64-nvidia-portable.7z.001 -GoAgent--win-x64-nvidia-portable.7z.002 -GoAgent--win-x64-nvidia-portable.7z.003 +GoAgent--win-x64-nvidia-portable.7z ``` This keeps the NVIDIA package honest: it is not the standard Windows package with a new filename. diff --git a/docs/RELEASE_NOTES_v0.4.17.md b/docs/RELEASE_NOTES_v0.4.17.md index 929fc94..67da9a1 100644 --- a/docs/RELEASE_NOTES_v0.4.17.md +++ b/docs/RELEASE_NOTES_v0.4.17.md @@ -16,15 +16,13 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon(M 系列) | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 标准版(OpenCL)安装版,普通用户推荐 | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 标准版(OpenCL)免安装版 | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA 专版(CUDA)安装版,NVIDIA 显卡用户推荐 | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA 专版(CUDA)免安装包 | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 标准版(OpenCL)免安装版,普通用户推荐 | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA 专版(CUDA)免安装包,NVIDIA 显卡用户推荐 | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### 本版重点 - 公开发布页只保留完整 Standard 包和 Windows NVIDIA 专版,避免用户误下缺少内置 KataGo 的包。 -- Windows 标准版是 OpenCL 版;Windows NVIDIA 专版是 CUDA 版。 +- Windows 推荐下载只展示免安装包;标准版是 OpenCL 版,NVIDIA 专版是 CUDA 版。 - Release workflow 不再构建或上传较小但不完整的包线。 - 发布前继续启动 Windows Standard 和 Windows NVIDIA 包做 packaged smoke,确认下载包能进入应用并读取 KataGo 资源。 - NVIDIA 免安装包继续保留重复 KataGo 检查、solid 7z 压缩和体积预算。 @@ -37,15 +35,13 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 Standard(OpenCL)安裝版 | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 Standard(OpenCL)免安裝版 | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA(CUDA)專版安裝版 | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA(CUDA)免安裝包 | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 Standard(OpenCL)免安裝版,一般使用者推薦 | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA(CUDA)免安裝包,NVIDIA 顯卡使用者推薦 | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### 本版重點 - 發布頁只保留完整 Standard 包與 Windows NVIDIA 專版,降低使用者選錯下載項的機率。 -- Windows Standard 是 OpenCL 版;Windows NVIDIA 專版是 CUDA 版。 +- Windows 建議下載只顯示免安裝包;Standard 是 OpenCL 版,NVIDIA 專版是 CUDA 版。 - Release workflow 不再產生或上傳較小但不完整的包線。 - Windows Standard 與 Windows NVIDIA 包仍會在上傳前 smoke 啟動並檢查 KataGo 資源。 @@ -57,15 +53,13 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 Standard (OpenCL) installer | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 Standard (OpenCL) portable ZIP | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA (CUDA) installer | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA (CUDA) portable package | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 Standard (OpenCL) portable ZIP, recommended for most users | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA (CUDA) portable package, recommended for NVIDIA GPUs | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### Highlights - Public releases now expose only complete Standard packages and the Windows NVIDIA edition. -- Windows Standard is the OpenCL edition; Windows NVIDIA is the CUDA edition. +- Recommended Windows downloads only show portable packages: Standard is the OpenCL edition and NVIDIA is the CUDA edition. - The release workflow no longer builds or uploads the smaller incomplete package family. - Windows Standard and Windows NVIDIA packaged-app smoke checks still run before upload. - NVIDIA portable packages keep duplicate KataGo checks, solid 7z compression, and the release size budget. @@ -78,15 +72,13 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 Standard(OpenCL)インストーラー | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 Standard(OpenCL)ポータブル ZIP | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA(CUDA)版インストーラー | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA(CUDA)ポータブル | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 Standard(OpenCL)ポータブル ZIP、通常はこちら | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA(CUDA)ポータブル、NVIDIA GPU 向け | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### 主な変更 - 公開リリースでは、完全な Standard パッケージと Windows NVIDIA 版だけを案内します。 -- Windows Standard は OpenCL 版、Windows NVIDIA は CUDA 版です。 +- Windows の推奨ダウンロードはポータブル版のみです。Standard は OpenCL 版、NVIDIA は CUDA 版です。 - 小さいが KataGo 実行環境を同梱しないパッケージ系統はビルドおよびアップロードしません。 - Windows Standard / NVIDIA の packaged smoke はアップロード前に継続します。 @@ -98,15 +90,13 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 Standard (OpenCL) 설치 프로그램 | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 Standard (OpenCL) 포터블 ZIP | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA (CUDA) 설치 프로그램 | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA (CUDA) 포터블 | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 Standard (OpenCL) 포터블 ZIP, 일반 사용자 권장 | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA (CUDA) 포터블, NVIDIA GPU 권장 | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### 이번 버전 - 공개 릴리스에는 완전한 Standard 패키지와 Windows NVIDIA 에디션만 제공합니다. -- Windows Standard는 OpenCL 에디션이고 Windows NVIDIA는 CUDA 에디션입니다. +- Windows 권장 다운로드는 포터블 패키지만 표시합니다. Standard는 OpenCL 에디션이고 NVIDIA는 CUDA 에디션입니다. - 더 작지만 KataGo 실행 환경이 포함되지 않는 패키지 계열은 더 이상 빌드하거나 업로드하지 않습니다. - Windows Standard / NVIDIA smoke 검사는 계속 실행됩니다. @@ -118,15 +108,13 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 Standard (OpenCL) installer | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 Standard (OpenCL) portable ZIP | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA (CUDA) installer | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA (CUDA) portable | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 Standard (OpenCL) portable ZIP, recommended for most users | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA (CUDA) portable, recommended for NVIDIA GPUs | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### จุดสำคัญของรุ่นนี้ - หน้า release แสดงเฉพาะแพ็กเกจ Standard แบบครบถ้วนและ Windows NVIDIA edition -- Windows Standard คือ OpenCL edition ส่วน Windows NVIDIA คือ CUDA edition +- รายการ Windows ที่แนะนำจะแสดงเฉพาะแพ็กเกจ portable: Standard คือ OpenCL edition ส่วน NVIDIA คือ CUDA edition - workflow จะไม่ build หรือ upload ชุดแพ็กเกจขนาดเล็กที่ไม่มี KataGo runtime ในตัว - Windows Standard / NVIDIA packaged smoke ยังคงทำงานก่อนอัปโหลด @@ -138,14 +126,12 @@ This release keeps the broader v0.4 foundation: grounded shape recognition engin | --- | --- | | macOS Apple Silicon | [GoAgent-0.4.17-mac-arm64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-arm64.dmg) | | macOS Intel | [GoAgent-0.4.17-mac-x64.dmg](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-mac-x64.dmg) | -| Windows x64 Standard (OpenCL) installer | [GoAgent-0.4.17-win-x64.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64.exe) | -| Windows x64 Standard (OpenCL) portable ZIP | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | -| Windows x64 NVIDIA (CUDA) installer | [GoAgent-0.4.17-win-x64-nvidia.exe](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia.exe) | -| Windows x64 NVIDIA (CUDA) portable | [GoAgent-0.4.17-win-x64-nvidia-portable.7z.001](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z.001) | +| Windows x64 Standard (OpenCL) portable ZIP, khuyến nghị cho đa số người dùng | [GoAgent-0.4.17-win-x64-portable.zip](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-portable.zip) | +| Windows x64 NVIDIA (CUDA) portable, khuyến nghị cho GPU NVIDIA | [GoAgent-0.4.17-win-x64-nvidia-portable.7z](https://github.com/wimi321/GoAgent/releases/download/v0.4.17/GoAgent-0.4.17-win-x64-nvidia-portable.7z) | ### Điểm mới - Trang release chỉ hiển thị gói Standard đầy đủ và Windows NVIDIA edition. -- Windows Standard là OpenCL edition; Windows NVIDIA là CUDA edition. +- Mục tải xuống Windows khuyến nghị chỉ hiển thị gói portable: Standard là OpenCL edition, NVIDIA là CUDA edition. - Workflow không còn build hoặc upload dòng gói nhỏ không kèm KataGo runtime. - Windows Standard / NVIDIA packaged smoke vẫn chạy trước khi upload. diff --git a/scripts/check_nvidia_release_assets.mjs b/scripts/check_nvidia_release_assets.mjs index 9f34864..e8b62e9 100644 --- a/scripts/check_nvidia_release_assets.mjs +++ b/scripts/check_nvidia_release_assets.mjs @@ -24,7 +24,7 @@ const requiredWorkflowFragments = [ '--preserve-model-name', 'RUNNER_OS', 'select_default_katago_model.mjs', - 'GoAgent-*-win-x64-nvidia-portable.7z*', + 'GoAgent-*-win-x64-nvidia-portable.7z', 'GoAgent-*-win-x64-nvidia.exe', 'GoAgent-*-mac-arm64.dmg', 'GoAgent-*-mac-x64.dmg', @@ -36,7 +36,7 @@ const requiredWorkflowFragments = [ 'NVIDIA package duplicated KataGo assets', '-mx=7', '$nvidiaPortableMax = 2560MB', - 'NVIDIA portable split 7z total bytes exceeds size budget', + 'NVIDIA portable 7z bytes exceed size budget', 'body_path: docs/RELEASE_NOTES_${{ github.ref_name }}.md' ] @@ -79,6 +79,12 @@ if (asarUnpack.some((entry) => /data\/(?:katago|tts)/.test(String(entry)))) { if (workflow.includes('-ms=off')) { failures.push('NVIDIA portable compression must not disable solid compression with -ms=off') } +if (workflow.includes('-v1900m') || workflow.includes('nvidia-portable.7z.*')) { + failures.push('NVIDIA portable archive must be uploaded as a single .7z file without split .001 suffixes') +} +if (workflow.includes('SHA256SUMS.txt')) { + failures.push('release workflow must not upload checksum files in the public download list') +} if (failures.length > 0) { for (const failure of failures) console.error(`[check-nvidia-release-assets] ${failure}`) diff --git a/scripts/check_release_notes_i18n.mjs b/scripts/check_release_notes_i18n.mjs index a849bf0..3e5fe31 100644 --- a/scripts/check_release_notes_i18n.mjs +++ b/scripts/check_release_notes_i18n.mjs @@ -26,15 +26,16 @@ const requiredAssets = [ `GoAgent-${version}-mac-arm64.dmg`, `GoAgent-${version}-mac-x64.dmg`, `GoAgent-${version}-win-x64-portable.zip`, - `GoAgent-${version}-win-x64.exe`, - `GoAgent-${version}-win-x64-nvidia.exe`, - `GoAgent-${version}-win-x64-nvidia-portable.7z.001` + `GoAgent-${version}-win-x64-nvidia-portable.7z` ] const forbiddenAssets = [ `GoAgent-${version}-mac-arm64-lite.dmg`, `GoAgent-${version}-mac-x64-lite.dmg`, `GoAgent-${version}-win-x64-lite.exe`, - `GoAgent-${version}-win-x64-lite-portable.zip` + `GoAgent-${version}-win-x64-lite-portable.zip`, + `GoAgent-${version}-win-x64.exe`, + `GoAgent-${version}-win-x64-nvidia.exe`, + `GoAgent-${version}-win-x64-nvidia-portable.7z.001` ] const requiredTopics = [ 'grounded shape recognition engine', @@ -71,11 +72,12 @@ for (const asset of requiredAssets) { } if (!body.includes('OpenCL')) failures.push('missing OpenCL edition label') if (!body.includes('CUDA')) failures.push('missing CUDA edition label') +if (!body.includes('免安装') || !body.includes('portable')) failures.push('recommended Windows downloads must emphasize portable packages') if (body.includes('| SHA256SUMS.txt |') || body.includes('| Checksums |') || body.includes('| 校验文件 |') || body.includes('| 校驗檔 |')) { failures.push('recommended download tables must not advertise checksum files') } for (const asset of forbiddenAssets) { - if (body.includes(asset)) failures.push(`release notes must not advertise retired Lite asset: ${asset}`) + if (body.includes(asset)) failures.push(`release notes must not advertise this non-recommended asset: ${asset}`) } for (const topic of requiredTopics) { if (!body.toLowerCase().includes(topic.toLowerCase())) failures.push(`missing release topic: ${topic}`) diff --git a/scripts/package_artifact_smoke.mjs b/scripts/package_artifact_smoke.mjs index 30123de..a887dc3 100755 --- a/scripts/package_artifact_smoke.mjs +++ b/scripts/package_artifact_smoke.mjs @@ -26,7 +26,7 @@ function collectFiles(directory) { } const files = collectFiles(scanRoot) -const artifactPatterns = [/\.dmg$/i, /\.zip$/i, /\.7z$/i, /\.7z\.\d+$/i, /\.exe$/i, /\.AppImage$/i, /\.deb$/i, /\.tar\.gz$/i] +const artifactPatterns = [/\.dmg$/i, /\.zip$/i, /\.7z$/i, /\.exe$/i, /\.AppImage$/i, /\.deb$/i, /\.tar\.gz$/i] const currentArtifactPrefix = `GoAgent-${packageVersion}-` const artifacts = files.filter((file) => basename(file).startsWith(currentArtifactPrefix) && artifactPatterns.some((pattern) => pattern.test(file))) const hasMacArm64Dmg = artifacts.some((file) => /mac-arm64\.dmg$/i.test(file)) diff --git a/scripts/release_artifact_smoke.mjs b/scripts/release_artifact_smoke.mjs index 480427e..47ad5bc 100644 --- a/scripts/release_artifact_smoke.mjs +++ b/scripts/release_artifact_smoke.mjs @@ -22,7 +22,7 @@ function classify(file) { if (/mac-arm64\.dmg$/.test(name)) return 'mac-arm64-dmg' if (/mac-x64\.dmg$/.test(name)) return 'mac-x64-dmg' if (/win-x64-nvidia\.exe$/.test(name)) return 'win-nvidia-exe' - if (/win-x64-nvidia-portable\.7z\.001$/.test(name)) return 'win-nvidia-archive' + if (/win-x64-nvidia-portable\.7z$/.test(name)) return 'win-nvidia-archive' if (/win-x64\.exe$/.test(name)) return 'win-standard-exe' if (/win-x64-portable\.zip$/.test(name)) return 'win-standard-zip' return '' diff --git a/scripts/verify_release_artifacts.mjs b/scripts/verify_release_artifacts.mjs index 6b692a3..51b192a 100755 --- a/scripts/verify_release_artifacts.mjs +++ b/scripts/verify_release_artifacts.mjs @@ -34,7 +34,7 @@ function isPackagedArtifact(file) { ) { return false } - return /(\.(dmg|zip|7z|exe|AppImage|deb)|\.tar\.gz|\.7z\.\d+)$/i.test(file) + return /(\.(dmg|zip|7z|exe|AppImage|deb)|\.tar\.gz)$/i.test(file) } const artifacts = files.filter(isPackagedArtifact) @@ -45,7 +45,7 @@ const macX64Dmg = currentArtifacts.filter((file) => /mac-x64\.dmg$/i.test(file)) const winX64Installer = currentArtifacts.filter((file) => /win-x64\.exe$/i.test(file) && !/portable/i.test(file)) const winX64PortableZip = currentArtifacts.filter((file) => /win-x64-portable\.zip$/i.test(file)) const winX64NvidiaInstaller = currentArtifacts.filter((file) => /win-x64-nvidia\.exe$/i.test(file)) -const winX64NvidiaPortableArchive = currentArtifacts.filter((file) => /win-x64-nvidia-portable\.7z\.001$/i.test(file)) +const winX64NvidiaPortableArchive = currentArtifacts.filter((file) => /win-x64-nvidia-portable\.7z$/i.test(file)) const winPortableExe = currentArtifacts.filter((file) => /win-x64-portable\.exe$/i.test(file)) const winArm64 = currentArtifacts.filter((file) => /win-arm64/i.test(file)) const tiny = currentArtifacts.filter((file) => statSync(file).size < minSizeBytes) diff --git a/tests/no-lite-release-contract.test.mjs b/tests/no-lite-release-contract.test.mjs index 1d20bcf..dcf148f 100644 --- a/tests/no-lite-release-contract.test.mjs +++ b/tests/no-lite-release-contract.test.mjs @@ -39,7 +39,9 @@ test('release workflow publishes only full Standard and NVIDIA packages', () => assert.match(workflow, /GoAgent-\*-win-x64\.exe/) assert.match(workflow, /GoAgent-\*-win-x64-portable\.zip/) assert.match(workflow, /GoAgent-\*-win-x64-nvidia\.exe/) - assert.match(workflow, /GoAgent-\*-win-x64-nvidia-portable\.7z\*/) + assert.match(workflow, /GoAgent-\*-win-x64-nvidia-portable\.7z/) + assert.doesNotMatch(workflow, /GoAgent-\*-win-x64-nvidia-portable\.7z\*/) + assert.doesNotMatch(workflow, /\.7z\.001/) }) test('Lite release helper scripts and docs were removed', () => { diff --git a/tests/nvidia-release-contract.test.mjs b/tests/nvidia-release-contract.test.mjs index 757bbcb..8adcef7 100644 --- a/tests/nvidia-release-contract.test.mjs +++ b/tests/nvidia-release-contract.test.mjs @@ -30,14 +30,17 @@ test('release workflow publishes a real Windows NVIDIA edition', () => { assert.match(workflow, /--copy-runtime-dir/) assert.match(workflow, /--preserve-model-name/) assert.match(workflow, /RUNNER_OS.*Windows/) - assert.match(workflow, /GoAgent-\*-win-x64-nvidia-portable\.7z\*/) + assert.match(workflow, /GoAgent-\*-win-x64-nvidia-portable\.7z/) assert.match(workflow, /GoAgent-\*-win-x64-nvidia\.exe/) assert.match(workflow, /resources\/app\.asar\.unpacked\/data\/katago/) assert.match(workflow, /NVIDIA package duplicated KataGo assets/) assert.match(workflow, /-mx=7/) + assert.doesNotMatch(workflow, /-v1900m/) + assert.doesNotMatch(workflow, /nvidia-portable\.7z\.\*/) + assert.doesNotMatch(workflow, /SHA256SUMS\.txt/) assert.doesNotMatch(workflow, /-ms=off/) assert.match(workflow, /\$nvidiaPortableMax = 2560MB/) - assert.match(workflow, /NVIDIA portable split 7z total bytes exceeds size budget/) + assert.match(workflow, /NVIDIA portable 7z bytes exceed size budget/) for (const files of [packageJson.build.files, packageJson.build.win.files]) { assert.ok(files.includes('data/knowledge/**/*')) diff --git a/tests/release-notes-i18n-contract.test.mjs b/tests/release-notes-i18n-contract.test.mjs index 883daaa..bed360d 100644 --- a/tests/release-notes-i18n-contract.test.mjs +++ b/tests/release-notes-i18n-contract.test.mjs @@ -13,14 +13,12 @@ test('release notes include multilingual download guidance', () => { } }) -test('release notes list standard and NVIDIA artifacts', () => { +test('release notes list recommended portable Windows artifacts', () => { for (const asset of [ `GoAgent-${packageJson.version}-mac-arm64.dmg`, `GoAgent-${packageJson.version}-mac-x64.dmg`, `GoAgent-${packageJson.version}-win-x64-portable.zip`, - `GoAgent-${packageJson.version}-win-x64.exe`, - `GoAgent-${packageJson.version}-win-x64-nvidia.exe`, - `GoAgent-${packageJson.version}-win-x64-nvidia-portable.7z.001` + `GoAgent-${packageJson.version}-win-x64-nvidia-portable.7z` ]) { assert.ok(notes.includes(asset), `missing ${asset}`) const url = `https://github.com/wimi321/GoAgent/releases/download/v${packageJson.version}/${asset}` @@ -31,18 +29,23 @@ test('release notes list standard and NVIDIA artifacts', () => { test('release notes label Windows editions as OpenCL and CUDA without checksum clutter', () => { assert.match(notes, /OpenCL/) assert.match(notes, /CUDA/) + assert.match(notes, /免安装/) + assert.match(notes, /portable/) assert.doesNotMatch(notes, /\| SHA256SUMS\.txt \|/) assert.doesNotMatch(notes, /\| Checksums \|/) assert.doesNotMatch(notes, /\| 校验文件 \|/) assert.doesNotMatch(notes, /\| 校驗檔 \|/) }) -test('release notes do not list retired Lite artifacts', () => { +test('release notes do not list retired Lite artifacts or Windows installers', () => { for (const asset of [ `GoAgent-${packageJson.version}-mac-arm64-lite.dmg`, `GoAgent-${packageJson.version}-mac-x64-lite.dmg`, `GoAgent-${packageJson.version}-win-x64-lite.exe`, - `GoAgent-${packageJson.version}-win-x64-lite-portable.zip` + `GoAgent-${packageJson.version}-win-x64-lite-portable.zip`, + `GoAgent-${packageJson.version}-win-x64.exe`, + `GoAgent-${packageJson.version}-win-x64-nvidia.exe`, + `GoAgent-${packageJson.version}-win-x64-nvidia-portable.7z.001` ]) { assert.equal(notes.includes(asset), false, `must not advertise ${asset}`) }