ZH Build and Testing - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
從原始碼建置與測試
Home · BASIC · UO API · A–Z · Examples · Languages
開發環境
- Windows x64 與 64-bit PowerShell;
global.json指定的 .NET SDK,或同一 feature band 的相容 patch;- 可用的 NuGet cache,或可供 restore 的網路;
- 若修改
external\YokoTheia,需要 Node.js 與 npm; - 足夠空間分別建置完整版本、without-Basic 版本與 NativeAOT 輸出。
不要任意更換 SDK feature band、Theia 套件版本或 lockfile;任何這類修改都需要重新執行完整測試。
.NET restore 與測試
在 project 根目錄使用:
dotnet --version
dotnet restore .\ClassicUO.sln -p:NuGetAudit=false
dotnet test .\tests\ClassicUO.UnitTests\ClassicUO.UnitTests.csproj -c Release
dotnet test .\external\InjectionScript\src\InjectionScript.Tests\InjectionScript.Tests.csproj -c Release
dotnet test .\external\InjectionScript\src\InjectionScript.Lsp.Tests\InjectionScript.Lsp.Tests.csproj -c Release
完整版本與 project-without-yoko 必須分開 restore、build、test。完整版本成功不代表 without-Basic 已移除所有 Basic UI、payload 或相依性。
Eclipse Theia
只有變更 IDE frontend、Basic language extension 或其依賴時才需要重建:
cd .\external\YokoTheia
npm install
npm run build
建置後需重新測試 Run 選單、快捷鍵、Explorer 多腳本選取、狀態色、Outline、Problems、Output、API Inspector、Manual、Variables、Watch、Call Stack、panel resize/detach,以及關閉再開 IDE 後的 Runtime 狀態同步。
NativeAOT 與遊戲資料
最終 Windows 客戶端以 NativeAOT x64 驗證。自動 build/test 不需要把受保護的 Ultima Online 資料加入 repository;真正的 graphical smoke test 必須在本機使用合法資料目錄進行。
必要驗證矩陣
| 區域 | 預期結果 |
|---|---|
| ClassicUO Full | 全部測試通過 |
| ClassicUO without Basic | 全部測試通過 |
| InjectionScript Runtime | 全部測試通過 |
| LSP / IDE | 全部測試通過 |
| Full NativeAOT | 0 build errors |
| without-Basic build | 0 build errors |
| Runtime/API Manual parity | 所有差異為 0 |
| Native payload probes | 兩種客戶端都 passed |
| 解壓後 ZIP 驗證 | passed |
功能回歸檢查
- AutoLoad 選擇按角色保存並在啟動時載入正確檔案;
- Basic Auto Load 顯示並執行所選 procedures;
- Basic Example 保存到普通巨集設定並可執行;
- IDE 新檔與既有檔案保存到正確位置;
- 不捲動也能初始化整份文件;
- Run、Debug、Pause、Continue、Step、Stop 與 all-script commands;
- 多腳本選取與綠/黃/黑狀態;
- API Manual 內容只來自 Runtime registration;
- 所有 Basic examples 可驗證;
- 全部支援語言可切換且技術語法不被翻譯;
- without-Basic 版本沒有 Basic UI 與執行相依性。
發行壓縮檔
建立 ZIP 後,必須解壓到新的暫存目錄,逐檔比較 staging tree 與 SHA-256,再對兩個可執行 payload 重做 native probes。ZIP 本身的 SHA-256 應另外寫入相鄰 .sha256.txt,但 Wiki 不應硬編碼某次發行的特定值。
自動測試不能代替真實伺服器測試。還要人工檢查 server gump、特定 shard packet extension、遊戲資料相容性、字型、hover、Info Bar、施法指示器與移動。