Update version checking process
This commit is contained in:
28
package-lock.json
generated
28
package-lock.json
generated
@@ -69,6 +69,7 @@
|
|||||||
"react-hook-form": "^7.60.0",
|
"react-hook-form": "^7.60.0",
|
||||||
"react-i18next": "^15.7.3",
|
"react-i18next": "^15.7.3",
|
||||||
"react-resizable-panels": "^3.0.3",
|
"react-resizable-panels": "^3.0.3",
|
||||||
|
"react-simple-keyboard": "^3.8.120",
|
||||||
"react-xtermjs": "^1.0.10",
|
"react-xtermjs": "^1.0.10",
|
||||||
"sonner": "^2.0.7",
|
"sonner": "^2.0.7",
|
||||||
"speakeasy": "^2.0.0",
|
"speakeasy": "^2.0.0",
|
||||||
@@ -96,7 +97,6 @@
|
|||||||
"eslint-plugin-react-hooks": "^5.2.0",
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.20",
|
"eslint-plugin-react-refresh": "^0.4.20",
|
||||||
"globals": "^16.3.0",
|
"globals": "^16.3.0",
|
||||||
"prettier": "^3.6.2",
|
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
"tw-animate-css": "^1.3.5",
|
"tw-animate-css": "^1.3.5",
|
||||||
"typescript": "~5.9.2",
|
"typescript": "~5.9.2",
|
||||||
@@ -7559,22 +7559,6 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prettier": {
|
|
||||||
"version": "3.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
|
|
||||||
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"prettier": "bin/prettier.cjs"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/proxy-addr": {
|
"node_modules/proxy-addr": {
|
||||||
"version": "2.0.7",
|
"version": "2.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||||
@@ -7835,6 +7819,16 @@
|
|||||||
"react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
|
"react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-simple-keyboard": {
|
||||||
|
"version": "3.8.120",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-simple-keyboard/-/react-simple-keyboard-3.8.120.tgz",
|
||||||
|
"integrity": "sha512-VREEGZWXUeqRKvRVg0n8hmoAqz/TSWZEs5UwbfLuan4yKvOQZUFHtS11QGnvIVYjkThh+JYslO2CHT4Lxf5d0w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||||
|
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-style-singleton": {
|
"node_modules/react-style-singleton": {
|
||||||
"version": "2.2.3",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
"react-hook-form": "^7.60.0",
|
"react-hook-form": "^7.60.0",
|
||||||
"react-i18next": "^15.7.3",
|
"react-i18next": "^15.7.3",
|
||||||
"react-resizable-panels": "^3.0.3",
|
"react-resizable-panels": "^3.0.3",
|
||||||
|
"react-simple-keyboard": "^3.8.120",
|
||||||
"react-xtermjs": "^1.0.10",
|
"react-xtermjs": "^1.0.10",
|
||||||
"sonner": "^2.0.7",
|
"sonner": "^2.0.7",
|
||||||
"speakeasy": "^2.0.0",
|
"speakeasy": "^2.0.0",
|
||||||
|
|||||||
@@ -148,22 +148,16 @@ app.get('/health', (req, res) => {
|
|||||||
app.get('/version', async (req, res) => {
|
app.get('/version', async (req, res) => {
|
||||||
let localVersion = process.env.VERSION;
|
let localVersion = process.env.VERSION;
|
||||||
|
|
||||||
// Fallback to package.json version if env variable not set
|
|
||||||
if (!localVersion) {
|
if (!localVersion) {
|
||||||
try {
|
try {
|
||||||
const packagePath = path.resolve(process.cwd(), 'package.json');
|
const packagePath = path.resolve(process.cwd(), 'package.json');
|
||||||
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
||||||
localVersion = packageJson.version;
|
localVersion = packageJson.version;
|
||||||
logger.info(`Using version from package.json: ${localVersion}`);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Failed to read version from package.json:', error);
|
logger.error('Failed to read version from package.json:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug logging
|
|
||||||
logger.debug(`Final version: ${localVersion}`);
|
|
||||||
logger.debug(`Working directory: ${process.cwd()}`);
|
|
||||||
|
|
||||||
if (!localVersion) {
|
if (!localVersion) {
|
||||||
logger.error('No version information available');
|
logger.error('No version information available');
|
||||||
return res.status(404).send('Local Version Not Set');
|
return res.status(404).send('Local Version Not Set');
|
||||||
@@ -186,6 +180,7 @@ app.get('/version', async (req, res) => {
|
|||||||
|
|
||||||
const response = {
|
const response = {
|
||||||
status: localVersion === remoteVersion ? 'up_to_date' : 'requires_update',
|
status: localVersion === remoteVersion ? 'up_to_date' : 'requires_update',
|
||||||
|
localVersion: localVersion,
|
||||||
version: remoteVersion,
|
version: remoteVersion,
|
||||||
latest_release: {
|
latest_release: {
|
||||||
tag_name: releaseData.data.tag_name,
|
tag_name: releaseData.data.tag_name,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {Tabs, TabsContent, TabsList, TabsTrigger} from "@/components/ui/tabs.tsx
|
|||||||
import {User, Shield, Key, AlertCircle} from "lucide-react";
|
import {User, Shield, Key, AlertCircle} from "lucide-react";
|
||||||
import {TOTPSetup} from "@/ui/Desktop/User/TOTPSetup.tsx";
|
import {TOTPSetup} from "@/ui/Desktop/User/TOTPSetup.tsx";
|
||||||
import {getUserInfo} from "@/ui/main-axios.ts";
|
import {getUserInfo} from "@/ui/main-axios.ts";
|
||||||
import { getVersionInfo } from "@/ui/main-axios.ts";
|
import {getVersionInfo} from "@/ui/main-axios.ts";
|
||||||
import {toast} from "sonner";
|
import {toast} from "sonner";
|
||||||
import {PasswordReset} from "@/ui/Desktop/User/PasswordReset.tsx";
|
import {PasswordReset} from "@/ui/Desktop/User/PasswordReset.tsx";
|
||||||
import {useTranslation} from "react-i18next";
|
import {useTranslation} from "react-i18next";
|
||||||
@@ -38,12 +38,12 @@ export function UserProfile({isTopbarOpen = true}: UserProfileProps) {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const fetchVersion = async () => {
|
const fetchVersion = async () => {
|
||||||
try {
|
try {
|
||||||
const info = await getVersionInfo();
|
const info = await getVersionInfo();
|
||||||
setVersionInfo({ version: info.version });
|
setVersionInfo({version: info.localVersion});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Failed to load version info", err);
|
console.error("Failed to load version info", err);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const fetchUserInfo = async () => {
|
const fetchUserInfo = async () => {
|
||||||
@@ -160,11 +160,11 @@ export function UserProfile({isTopbarOpen = true}: UserProfileProps) {
|
|||||||
)}
|
)}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Label>{t('common.version')}</Label>
|
<Label>{t('common.version')}</Label>
|
||||||
<p className="text-lg font-medium mt-1">
|
<p className="text-lg font-medium mt-1">
|
||||||
{versionInfo?.version || t('common.loading')}
|
{versionInfo?.version || t('common.loading')}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -175,7 +175,7 @@ export function UserProfile({isTopbarOpen = true}: UserProfileProps) {
|
|||||||
<Label>{t('common.language')}</Label>
|
<Label>{t('common.language')}</Label>
|
||||||
<p className="text-sm text-muted-foreground mt-1">{t('profile.selectPreferredLanguage')}</p>
|
<p className="text-sm text-muted-foreground mt-1">{t('profile.selectPreferredLanguage')}</p>
|
||||||
</div>
|
</div>
|
||||||
<LanguageSwitcher />
|
<LanguageSwitcher/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|||||||
Reference in New Issue
Block a user