chore: update ai-review findings [ai-review-bot][success]

This commit is contained in:
AI Review Bot
2026-05-15 17:36:18 +00:00
parent 5f19cc8392
commit a8db9e1289
-63
View File
@@ -1,72 +1,9 @@
[ [
{
"level": "critical",
"role": "Aria",
"location": "entrypoint.sh:183",
"suggestion": "在 `collect_package_candidates` 函數中,變數 `kept_versions` 似乎是個拼寫錯誤,應修正為 `kept_count` 以保持與函數參數及其他變數命名的一致性。這不僅是風格問題,更可能導致邏輯錯誤。",
"is_new": false
},
{
"level": "critical",
"role": "Maya",
"location": "entrypoint.sh:129",
"suggestion": "在 `fetch_package_versions` 函數中,`PAGE_LIMIT` 的驗證邏輯 `if [[ ! \"${limit}\" =~ ^[0-9]+$ ]] || (( limit <= 0 )); then fail \"Invalid PAGE_LIMIT: ${limit}\"; fi` 應增加測試案例。目前測試套件中缺少當 `PAGE_LIMIT` 為非正整數或無效格式時,腳本能正確失敗並輸出錯誤訊息的驗證。",
"is_new": false
},
{
"level": "critical",
"role": "Maya",
"location": "entrypoint.sh:248",
"suggestion": "在 `main` 函數中,當 `resolve_token` 無法解析到 Gitea token 時(例如 `RUNNER_TOKEN` 未設定),腳本應正確失敗。目前的 `test_main_integration` 僅測試了成功解析 token 的情況,應增加測試案例以驗證此失敗路徑,確保在無 token 的情況下腳本能及早終止。",
"is_new": false
},
{
"level": "critical",
"role": "Zara",
"location": "entrypoint.sh:370",
"suggestion": "在 `process_candidates` 函式中,`url_encode` 函式在迴圈內被呼叫,每次呼叫都會啟動一個新的 `jq` 外部程序來進行 URL 編碼。如果需要刪除的套件版本數量很多,這會導致大量的程序啟動和上下文切換開銷,嚴重影響效能。建議在 Bash 中直接實現 URL 編碼邏輯(例如使用 `printf %s \"$value\" | xxd -p | sed 's/\\(..\\)/%\\1/g'` 並處理安全字元),或者考慮 Gitea API 是否支援未編碼的套件名稱/版本,以避免頻繁的外部程序呼叫。",
"is_new": true
},
{
"level": "warning",
"role": "Maya",
"location": "entrypoint.sh:109",
"suggestion": "在 `api_request` 函數中,日誌輸出會根據 API 回應是否包含 `x-gitea-request-id` 或 `x-request-id` 而有所不同。目前的測試案例僅涵蓋了有 `request_id` 的情況,建議增加一個測試案例來驗證當 API 回應沒有提供 `request_id` 時的日誌行為,確保所有日誌路徑都被覆蓋。",
"is_new": false
},
{
"level": "warning",
"role": "Maya",
"location": "entrypoint.sh:267",
"suggestion": "在 `main` 函數中,`trap cleanup EXIT` 用於確保臨時文件 `candidate_file` 在腳本結束時被刪除。雖然 `test_main_integration` 執行了 `main` 函數,但並未明確驗證 `candidate_file` 在 `main` 執行結束後是否確實被移除。建議在測試中增加檢查,以確保資源清理機制正常運作,避免臨時文件洩漏。",
"is_new": false
},
{
"level": "warning",
"role": "Zara",
"location": "entrypoint.sh:246",
"suggestion": "在 `fetch_package_versions` 函式的分頁迴圈中,每次迭代都會呼叫 `jq -s '.[0] + .[1]'` 來合併 JSON 陣列。這意味著每次迭代都會啟動一個新的 `jq` 程序,並讀寫多個臨時檔案。對於包含大量版本的套件(需要多個分頁請求),這種重複的程序啟動和檔案 I/O 會累積成顯著的效能開銷。建議將每個分頁的 JSON 響應追加到一個臨時檔案中(例如,使用 `printf '%s\\n' \"${API_RESPONSE_BODY}\" >> \"${aggregate_file}\"`),然後在迴圈結束後,只執行一次 `jq -s '.'` 來將所有 JSON 物件合併成一個最終的陣列,以減少程序啟動和檔案操作次數。",
"is_new": true
},
{
"level": "warning",
"role": "Maya",
"location": "entrypoint.sh:207-208",
"suggestion": "`process_candidates` 函數在構建刪除請求的 URL 時,使用了 `url_encode` 來處理 `package_name` 和 `version`。雖然 `url_encode` 函數本身有測試,但 `process_candidates` 的測試案例中使用的套件名稱和版本(例如 `pkg-a`, `1.0.0`)不包含需要特殊 URL 編碼的字元。建議新增測試案例,使用包含特殊字元(例如 `/`, `?`, `+`, ` `)的套件名稱或版本,以確保 URL 編碼在實際刪除請求中能正確運作。",
"is_new": true
},
{ {
"level": "info", "level": "info",
"role": "Leo", "role": "Leo",
"location": "tests/entrypoint.sh", "location": "tests/entrypoint.sh",
"suggestion": "測試中的 `jq` 模擬實作與 `entrypoint.sh` 中使用的特定 `jq` 表達式緊密耦合。若 `entrypoint.sh` 中的 `jq` 邏輯發生變化,此模擬也必須同步更新,這可能增加測試維護的成本。建議考慮使用更通用的 `jq` 模擬方式,或在測試中直接使用真實的 `jq` 工具(若測試環境允許且效能可接受),以減少模擬與實際行為不同步的風險。", "suggestion": "測試中的 `jq` 模擬實作與 `entrypoint.sh` 中使用的特定 `jq` 表達式緊密耦合。若 `entrypoint.sh` 中的 `jq` 邏輯發生變化,此模擬也必須同步更新,這可能增加測試維護的成本。建議考慮使用更通用的 `jq` 模擬方式,或在測試中直接使用真實的 `jq` 工具(若測試環境允許且效能可接受),以減少模擬與實際行為不同步的風險。",
"is_new": false "is_new": false
},
{
"level": "info",
"role": "Rex",
"location": "entrypoint.sh",
"suggestion": "雖然 `GITEA_SERVER_URL` 預期是來自受信任的環境變數,但為了增強韌性,可以考慮在腳本中加入對此 URL 格式的明確驗證,以確保其為有效的 HTTP/HTTPS URL,避免因格式錯誤導致的非預期行為。",
"is_new": false
} }
] ]