first-update
This commit is contained in:
86
easy-dataset-main/app/api/check-update/route.js
Normal file
86
easy-dataset-main/app/api/check-update/route.js
Normal file
@@ -0,0 +1,86 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
// Get current version
|
||||
function getCurrentVersion() {
|
||||
try {
|
||||
const packageJsonPath = path.join(process.cwd(), 'package.json');
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
||||
return packageJson.version;
|
||||
} catch (error) {
|
||||
console.error('Failed to read version from package.json:', String(error));
|
||||
return '1.0.0';
|
||||
}
|
||||
}
|
||||
|
||||
// Get latest version from GitHub
|
||||
async function getLatestVersion() {
|
||||
try {
|
||||
const owner = 'ConardLi';
|
||||
const repo = 'easy-dataset';
|
||||
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/releases/latest`);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`GitHub API request failed: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
return data.tag_name.replace('v', '');
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch latest version:', String(error));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for updates
|
||||
export async function GET() {
|
||||
try {
|
||||
const currentVersion = getCurrentVersion();
|
||||
const latestVersion = await getLatestVersion();
|
||||
|
||||
if (!latestVersion) {
|
||||
return NextResponse.json({
|
||||
hasUpdate: false,
|
||||
currentVersion,
|
||||
latestVersion: null,
|
||||
error: 'Failed to fetch latest version'
|
||||
});
|
||||
}
|
||||
|
||||
// Simple semver-like comparison
|
||||
const hasUpdate = compareVersions(latestVersion, currentVersion) > 0;
|
||||
|
||||
return NextResponse.json({
|
||||
hasUpdate,
|
||||
currentVersion,
|
||||
latestVersion,
|
||||
releaseUrl: hasUpdate ? `https://github.com/ConardLi/easy-dataset/releases/tag/v${latestVersion}` : null
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Failed to check for updates:', String(error));
|
||||
return NextResponse.json(
|
||||
{
|
||||
hasUpdate: false,
|
||||
error: 'Failed to check for updates'
|
||||
},
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Simple version comparison
|
||||
function compareVersions(a, b) {
|
||||
const partsA = a.split('.').map(Number);
|
||||
const partsB = b.split('.').map(Number);
|
||||
|
||||
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
||||
const numA = i < partsA.length ? partsA[i] : 0;
|
||||
const numB = i < partsB.length ? partsB[i] : 0;
|
||||
|
||||
if (numA > numB) return 1;
|
||||
if (numA < numB) return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user