refactor(calculate-version): 將版本計算邏輯由 bash 改寫為 Node.js 並依功能分檔

保留 entrypoint.sh 作為容器進入點,改為啟動 app/ 下的 Node.js 程式;
依功能拆分為 logger/config/version/releases/output/index,並更新 Dockerfile 改用 node:lts-alpine。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-06-26 10:41:34 +08:00
co-authored by Claude Opus 4.8
parent 4983a72524
commit bd6b6017ab
13 changed files with 734 additions and 264 deletions
+45
View File
@@ -0,0 +1,45 @@
'use strict';
// 主分隔線與次分隔線寬度(沿用原 entrypoint.sh 的視覺樣式)
const LINE = '='.repeat(50);
const SUBLINE = '-'.repeat(50);
/**
* 輸出帶標題的區塊段落至標準輸出,標題前後以分隔線包夾,
* 用於在 log 中建立可視的段落區隔。
*
* 輸出格式為:換行 + 主分隔線(50 個 `=`)+ 標題 + 次分隔線(50 個 `-`)。
*
* @param {string} title - 區塊標題文字;會原樣輸出於兩條分隔線之間。
* @returns {void}
*/
function section(title) {
process.stdout.write(`\n${LINE}\n${title}\n${SUBLINE}\n`);
}
/**
* 輸出一般資訊層級的 log 訊息至標準輸出,自動加上 `[info]` 前綴與換行。
*
* @param {string} message - 要輸出的資訊內容。
* @returns {void}
*/
function info(message) {
process.stdout.write(`[info] ${message}\n`);
}
/**
* 輸出錯誤層級的 log 訊息至標準錯誤輸出(stderr),並以狀態碼 1
* 立即終止整個行程。用於發生無法復原的錯誤時中止執行。
*
* 注意:此函式呼叫 `process.exit(1)`,正常情況下不會回傳給呼叫端,
* 其後的程式碼不會被執行。
*
* @param {string} message - 要輸出的錯誤描述內容。
* @returns {never} 不會正常回傳(行程會被終止)。
*/
function fail(message) {
process.stderr.write(`[error] ${message}\n`);
process.exit(1);
}
module.exports = { section, info, fail };