Files
nuget-push/.gitea/ai-review/exclusions.json
T

111 lines
6.3 KiB
JSON

[
{
"level": "critical",
"role": "Aria",
"location": "Dockerfile",
"suggestion": "檔案末尾應包含一個空行,以符合 POSIX 規範並避免工具處理問題。"
},
{
"level": "warning",
"role": "Zara",
"location": "Dockerfile:10",
"suggestion": "在 `apt-get install` 命令中加入 `--no-install-recommends` 參數是一個很好的優化,它能減少安裝不必要的推薦套件,進而縮小 Docker 映像檔的體積。較小的映像檔能加快建置、推送與拉取的速度,並節省儲存空間。"
},
{
"level": "warning",
"role": "Maya",
"location": "entrypoint.sh:28-34",
"suggestion": "新增了 `require_index` 函數來驗證 `RELEASE_INDEX` 必須是非負整數。這是一個很好的改進,但需要為此新增測試案例,例如傳入非數字字串或負數,確保腳本能正確地捕捉錯誤並退出。"
},
{
"level": "warning",
"role": "Maya",
"location": "entrypoint.sh:83-87",
"suggestion": "新增了檢查解壓縮後是否找到 `.nupkg` 檔案的邏輯。這是一個重要的邊界條件處理,請為此新增測試案例,確保當成品中不包含 `.nupkg` 檔案時,腳本能正確地報錯並退出。"
},
{
"level": "info",
"role": "Zara",
"location": "entrypoint.sh:3",
"suggestion": "使用 `set -Eeuo pipefail` 是一個良好的 Shell 腳本實踐。它能確保腳本在遇到錯誤時立即終止 (`-e`)、未定義變數時報錯 (`-u`),並在管道命令中捕捉錯誤 (`-o pipefail`)。這提升了腳本的健壯性和可靠性,間接避免因錯誤導致的資源浪費。"
},
{
"level": "info",
"role": "Zara",
"location": "entrypoint.sh:40",
"suggestion": "在 `curl` 命令中加入 `-f` (fail fast) 參數,可以在 HTTP 錯誤時立即終止腳本,避免處理無效資料,提高腳本的穩定性。同時,`-L` (follow redirects) 參數確保能正確處理重定向,提升可靠性。"
},
{
"level": "info",
"role": "Zara",
"location": "entrypoint.sh:54",
"suggestion": "在 `unzip` 命令中使用 `-q` (quiet) 參數可以抑制詳細輸出,減少控制台 I/O,使日誌更簡潔。這是一個輕微的效能優化和日誌清理。"
},
{
"level": "info",
"role": "Aria",
"location": "entrypoint.sh",
"suggestion": "腳本內部變數從 `UPPER_SNAKE_CASE` (例如 `RELEASE_HEADER`) 變更為 `snake_case` (例如 `release_header`),這與 shell 腳本的常見慣例更一致,有助於區分環境變數和內部變數。此為風格改善。"
},
{
"level": "info",
"role": "Maya",
"location": "entrypoint.sh",
"suggestion": "此腳本經過重構後,錯誤處理和參數驗證變得更加健壯(例如使用 `set -Eeuo pipefail` 和自定義驗證函數)。為了確保這些改進的穩定性,建議導入一個輕量級的 shell 腳本測試框架(如 `bats` 或 `shunit2`),為所有關鍵函數和端到端流程編寫單元測試和整合測試,以覆蓋各種成功和失敗情境。"
},
{
"level": "critical",
"role": "Rex",
"location": "entrypoint.sh:L71 (舊版)",
"suggestion": "舊版腳本直接使用 `unzip \"$RELEASE_NAME\" -d output` 解壓縮檔案,存在 Zip Slip (路徑遍歷) 漏洞風險。惡意壓縮檔可能包含 `../../etc/passwd` 等路徑,導致任意檔案被覆蓋或寫入。新版腳本新增了 `validate_release_archive` 函數來檢查壓縮檔內容,有效防範此類攻擊,這是非常關鍵的安全改進。"
},
{
"level": "critical",
"role": "Rex",
"location": "entrypoint.sh:L90 (舊版)",
"suggestion": "舊版腳本在推送 NuGet 套件時使用了 `--allow-insecure-connections` 旗標,這意味著 `RUNNER_TOKEN` 可能會透過未加密的 HTTP 連線傳輸,容易被中間人攻擊竊取。新版腳本移除了此旗標,強制使用安全的 HTTPS 連線,這是非常重要的安全強化。應始終優先使用加密連線來傳輸敏感資料。"
},
{
"level": "critical",
"role": "Rex",
"location": "entrypoint.sh:L19-L26 (舊版), L69 (舊版)",
"suggestion": "舊版腳本直接將敏感的 `RUNNER_TOKEN` 變數值輸出到標準輸出,這可能導致令牌洩漏到日誌或執行環境中。新版腳本透過 `require_value` 函數對敏感變數進行遮罩處理,是一個重要的安全改進。建議所有包含敏感資訊(如 API 金鑰、密碼、令牌)的變數在輸出時都應進行遮罩或避免直接輸出。"
},
{
"level": "warning",
"role": "Aria",
"location": "a/entrypoint.sh:3,6,27,30,32,35,40,43,45,48,50,53,55,58,60,63,66,68,71,74",
"suggestion": "腳本中的區塊標題格式不一致且手動維護。建議使用一個專門的函數來生成標準化的區塊標題,以提高一致性與可讀性。"
},
{
"level": "warning",
"role": "Aria",
"location": "a/entrypoint.sh:44,47",
"suggestion": "將變數內容傳遞給 `jq` 時,使用 `printf '%s'` 而非 `echo` 更為安全,因為 `echo` 在不同 shell 中對特殊字元(如反斜線)的處理可能不一致。"
},
{
"level": "warning",
"role": "Aria",
"location": "a/entrypoint.sh:62",
"suggestion": "`dotnet nuget push \"output/*.nupkg\"` 依賴 shell 的萬用字元展開,這在沒有匹配檔案或匹配檔案過多時可能導致錯誤。建議使用 `find` 命令安全地列出所有 `.nupkg` 檔案,並逐一推送,以提高腳本的健壯性。"
},
{
"level": "info",
"role": "Leo",
"location": "entrypoint.sh",
"suggestion": "腳本中包含多處硬編碼的繁體中文錯誤訊息(例如 `錯誤:...`)。若團隊成員或使用者可能來自不同語言背景,考慮將錯誤訊息國際化(例如,透過環境變數或外部設定檔提供不同語言版本),或統一使用英文以提高通用性,有助於長期維護和跨文化協作。"
},
{
"level": "info",
"role": "Aria",
"location": "a/Dockerfile:5",
"suggestion": "在 Dockerfile 或腳本中,建議使用 `apt-get` 而非 `apt` 進行套件管理操作,因為 `apt-get` 在非互動式環境中行為更穩定且可預測。"
},
{
"level": "info",
"role": "Aria",
"location": "a/Dockerfile:9",
"suggestion": "空行不應包含額外的縮排空格,以保持格式一致性。"
}
]