test: 整併測試至 app/test 並解決 AI 審查 findings #8
+14
-2
@@ -55,20 +55,32 @@ function assertHttpUrl(name, value) {
|
||||
}
|
||||
}
|
||||
|
||||
// 驗證 repository 為 owner/repo 格式(僅允許字母數字與 . _ -,且拒絕 . 與 .. 路徑穿越段)
|
||||
function assertRepository(name, value) {
|
||||
const parts = value.split('/');
|
||||
const valid = parts.length === 2
|
||||
&& parts.every((part) => /^[A-Za-z0-9._-]+$/.test(part) && part !== '.' && part !== '..');
|
||||
if (!valid) {
|
||||
|
|
||||
throw new Error(`${name} 格式錯誤,必須為 owner/repo`);
|
||||
}
|
||||
|
Ghost marked this conversation as resolved
gitea-actions
commented
嚴重等級:🟡 警告 **嚴重等級**:🟡 警告
**審查員**:Bard
**問題**:函數 `assertRepository` 命名較為通用,但其實際行為僅在驗證 Gitea 的 `owner/repo` 格式。命名未能直接體現其檢查邏輯與該領域規則。
**建議**:建議重新命名為 `assertGiteaRepositoryFormat`,讓開發者一眼就能看出該函數在檢查特定的 Gitea 倉庫格式規範。
|
||||
}
|
||||
|
||||
/**
|
||||
* 從環境變數載入並驗證執行所需的設定。
|
||||
*
|
||||
* GITEA_SERVER_URL 與 GITEA_REPOSITORY 為必填,未設定時會拋出錯誤;GITEA_SERVER_URL
|
||||
* 另需為合法的 http/https URL;GITEA_TOKEN 為非必填,未設定時為 null;IS_BETA 會被正規化為布林值。
|
||||
* 另需為合法的 http/https URL,GITEA_REPOSITORY 另需為 owner/repo 格式;
|
||||
* GITEA_TOKEN 為非必填,未設定時為 null;IS_BETA 會被正規化為布林值。
|
||||
*
|
||||
* @param {Object} [env=process.env] - 環境變數來源物件,預設為 process.env。
|
||||
* @returns {{ serverUrl: string, repository: string, token: (string|null), isBeta: boolean }} 已驗證的設定物件。
|
||||
* @throws {Error} 當 GITEA_SERVER_URL 或 GITEA_REPOSITORY 未設定,或 GITEA_SERVER_URL 非合法 http/https URL 時拋出。
|
||||
* @throws {Error} 當必填項未設定、GITEA_SERVER_URL 非合法 http/https URL,或 GITEA_REPOSITORY 非 owner/repo 格式時拋出。
|
||||
*/
|
||||
function loadConfig(env = process.env) {
|
||||
const serverUrl = requireEnv('GITEA_SERVER_URL', env.GITEA_SERVER_URL);
|
||||
assertHttpUrl('GITEA_SERVER_URL', serverUrl);
|
||||
const repository = requireEnv('GITEA_REPOSITORY', env.GITEA_REPOSITORY);
|
||||
assertRepository('GITEA_REPOSITORY', repository);
|
||||
const token = isUnset(env.GITEA_TOKEN) ? null : env.GITEA_TOKEN;
|
||||
const isBeta = normalizeBetaFlag(env.IS_BETA);
|
||||
|
||||
|
||||
+3
-1
@@ -63,7 +63,9 @@ async function fetchReleases(baseUrl, options = {}) {
|
||||
try {
|
||||
pageJson = JSON.parse(text);
|
||||
} catch {
|
||||
throw new Error(`release API 回傳資料無法解析 (page=${page})`);
|
||||
// 附上截斷的回傳內容片段,便於除錯回傳格式異常
|
||||
const snippet = text.slice(0, 200);
|
||||
throw new Error(`release API 回傳資料無法解析 (page=${page}): ${snippet}`);
|
||||
}
|
||||
|
||||
if (pageJson === null) {
|
||||
|
||||
Reference in New Issue
Block a user
嚴重等級:🔵 建議
審查員:Leo
問題:在
assertGiteaRepositoryFormat函式中,當value.split('/')的長度不為 2 時,拋出的錯誤訊息僅籠統地說「格式錯誤」。若使用者輸入了包含多個斜線或完全沒有斜線的字串,這類訊息對修正環境變數幫助有限。建議:建議區分「格式不符」與「內容不符」的錯誤細節,例如提示「必須為 owner/repo 格式,包含一個斜線」。