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) */} +