自动更新

This commit is contained in:
Jerry 2025-04-19 11:14:34 +08:00
parent 666dcc2540
commit 2150e94ad5
4 changed files with 94 additions and 1 deletions

View File

@ -13,6 +13,7 @@
"express": "^4.18.0",
"ioredis": "^5.6.0",
"mkdirp": "^3.0.1",
"simple-git": "^3.27.0",
"ws": "^8.18.1"
},
"devDependencies": {

28
pnpm-lock.yaml generated
View File

@ -26,6 +26,9 @@ importers:
mkdirp:
specifier: ^3.0.1
version: 3.0.1
simple-git:
specifier: ^3.27.0
version: 3.27.0
ws:
specifier: ^8.18.1
version: 8.18.1
@ -71,6 +74,12 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@kwsites/file-exists@1.1.1':
resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
'@kwsites/promise-deferred@1.1.1':
resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@ -619,6 +628,9 @@ packages:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
simple-git@3.27.0:
resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==}
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
@ -756,6 +768,14 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@kwsites/file-exists@1.1.1':
dependencies:
debug: 4.4.0
transitivePeerDependencies:
- supports-color
'@kwsites/promise-deferred@1.1.1': {}
'@tsconfig/node10@1.0.11': {}
'@tsconfig/node12@1.0.11': {}
@ -1329,6 +1349,14 @@ snapshots:
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
simple-git@3.27.0:
dependencies:
'@kwsites/file-exists': 1.1.1
'@kwsites/promise-deferred': 1.1.1
debug: 4.4.0
transitivePeerDependencies:
- supports-color
source-map-support@0.5.21:
dependencies:
buffer-from: 1.1.2

View File

@ -2,13 +2,19 @@ import apps from './app';
import logger from './utils/core/logger';
import config from './utils/core/config';
import redis from './services/redis/redis';
import autoUpdater from './utils/core/autoUpdater';
config.check(['PORT', 'DEBUG', 'RD_PORT', 'RD_ADD', 'WS_SECRET', 'WS_PORT']);
const PORT = config.get('PORT') || 3000;
apps
.createApp()
.then((app) => {
.then(async (app) => {
const isUpdated = await autoUpdater.checkForUpdates();
if (isUpdated) {
logger.warn(`检测到更新,正在自动重启..`);
process.exit(0);
}
app.listen(PORT, () => {
logger.info(`Crystelf-core listening on ${PORT}`);
});

View File

@ -0,0 +1,58 @@
import simpleGit, { SimpleGit } from 'simple-git';
import paths from './path';
import logger from './logger';
class AutoUpdater {
private git: SimpleGit;
private repoPath: string;
constructor() {
this.git = simpleGit();
this.repoPath = paths.get('root');
}
/**
*
*/
public async checkForUpdates(): Promise<boolean> {
try {
logger.info('检查仓库更新中..');
const status = await this.git.status();
if (status.ahead > 0) {
logger.info('检测到当地仓库有未提交的更改,跳过更新..');
return false;
}
logger.info('正在获取远程仓库信息..');
await this.git.fetch();
const localBranch = status.current;
const diffSummary = await this.git.diffSummary([`${localBranch}..origin/${localBranch}`]);
if (diffSummary.files.length > 0) {
logger.info('检测到远程仓库有更新!');
logger.info('正在拉取更新..');
if (localBranch) {
await this.git.pull('origin', localBranch);
} else {
logger.error('当前分支名称未知,无法执行拉取操作..');
return false;
}
logger.info('更新成功!');
return true;
} else {
logger.info('远程仓库没有新变化..');
return false;
}
} catch (error) {
logger.error('检查仓库更新失败: ', error);
return false;
}
}
}
const autoUpdater = new AutoUpdater();
export default autoUpdater;