diff --git a/scripts/release.mjs b/scripts/release.mjs index ff1a864..f8dde94 100644 --- a/scripts/release.mjs +++ b/scripts/release.mjs @@ -267,7 +267,21 @@ if (unexpectedDirty.length > 0) { } sh('git', ['add', '-A', '--', '.', ':(exclude).github']); -sh('git', ['commit', '-m', `chore(release): v${version}`]); +// 版本号可能**早已在树中钉好**(v2.1.0 的流程:先 chore(release) 提交版本号, +// 之后再发版)。此时 add 之后暂存区为空,`git commit` 会以 "nothing to commit" +// 非零退出,把整个发版卡在最后一步 —— 且报错指向 git 而非发布逻辑,极易误判。 +// 故:暂存区为空则跳过 commit(标签与 Release 照常创建)。 +let hasStaged = false; +try { + sh('git', ['diff', '--cached', '--quiet']); +} catch { + hasStaged = true; // diff --quiet 有差异时退出码 1 → execFileSync 抛错 +} +if (hasStaged) { + sh('git', ['commit', '-m', `chore(release): v${version}`]); +} else { + console.log('(版本号已是最新,无需额外提交;直接打标签)'); +} sh('git', ['tag', '-a', `v${version}`, '-m', `nodeagent v${version}`]); netRetry('push main', () => sh('git', ['push', 'origin', 'main'])); netRetry('push tag', () => sh('git', ['push', 'origin', `v${version}`]));