feat: cut over rust web main shell

This commit is contained in:
lix-2026
2026-04-29 12:24:44 +08:00
parent 7965c6c107
commit 048fe28a4d
97 changed files with 9396 additions and 1263 deletions
+69 -1
View File
@@ -2,7 +2,12 @@ const assert = require("node:assert");
const { spawn } = require("node:child_process");
const net = require("node:net");
const { test } = require("node:test");
const { resolveBackendExecutable, ensurePortFree, isPortFree } = require("./desktop-hot.js");
const {
resolveBackendExecutable,
ensurePortFree,
isPortFree,
resolveRuntimePlan,
} = require("./desktop-hot.js");
function findFreePort() {
return new Promise((resolve, reject) => {
@@ -108,3 +113,66 @@ test("ensurePortFree 在非 Windows 平台能释放后端监听进程", async (t
assert.equal(await isPortFree("127.0.0.1", port), true);
await waitForExit(child);
});
test("默认热启动计划使用 mnote-web 作为 3000 ownerNext 仅作为 legacy upstream", () => {
const plan = resolveRuntimePlan({
FRONTEND_PORT: "3000",
NEXT_LEGACY_PORT: "3100",
});
assert.equal(plan.skipGateway, false);
assert.equal(plan.publicPort, 3000);
assert.equal(plan.legacyPort, 3100);
assert.equal(plan.frontendTaskName, "next-legacy");
assert.equal(plan.frontendCommand, "pnpm dev -p 3100");
assert.equal(plan.mnoteWebCommand, "cargo run -p mnote-web --bin mnote-web");
assert.deepEqual(plan.mnoteWebEnv, {
MNOTE_WEB_BIND: "127.0.0.1:3000",
MNOTE_WEB_PUBLIC_BIND: "127.0.0.1:3000",
MNOTE_WEB_LEGACY_NEXT_BASE_URL: "http://127.0.0.1:3100",
MNOTE_WEB_ENABLE_LEGACY_NEXT_COMPAT: "1",
});
});
test("默认任务数组顺序变化时后端命令不应覆盖 mnote-web gateway", () => {
const plan = resolveRuntimePlan({
FRONTEND_PORT: "3000",
NEXT_LEGACY_PORT: "3100",
BACKEND_CMD: "/custom/backend",
});
assert.equal(plan.mnoteWebCommand, "cargo run -p mnote-web --bin mnote-web");
assert.equal(plan.frontendCommand, "pnpm dev -p 3100");
});
test("MNOTE_WEB_SKIP_GATEWAY 可临时恢复旧 Next 3000 入口", () => {
const plan = resolveRuntimePlan({
FRONTEND_PORT: "3000",
NEXT_LEGACY_PORT: "3100",
MNOTE_WEB_SKIP_GATEWAY: "1",
});
assert.equal(plan.skipGateway, true);
assert.equal(plan.frontendTaskName, "frontend");
assert.equal(plan.frontendCommand, "pnpm dev -p 3000");
assert.deepEqual(plan.mnoteWebEnv, {});
});
test("SKIP_NEXT_LEGACY 保持 Rust gateway 为 3000 owner,但不启动 Next legacy upstream", () => {
const plan = resolveRuntimePlan({
FRONTEND_PORT: "3000",
NEXT_LEGACY_PORT: "3100",
SKIP_NEXT_LEGACY: "1",
});
assert.equal(plan.skipGateway, false);
assert.equal(plan.skipNextLegacy, true);
assert.equal(plan.frontendTaskName, null);
assert.equal(plan.mnoteWebCommand, "cargo run -p mnote-web --bin mnote-web");
assert.deepEqual(plan.mnoteWebEnv, {
MNOTE_WEB_BIND: "127.0.0.1:3000",
MNOTE_WEB_PUBLIC_BIND: "127.0.0.1:3000",
MNOTE_WEB_ENABLE_LEGACY_NEXT_COMPAT: "0",
});
});