From 58a771ebca510d19ec82e2e697e6f1fcf5ed330a Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Tue, 9 Jun 2026 17:39:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20release=20?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E9=AA=A8=E6=9E=B6=E5=92=8C=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=80=92=E5=A2=9E=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/release.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 scripts/release.ts 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); +});