mirror of
https://github.com/siteboon/claudecodeui.git
synced 2025-12-13 13:49:43 +00:00
Add automatic update functionality to allow users to update the application directly from the UI without manual git commands. Changes: - Add POST /api/system/update endpoint that runs git pull and npm install - Enhance useVersionCheck hook to fetch release information including changelog - Update VersionUpgradeModal to display changelog and handle one-click updates - Add update progress tracking with output display and error handling - Bump version to 1.10.4 The update endpoint executes git checkout main, git pull, and npm install, providing real-time output to the user. After successful update, users are prompted to restart the server.
50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
// hooks/useVersionCheck.js
|
|
import { useState, useEffect } from 'react';
|
|
import { version } from '../../package.json';
|
|
|
|
export const useVersionCheck = (owner, repo) => {
|
|
const [updateAvailable, setUpdateAvailable] = useState(false);
|
|
const [latestVersion, setLatestVersion] = useState(null);
|
|
const [releaseInfo, setReleaseInfo] = useState(null);
|
|
|
|
useEffect(() => {
|
|
const checkVersion = async () => {
|
|
try {
|
|
const response = await fetch(`https://api.github.com/repos/${owner}/${repo}/releases/latest`);
|
|
const data = await response.json();
|
|
|
|
// Handle the case where there might not be any releases
|
|
if (data.tag_name) {
|
|
const latest = data.tag_name.replace(/^v/, '');
|
|
setLatestVersion(latest);
|
|
setUpdateAvailable(version !== latest);
|
|
|
|
// Store release information
|
|
setReleaseInfo({
|
|
title: data.name || data.tag_name,
|
|
body: data.body || '',
|
|
htmlUrl: data.html_url || `https://github.com/${owner}/${repo}/releases/latest`,
|
|
publishedAt: data.published_at
|
|
});
|
|
} else {
|
|
// No releases found, don't show update notification
|
|
setUpdateAvailable(false);
|
|
setLatestVersion(null);
|
|
setReleaseInfo(null);
|
|
}
|
|
} catch (error) {
|
|
console.error('Version check failed:', error);
|
|
// On error, don't show update notification
|
|
setUpdateAvailable(false);
|
|
setLatestVersion(null);
|
|
setReleaseInfo(null);
|
|
}
|
|
};
|
|
|
|
checkVersion();
|
|
const interval = setInterval(checkVersion, 5 * 60 * 1000); // Check every 5 minutes
|
|
return () => clearInterval(interval);
|
|
}, [owner, repo]);
|
|
|
|
return { updateAvailable, latestVersion, currentVersion: version, releaseInfo };
|
|
};
|