semantic-release keeps trying to reuse deleted immutable tag
I accidentally published v0.6.0-beta.1 in my repository while using semantic-release.
The problem: I had GitHub immutable releases enabled, this prevents that version tag from ever being used again.
The issue is that semantic-release keeps trying to publish v0.6.0-beta.1 instead of advancing the next version.
When I run the pipeline, it always fails with:
[4:49:00 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ The release type for the commit is minor
[4:49:00 PM] [semantic-release] [@semantic-release/commit-analyzer] › ℹ Analysis of 5 commits complete: minor release
[4:49:00 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
[4:49:00 PM] [semantic-release] › ℹ The next release version is 0.6.0-beta.1
[4:49:00 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "@semantic-release/release-notes-generator"
[4:49:00 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "@semantic-release/release-notes-generator"
[4:49:00 PM] [semantic-release] › ℹ Start step "prepare" of plugin "@semantic-release/npm"
[4:49:00 PM] [semantic-release] [@semantic-release/npm] › ℹ Write version 0.6.0-beta.1 to package.json in /home/runner/work/better-invite/better-invite/package
v0.6.0-beta.1
[4:49:01 PM] [semantic-release] › ✔ Completed step "prepare" of plugin "@semantic-release/npm"
[4:49:01 PM] [semantic-release] › ✘ An error occurred while running semantic-release: ExecaError: Command failed with exit code 128: git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273
fatal: tag 'v0.6.0-beta.1' already exists
at getFinalError (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/return/final-error.js:6:9)
at makeError (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/return/result.js:108:16)
at getAsyncResult (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/methods/main-async.js:168:4)
at handlePromise (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/methods/main-async.js:151:17)
at async tag (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/lib/git.js:224:3)
at async run (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/index.js:208:5)
at async Module.default (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/index.js:278:22)
at async default (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/cli.js:55:5) {
shortMessage: 'Command failed with exit code 128: git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273',
command: 'git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273',
escapedCommand: 'git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273',
cwd: '/home/runner/work/better-invite/better-invite/package',
durationMs: 5.071485,
failed: true,
timedOut: false,
isCanceled: false,
isGracefullyCanceled: false,
isTerminated: false,
isMaxBuffer: false,
isForcefullyTerminated: false,
exitCode: 128,
stdout: '',
stderr: "fatal: tag 'v0.6.0-beta.1' already exists",
stdio: [ undefined, '', "fatal: tag 'v0.6.0-beta.1' already exists" ],
ipcOutput: [],
pipedFrom: []
}
ExecaError: Command failed with exit code 128: git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273
fatal: tag 'v0.6.0-beta.1' already exists
at getFinalError (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/return/final-error.js:6:9)
at makeError (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/return/result.js:108:16)
at getAsyncResult (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/methods/main-async.js:168:4)
at handlePromise (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/execa/lib/methods/main-async.js:151:17)
at async tag (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/lib/git.js:224:3)
at async run (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/index.js:208:5)
at async Module.default (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/index.js:278:22)
at async default (file:///home/runner/.cache/pnpm/dlx/06dc774b296759f21c0d70fd931569643f0e5e9e4aba358fb0d72a707a106f87/19de4717b5d-9f2/node_modules/.pnpm/[email protected]/node_modules/semantic-release/cli.js:55:5) {
shortMessage: 'Command failed with exit code 128: git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273',
command: 'git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273',
escapedCommand: 'git tag v0.6.0-beta.1 eb786c2108b35a1ed92cf1e59e3ecf2ec1251273',
cwd: '/home/runner/work/better-invite/better-invite/package',
durationMs: 5.071485,
failed: true,
timedOut: false,
isCanceled: false,
isGracefullyCanceled: false,
isTerminated: false,
isMaxBuffer: false,
isForcefullyTerminated: false,
exitCode: 128,
stdout: '',
stderr: "fatal: tag 'v0.6.0-beta.1' already exists",
stdio: [ undefined, '', "fatal: tag 'v0.6.0-beta.1' already exists" ],
ipcOutput: [],
pipedFrom: []
}The issue is specifically that semantic-release keeps selecting the already-used prerelease version instead of incrementing it.
What I tried
- Deleted the tag locally and remotely
- Removed the GitHub release
- Manually create
v0.6.0-beta.2 - Re-ran semantic-release multiple times
No matter what, semantic-release continues resolving to v0.6.0-beta.1.
Question
How can I make semantic-release ignore the already-published prerelease version and correctly continue the prerelease sequence (e.g. move to beta.2 or beta.3)?
Is there a way to reset or recompute the latest prerelease state so it doesn’t reuse an already published version?
Source: semantic-release/semantic-release