修正:changelog 產生器保留既有紀錄,避免部署後更新紀錄被清空
根本原因:Docker build 內沒有 .git,generate-changelog 讀不到 git log 時會把 changelog.json 覆蓋成空清單,導致正式站的更新紀錄分頁變成空白。 影響:正式版更新紀錄分頁的資料完整性;package.json 的 npm start 行為與縮排格式。 修法: - git 取不到資料(或 0 筆)且既有 changelog.json 非空時,直接沿用不覆蓋 - package.json 的 start 改為 npm run dev,縮排統一為 tab Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+40
-40
@@ -1,41 +1,41 @@
|
|||||||
{
|
{
|
||||||
"name": "badminton-scoreboard",
|
"name": "badminton-scoreboard",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"gen:changelog": "node scripts/generate-changelog.mjs",
|
"gen:changelog": "node scripts/generate-changelog.mjs",
|
||||||
"predev": "node scripts/generate-changelog.mjs",
|
"predev": "node scripts/generate-changelog.mjs",
|
||||||
"dev": "concurrently \"npm:dev:server\" \"npm:dev:client\"",
|
"dev": "concurrently \"npm:dev:server\" \"npm:dev:client\"",
|
||||||
"dev:client": "vite",
|
"dev:client": "vite",
|
||||||
"dev:server": "node server/server.mjs",
|
"dev:server": "node server/server.mjs",
|
||||||
"prebuild": "node scripts/generate-changelog.mjs",
|
"prebuild": "node scripts/generate-changelog.mjs",
|
||||||
"build": "tsc -b && vite build",
|
"build": "tsc -b && vite build",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"start": "node server/server.mjs"
|
"start": "npm run dev"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"concurrently": "^9.2.1",
|
"concurrently": "^9.2.1",
|
||||||
"dotenv": "^17.4.2",
|
"dotenv": "^17.4.2",
|
||||||
"express": "^5.2.1",
|
"express": "^5.2.1",
|
||||||
"mysql2": "^3.22.0",
|
"mysql2": "^3.22.0",
|
||||||
"react": "^19.2.4",
|
"react": "^19.2.4",
|
||||||
"react-dom": "^19.2.4",
|
"react-dom": "^19.2.4",
|
||||||
"react-router-dom": "^7.14.1"
|
"react-router-dom": "^7.14.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.39.4",
|
"@eslint/js": "^9.39.4",
|
||||||
"@types/node": "^24.12.2",
|
"@types/node": "^24.12.2",
|
||||||
"@types/react": "^19.2.14",
|
"@types/react": "^19.2.14",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@vitejs/plugin-react": "^6.0.1",
|
"@vitejs/plugin-react": "^6.0.1",
|
||||||
"eslint": "^9.39.4",
|
"eslint": "^9.39.4",
|
||||||
"eslint-plugin-react-hooks": "^7.0.1",
|
"eslint-plugin-react-hooks": "^7.0.1",
|
||||||
"eslint-plugin-react-refresh": "^0.5.2",
|
"eslint-plugin-react-refresh": "^0.5.2",
|
||||||
"globals": "^17.4.0",
|
"globals": "^17.4.0",
|
||||||
"typescript": "~6.0.2",
|
"typescript": "~6.0.2",
|
||||||
"typescript-eslint": "^8.58.0",
|
"typescript-eslint": "^8.58.0",
|
||||||
"vite": "^8.0.4"
|
"vite": "^8.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// 從 git log 產生更新紀錄資料,輸出到 src/data/changelog.json
|
// 從 git log 產生更新紀錄資料,輸出到 src/data/changelog.json
|
||||||
// 正式版(build 後)沒有 git 也能直接讀 JSON 顯示;dev 與 build 前會自動重新產生。
|
// 正式版(build 後)沒有 git 也能直接讀 JSON 顯示;dev 與 build 前會自動重新產生。
|
||||||
import { execFileSync } from 'node:child_process'
|
import { execFileSync } from 'node:child_process'
|
||||||
import { mkdirSync, writeFileSync } from 'node:fs'
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'
|
||||||
import { dirname, resolve } from 'node:path'
|
import { dirname, resolve } from 'node:path'
|
||||||
import { fileURLToPath } from 'node:url'
|
import { fileURLToPath } from 'node:url'
|
||||||
|
|
||||||
@@ -35,13 +35,33 @@ function readGitLog() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 讀取既有的 changelog.json(Docker build 內由 COPY . . 帶進來),取不到時回傳 null。
|
||||||
|
function readExisting() {
|
||||||
|
try {
|
||||||
|
const data = JSON.parse(readFileSync(outFile, 'utf8'))
|
||||||
|
return Array.isArray(data.entries) ? data.entries : null
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function main() {
|
function main() {
|
||||||
let entries = []
|
let entries = []
|
||||||
|
|
||||||
try {
|
try {
|
||||||
entries = readGitLog()
|
entries = readGitLog()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn('[generate-changelog] 讀取 git log 失敗,輸出空清單:', error.message)
|
console.warn('[generate-changelog] 讀取 git log 失敗:', error.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
// git 取不到(或拿到 0 筆,常見於 Docker build 內沒有 .git)時,
|
||||||
|
// 若已有非空的 changelog.json 就沿用,避免把好資料覆蓋成空清單。
|
||||||
|
if (entries.length === 0) {
|
||||||
|
const existing = readExisting()
|
||||||
|
if (existing && existing.length > 0) {
|
||||||
|
console.log(`[generate-changelog] git 無資料,保留既有 ${existing.length} 筆更新紀錄不覆蓋`)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
|
|||||||
Reference in New Issue
Block a user