refactor(release-cleanup): 將清理邏輯由 bash 改寫為 Node.js #6

Closed
jiantw83 wants to merge 60 commits from refactor/nodejs-rewrite-20260626-103443 into develop
2 changed files with 8 additions and 4 deletions
Showing only changes of commit 353a6af7c3 - Show all commits
+4 -1
View File
@@ -26,7 +26,10 @@ import { section, info, warn } from './logger.js'
export function loadConfig(env = process.env) {
section('參數檢查')
const serverUrl = env.GITEA_SERVER_URL
// 去除結尾多餘的 /,避免後續拼接出 `https://host//api/v1/...` 這類錯誤路徑。
const rawServerUrl = env.GITEA_SERVER_URL
const serverUrl =
typeof rawServerUrl === 'string' ? rawServerUrl.replace(/\/+$/, '') : rawServerUrl
const repository = env.GITEA_REPOSITORY
const keepCountRaw = env.KEEP_COUNT
const token = env.GITEA_TOKEN
+4 -3
View File
3
@@ -60,12 +60,13 @@ export async function cleanupReleases(client, config) {
for (const release of toDelete) {
const { id, tag_name: tag, name } = release
if (isEmptyOrNull(id)) {
warn(`略過沒有 id 的成品: ${tag} (${name})`)
// 要求 id 為正整數(Gitea release id 本即正整數);非整數一律略過,不僅依賴 URL 編碼防護。
if (isEmptyOrNull(id) || !Number.isInteger(Number(id)) || Number(id) <= 0) {
warn(`略過沒有有效 id 的成品: ${tag} (${name})`)
continue
}
// id 做編碼,避免非預期內容被拼接進 URL(防路徑穿越);正常數值 id 編碼後不變
// id 已驗證為正整數;仍對其編碼作為縱深防禦
const url = `${config.releaseApiUrl}/${encodeURIComponent(id)}`
info(`DELETE ${tag} (${name})`)