버전 관리 시스템 최적화: Git 태그 동적 감지 로직 및 UI 버전 표시 보완 (v0.4.0)
This commit is contained in:
parent
7dbfeee3f6
commit
c60189383d
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -133,6 +133,11 @@ export function VersionPage() {
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Debug Info (Only for internal check) */}
|
||||
<div className="mb-4 text-[10px] text-slate-300 font-mono">
|
||||
[Debug] NeedsUpdate: {String(needsUpdate)}, Remote: {remoteInfo ? 'Loaded' : 'Loading...'}, Current: {currentVersion}, Latest: {remoteInfo?.latest}
|
||||
</div>
|
||||
|
||||
{/* Update Alert Banner - Based on Frontend Version comparison */}
|
||||
{needsUpdate && !updateResult && (
|
||||
<div className={`mb-8 p-0 border rounded-xl overflow-hidden animate-in fade-in slide-in-from-top-4 duration-500 shadow-lg ${remoteInfo?.latestInfo?.type === 'urgent' ? 'border-red-200 bg-red-50' : 'border-amber-200 bg-amber-50'}`}>
|
||||
@ -237,6 +242,12 @@ export function VersionPage() {
|
||||
</div>
|
||||
|
||||
<div className="space-y-4">
|
||||
<div className="flex justify-between items-center py-2 border-b border-slate-50">
|
||||
<span className="text-slate-500 text-sm flex items-center gap-2"><Info size={14} /> 현재 버전</span>
|
||||
<span className="font-bold text-emerald-600 bg-emerald-50 px-3 py-1 rounded-full text-xs">
|
||||
{loading ? '...' : healthIcon?.version ? `v${healthIcon.version}` : 'N/A'}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex justify-between items-center py-2 border-b border-slate-50">
|
||||
<span className="text-slate-500 text-sm flex items-center gap-2"><Cpu size={14} /> 런타임 환경</span>
|
||||
<span className="font-medium text-slate-700 text-sm">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user