69 lines
2.3 KiB
TypeScript
69 lines
2.3 KiB
TypeScript
import { Request, Response } from "express";
|
||
import { app } from "../common";
|
||
import { executeCommand } from "../util";
|
||
import * as fs from 'fs';
|
||
import * as path from 'path';
|
||
import { execSync, spawnSync } from 'child_process';
|
||
import os from 'os';
|
||
|
||
export const OPENMCP_CLIENT = os.homedir() + '/project/openmcp-client';
|
||
|
||
async function publishOpenMCP() {
|
||
|
||
const updateResult = execSync('git pull origin main', { cwd: OPENMCP_CLIENT, env: process.env });
|
||
console.log(updateResult.toString());
|
||
|
||
const rmResult = execSync('rm *.vsix', { cwd: OPENMCP_CLIENT });
|
||
console.log(rmResult.toString());
|
||
|
||
const packageResult = execSync('vsce package', { cwd: OPENMCP_CLIENT });
|
||
console.log(packageResult.toString());
|
||
|
||
// 找到 OPENMCP_CLIENT 下的第一个 vsix 文件,返回绝对路径
|
||
const vsixFile = fs.readdirSync(OPENMCP_CLIENT).find(file => file.endsWith('.vsix'));
|
||
const vsixPath = path.join(OPENMCP_CLIENT, vsixFile);
|
||
|
||
return vsixPath;
|
||
}
|
||
|
||
function getLastChangeLog() {
|
||
const changelog = fs.readFileSync(path.join(OPENMCP_CLIENT, 'CHANGELOG.md'), { encoding: 'utf-8' });
|
||
const newContent = changelog.split('## [main]')[1];
|
||
const version = newContent.split('\n')[0];
|
||
const updateContent = newContent.split('\n').slice(1).join('\n');
|
||
const content = `✴️ openmcp client ${version} 更新内容\n\n` + updateContent.trim() + '\n\n在 vscode/trae/cursor 等编辑器的插件商城搜索【openmcp】就可以下载最新的版本了!';
|
||
return content
|
||
}
|
||
|
||
|
||
app.post('/publish-openmcp-client', async (req: Request, res: Response) => {
|
||
try {
|
||
const filePath = await publishOpenMCP();
|
||
const updateContent = getLastChangeLog();
|
||
res.send({
|
||
code: 200,
|
||
msg: {
|
||
vsix: filePath,
|
||
content: updateContent
|
||
}
|
||
})
|
||
} catch (error) {
|
||
console.log(error);
|
||
res.send(error.toString());
|
||
}
|
||
});
|
||
|
||
|
||
app.post('/publish-vsix', async (req: Request, res: Response) => {
|
||
try {
|
||
const { vsix, tool } = req.body;
|
||
const result = execSync(tool + ' publish -i ' + vsix, { cwd: OPENMCP_CLIENT });
|
||
res.send({
|
||
code: 200,
|
||
msg: result
|
||
});
|
||
} catch (error) {
|
||
console.log(error);
|
||
res.send(error.toString());
|
||
}
|
||
}); |