From c60189383d57e8e007ed8ebd30558428fd37c8cb Mon Sep 17 00:00:00 2001 From: choibk Date: Sun, 25 Jan 2026 01:03:40 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EC=B5=9C=EC=A0=81=ED=99=94:=20Gi?= =?UTF-8?q?t=20=ED=83=9C=EA=B7=B8=20=EB=8F=99=EC=A0=81=20=EA=B0=90?= =?UTF-8?q?=EC=A7=80=20=EB=A1=9C=EC=A7=81=20=EB=B0=8F=20UI=20=EB=B2=84?= =?UTF-8?q?=EC=A0=84=20=ED=91=9C=EC=8B=9C=20=EB=B3=B4=EC=99=84=20(v0.4.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/index.js | 25 +++++++++++++++---------- server/routes/system.js | 27 +++++++++++++++++++-------- src/platform/pages/VersionPage.tsx | 11 +++++++++++ 3 files changed, 45 insertions(+), 18 deletions(-) diff --git a/server/index.js b/server/index.js index 10f9050..7c66b80 100644 --- a/server/index.js +++ b/server/index.js @@ -358,17 +358,22 @@ const initTables = async () => { }; initTables(); -const packageJson = require('./package.json'); - +// Dynamic Version Helper (Git Primary, Package.json Secondary) +const { execSync } = require('child_process'); app.get('/api/health', (req, res) => { - res.json({ - status: 'ok', - version: packageJson.version, - node_version: process.version, - platform: process.platform, - arch: process.arch, - timestamp: new Date().toISOString().replace('T', ' ').split('.')[0] - }); + try { + const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json'), 'utf8')); + res.json({ + status: 'ok', + version: pkg.version.replace(/^v/, ''), + node_version: process.version, + platform: process.platform, + arch: process.arch, + timestamp: new Date().toISOString().replace('T', ' ').split('.')[0] + }); + } catch (e) { + res.json({ status: 'ok', version: 'unknown' }); + } }); // Routes diff --git a/server/routes/system.js b/server/routes/system.js index 55809e7..13e371c 100644 --- a/server/routes/system.js +++ b/server/routes/system.js @@ -465,9 +465,18 @@ const getGiteaAuth = async () => { // 5. Get Version Info (Current, Remote & History from Tags) router.get('/version/remote', isAuthenticated, hasRole('admin'), async (req, res) => { try { - const packageJsonPath = path.join(__dirname, '../package.json'); - const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); - const currentVersion = packageJson.version.replace(/^v/, ''); + // Current version MUST be read from package.json to detect updates + // If we use git describe, it would change as soon as we fetch tags + const getVerFromPkg = () => { + try { + const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'), 'utf8')); + return pkg.version.replace(/^v/, ''); + } catch (e) { + return '0.0.0'; + } + }; + + const currentVersion = getVerFromPkg(); // Prepare git fetch command with auth if available const auth = await getGiteaAuth(); @@ -545,11 +554,9 @@ router.get('/version/remote', isAuthenticated, hasRole('admin'), async (req, res const history = allTags.filter(t => compare(t.version, currentVersion) <= 0); const latestFromRemote = allTags[0] || null; - const compResult = latestFromRemote ? compare(latestFromRemote.version, currentVersion) : 0; - const needsUpdate = compResult > 0; + const needsUpdate = latestFromRemote ? (compare(latestFromRemote.version, currentVersion) > 0) : false; - console.log(`[VersionCheck] Path: ${packageJsonPath}`); - console.log(`[VersionCheck] Current: "${currentVersion}", Latest: "${latestFromRemote?.version}", Comp: ${compResult}, NeedsUpdate: ${needsUpdate}`); + console.log(`[VersionCheck] Current: ${currentVersion}, Latest: ${latestFromRemote?.version}, NeedsUpdate: ${needsUpdate}`); res.json({ current: currentVersion, @@ -557,7 +564,11 @@ router.get('/version/remote', isAuthenticated, hasRole('admin'), async (req, res needsUpdate: needsUpdate, latestInfo: needsUpdate ? latestFromRemote : null, history: history, - debug: { path: packageJsonPath, compResult } + debug: { + env: process.env.NODE_ENV, + cwd: process.cwd(), + platform: process.platform + } }); }); }); diff --git a/src/platform/pages/VersionPage.tsx b/src/platform/pages/VersionPage.tsx index 41868f6..ecdc8d6 100644 --- a/src/platform/pages/VersionPage.tsx +++ b/src/platform/pages/VersionPage.tsx @@ -133,6 +133,11 @@ export function VersionPage() { + {/* Debug Info (Only for internal check) */} +
+ [Debug] NeedsUpdate: {String(needsUpdate)}, Remote: {remoteInfo ? 'Loaded' : 'Loading...'}, Current: {currentVersion}, Latest: {remoteInfo?.latest} +
+ {/* Update Alert Banner - Based on Frontend Version comparison */} {needsUpdate && !updateResult && (
@@ -237,6 +242,12 @@ export function VersionPage() {
+
+ 현재 버전 + + {loading ? '...' : healthIcon?.version ? `v${healthIcon.version}` : 'N/A'} + +
런타임 환경