diff --git a/package.json b/package.json index 27d4034..4f60e63 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Codex Market", "license": "MIT", "main": "electron/bootstrap.js", - "hotContentVersion": "1.5.83", + "hotContentVersion": "1.5.84", "hotMinAppVersion": "1.5.0", "scripts": { "start": "electron .", diff --git a/scripts/publish-hot.js b/scripts/publish-hot.js index c0bb5c4..1855c68 100644 --- a/scripts/publish-hot.js +++ b/scripts/publish-hot.js @@ -50,6 +50,23 @@ fs.mkdirSync(OUT, { recursive: true }); const bundleName = `bundle-${version}.zip`; const bundlePath = path.join(OUT, bundleName); +// —— 0) 版本复用守卫:远端 manifest 已是该版本时拒绝发布(除非 --force)。 +// 客户端按 contentVersion 判断是否更新,同名覆盖会让已装用户永远收不到新内容。 +try { + const rel = JSON.parse(execFileSync("curl", ["-s", `-H`, `Authorization: token ${token}`, + `${API}/releases/tags/${TAG}`], { encoding: "utf8", maxBuffer: 64 * 1024 * 1024 })); + const mAsset = (rel.assets || []).find((a) => a.name === "hotupdate.json"); + if (mAsset) { + const remote = JSON.parse(execFileSync("curl", ["-s", "-H", `Authorization: token ${token}`, + mAsset.browser_download_url], { encoding: "utf8" })); + if (remote && remote.contentVersion === version && !has("--force")) { + console.error(`✖ 版本 ${version} 已发布过(远端 manifest contentVersion 相同)。`); + console.error(" 客户端会认为已是最新而忽略同名覆盖。请递增 --version 后重试,或确需覆盖时加 --force。"); + process.exit(1); + } + } +} catch (e) { /* 拉不到远端 manifest 时不阻塞发布 */ } + // —— 1) 打包(zip,deflate,可被 lib/zip.js 解压)—— fs.rmSync(bundlePath, { force: true }); console.log(`打包 electron/ + renderer/ → ${bundleName} …`);