// 讀取並驗證環境變數,組出後續流程所需的設定物件。 // 對應原本 entrypoint.sh 的「參數檢查」區段。 import { isEmptyOrNull, requireValue, requireInteger } from './validate.js' import { section, info, warn } from './logger.js' /** * 從環境變數載入設定並完成驗證,作為整個清理流程的設定來源。 * * 讀取 `GITEA_SERVER_URL`、`GITEA_REPOSITORY`、`KEEP_COUNT`、`GITEA_TOKEN`, * 其中前三者為必填(`KEEP_COUNT` 另須為非負整數);`GITEA_TOKEN` 為選填, * 為空時改以匿名方式呼叫 API。驗證過程會將參數印出(token 以 `[redacted]` 遮蔽)。 * * @param {NodeJS.ProcessEnv} env 環境變數來源,預設為 `process.env`,可於測試時注入假值 * @returns {{serverUrl: string, repository: string, token: string|null, keepCount: number, releaseApiUrl: string, tagApiUrl: string}} * 設定物件:`token` 在環境變數為空時為 `null`;`keepCount` 為數值; * `releaseApiUrl`/`tagApiUrl` 為依 server 與 repository 組出的 API 位址。 * @throws {Error} 任一必填項缺漏,或 `KEEP_COUNT` 非非負整數時拋出(由 [[validate]] 的檢查函式丟出) */ export function loadConfig(env = process.env) { section('參數檢查') const serverUrl = env.GITEA_SERVER_URL const repository = env.GITEA_REPOSITORY const keepCountRaw = env.KEEP_COUNT const token = env.GITEA_TOKEN info(`GITEA_SERVER_URL=${serverUrl}`) requireValue('GITEA_SERVER_URL', serverUrl) info(`GITEA_REPOSITORY=${repository}`) requireValue('GITEA_REPOSITORY', repository) info(`KEEP_COUNT=${keepCountRaw}`) requireValue('KEEP_COUNT', keepCountRaw) requireInteger('KEEP_COUNT', keepCountRaw) if (isEmptyOrNull(token)) { warn('GITEA_TOKEN is empty; release API calls will be anonymous') } else { info('GITEA_TOKEN=[redacted]') } return { serverUrl, repository, token: isEmptyOrNull(token) ? null : token, keepCount: Number(keepCountRaw), releaseApiUrl: `${serverUrl}/api/v1/repos/${repository}/releases`, tagApiUrl: `${serverUrl}/api/v1/repos/${repository}/tags`, } }