Fix version range calculation by passing full project version list

This commit is contained in:
CPTProgrammer 2026-07-18 22:17:54 +08:00
parent b16c9546b8
commit d88b1e0485
No known key found for this signature in database
3 changed files with 11 additions and 2 deletions

View File

@ -467,6 +467,7 @@ export function PublishModal({
modrinth: selectedModrinth.map((mc_version) => ({ mc_version })),
curseforge: selectedCurseforge.map((mc_version) => ({ mc_version })),
},
allMcVersions: projectVersions,
cutoffMcVersion: lastVersionEnd ?? "",
changelog,
versionType,

View File

@ -32,6 +32,9 @@ export const PublishInputSchema = z.object({
mcVersions: z.object(createRecord(
platforms, z.array(z.object({ mc_version: z.string() }))
)),
// 项目全部 MC 版本(完整列表)。范围计算必须基于它:只传勾选子集会让
// 子集末尾被误判为"最后一个版本",范围按 lastVersionEnd 一路放大到最新 MC 版本
allMcVersions: z.array(z.string()).min(1),
cutoffMcVersion: z.string(), // 最后一个版本的截止 MC 版本,两个平台共用
changelog: z.string(),
versionType: BaseVersionSchema.shape.version_type,

View File

@ -81,11 +81,16 @@ async function runPlatform(
// 否则前端进度条会停在 running 假象里,错误也被吞掉。
let mcVersionEntries: McVersionEntry[];
try {
// 范围必须基于完整项目版本列表计算,勾选只决定发布哪些条目
const selected = new Set(mcVersions.map((v) => v.mc_version));
mcVersionEntries = computeVersionRanges(
mcVersions.map(v => v.mc_version),
ctx.input.allMcVersions,
await getGameVersionsFn(),
ctx.input.cutoffMcVersion
);
).filter((e) => selected.has(e.version));
if (mcVersionEntries.length !== selected.size) {
throw new Error("勾选版本与项目版本列表不一致,请刷新后重试");
}
} catch (err) {
const msg = errorMessage(err);
console.error(`[publish] ${platform} 准备阶段失败:`, err);