feat: 添加版本更新功能

- 新增 .version 文件(JSON 格式:version/release_date/changelog)
- 新增 lib/update.ts 更新逻辑(版本检查、git clone、docker compose)
- 新增 /api/update/check 版本检查 API
- 新增 /api/update/execute 执行更新 API(SSE 流式日志)
- 新增设置页「版本更新」界面(含 changelog 展示)
- Dockerfile 添加 git、docker CLI;compose 挂载 docker socket
- .env.docker 添加 ONEDEV_ACCESS_TOKEN 配置
This commit is contained in:
2026-05-24 22:35:53 +08:00
parent 8b308b6adb
commit f7060b056d
10 changed files with 857 additions and 1 deletions
+46
View File
@@ -0,0 +1,46 @@
import { executeUpdate } from "@/lib/update";
// POST /api/update/execute - 执行容器更新(SSE 流式输出日志)
export async function POST() {
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
// 发送日志的辅助函数
const sendLog = (message: string) => {
const data = JSON.stringify({ log: message });
controller.enqueue(encoder.encode(`data: ${data}\n\n`));
};
try {
const result = await executeUpdate(sendLog);
// 发送最终结果
const finalData = JSON.stringify({
done: true,
success: result.success,
message: result.message,
});
controller.enqueue(encoder.encode(`data: ${finalData}\n\n`));
} catch (error) {
const errMsg =
error instanceof Error ? error.message : "未知错误";
controller.enqueue(
encoder.encode(
`data: ${JSON.stringify({ done: true, success: false, message: errMsg })}\n\n`
)
);
} finally {
controller.close();
}
},
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
Connection: "keep-alive",
},
});
}