diff --git a/scripts/release.ts b/scripts/release.ts new file mode 100644 index 0000000..777a918 --- /dev/null +++ b/scripts/release.ts @@ -0,0 +1,44 @@ +interface Semver { + major: number; + minor: number; + patch: number; +} + +type BumpType = "major" | "minor" | "patch"; + +export function parseSemver(version: string): Semver { + const parts = version.split("."); + if (parts.length !== 3) { + throw new Error(`无效的版本号格式: ${version}`); + } + const [major, minor, patch] = parts.map((p) => { + const n = Number(p); + if (Number.isNaN(n) || !Number.isInteger(n) || n < 0) { + throw new Error(`无效的版本号格式: ${version}`); + } + return n; + }); + return { major: major!, minor: minor!, patch: patch! }; +} + +export function bumpVersion(current: string, type: BumpType): string { + const semver = parseSemver(current); + switch (type) { + case "major": + return `${semver.major + 1}.0.0`; + case "minor": + return `${semver.major}.${semver.minor + 1}.0`; + case "patch": + return `${semver.major}.${semver.minor}.${semver.patch + 1}`; + } +} + +async function main(): Promise { + // 后续 task 中实现流程编排 + console.log("release 脚本骨架就绪"); +} + +main().catch((err: unknown) => { + console.error(err instanceof Error ? err.message : String(err)); + process.exit(1); +});