fix(release-cleanup): 強化輸入驗證、請求逾時與錯誤處理

解決 AI review 的安全性與健壯性問題:
- 驗證 GITEA_SERVER_URL 為合法 http/https URL(降低 SSRF 風險)
- 驗證 GITEA_REPOSITORY 為 owner/repo 形式並拒絕路徑穿越
- 為所有 fetch 請求加上 30 秒逾時(AbortSignal.timeout),避免卡死
- fetchAllPages 解析前檢查 content-type,非 JSON 時拋出明確錯誤
- selectReleasesToDelete 對無效 created_at 防呆,避免 NaN 排序
- index.js 匯出 main 並加上直接執行守衛,錯誤輸出含類型與堆疊

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-06-26 10:55:45 +08:00
co-authored by Claude Opus 4.8
parent 1f27a46f7b
commit 154ab032bf
5 changed files with 96 additions and 12 deletions
+9 -1
View File
@@ -1,7 +1,13 @@
// 讀取並驗證環境變數,組出後續流程所需的設定物件。
// 對應原本 entrypoint.sh 的「參數檢查」區段。
import { isEmptyOrNull, requireValue, requireInteger } from './validate.js'
import {
isEmptyOrNull,
requireValue,
requireInteger,
requireUrl,
requireRepository,
} from './validate.js'
import { section, info, warn } from './logger.js'
/**
@@ -27,9 +33,11 @@ export function loadConfig(env = process.env) {
info(`GITEA_SERVER_URL=${serverUrl}`)
requireValue('GITEA_SERVER_URL', serverUrl)
requireUrl('GITEA_SERVER_URL', serverUrl)
info(`GITEA_REPOSITORY=${repository}`)
requireValue('GITEA_REPOSITORY', repository)
requireRepository('GITEA_REPOSITORY', repository)
info(`KEEP_COUNT=${keepCountRaw}`)
requireValue('KEEP_COUNT', keepCountRaw)