2026-07-09 12:33:53 +08:00
|
|
|
import { curseforgeClient } from "@/services/clients";
|
2026-07-10 06:54:14 +08:00
|
|
|
import { uploadFile, getGameVersions } from "@/lib/curseforge";
|
2026-07-09 12:33:53 +08:00
|
|
|
import { resolveVersionName, buildJarPath } from "@/lib/utils/format";
|
2026-07-11 06:06:34 +08:00
|
|
|
import { readAsFile } from "@/lib/utils/file";
|
2026-07-09 12:33:53 +08:00
|
|
|
import type { UploadMetadata } from "@/types";
|
|
|
|
|
import type { PlatformContext } from "./types";
|
|
|
|
|
|
|
|
|
|
export async function publishCurseForgeVersion(
|
|
|
|
|
ctx: PlatformContext,
|
|
|
|
|
mcVersion: string,
|
|
|
|
|
): Promise<void> {
|
|
|
|
|
const { input, config } = ctx;
|
|
|
|
|
|
|
|
|
|
const displayName = resolveVersionName(
|
|
|
|
|
config.curseforge.version_name,
|
|
|
|
|
{ filename_format: config.filename_format },
|
|
|
|
|
{ version: input.version, mc_version: mcVersion },
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const primaryPath = buildJarPath(
|
|
|
|
|
config.project_dir,
|
|
|
|
|
config.filename_format,
|
|
|
|
|
input.version,
|
|
|
|
|
mcVersion,
|
|
|
|
|
);
|
|
|
|
|
|
2026-07-11 06:06:34 +08:00
|
|
|
const primaryFile = await readAsFile(primaryPath);
|
2026-07-09 12:33:53 +08:00
|
|
|
|
2026-07-10 06:54:14 +08:00
|
|
|
const gameVersions = await getGameVersions(curseforgeClient);
|
|
|
|
|
|
|
|
|
|
const resolveId = (name: string): number => {
|
|
|
|
|
const found = gameVersions.find((v) => v.name === name);
|
|
|
|
|
if (!found) throw new Error(`Game version "${name}" not found in CurseForge`);
|
|
|
|
|
return found.id;
|
|
|
|
|
};
|
|
|
|
|
|
2026-07-09 12:33:53 +08:00
|
|
|
const metadata: UploadMetadata = {
|
|
|
|
|
changelog: input.changelog,
|
|
|
|
|
changelogType: "markdown",
|
|
|
|
|
displayName,
|
|
|
|
|
releaseType: input.versionType,
|
2026-07-10 06:54:14 +08:00
|
|
|
gameVersions: [
|
|
|
|
|
resolveId(mcVersion),
|
|
|
|
|
...config.curseforge.loaders.map(resolveId),
|
|
|
|
|
...config.curseforge.environment.map(resolveId),
|
|
|
|
|
],
|
2026-07-09 12:33:53 +08:00
|
|
|
relations: config.curseforge.relations,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
await uploadFile(
|
|
|
|
|
curseforgeClient,
|
|
|
|
|
config.curseforge.project_id,
|
|
|
|
|
metadata,
|
2026-07-11 06:06:34 +08:00
|
|
|
primaryFile,
|
2026-07-09 12:33:53 +08:00
|
|
|
);
|
|
|
|
|
}
|