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 })), modrinth: selectedModrinth.map((mc_version) => ({ mc_version })),
curseforge: selectedCurseforge.map((mc_version) => ({ mc_version })), curseforge: selectedCurseforge.map((mc_version) => ({ mc_version })),
}, },
allMcVersions: projectVersions,
cutoffMcVersion: lastVersionEnd ?? "", cutoffMcVersion: lastVersionEnd ?? "",
changelog, changelog,
versionType, versionType,

View File

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

View File

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