diff --git a/actions/release-tag-creation/current-version-validation.test.ts b/actions/release-tag-creation/current-version-validation.test.ts index 4b03436b3..362ffdcad 100644 --- a/actions/release-tag-creation/current-version-validation.test.ts +++ b/actions/release-tag-creation/current-version-validation.test.ts @@ -59,9 +59,16 @@ describe('checkVersionIsNext', () => { ['4.2.0-beta1', '4.2.0-beta2'], '4.2.0-beta2', false, - 'Expected next beta to be 4.2.0-beta3', + 'must be greater than the latest beta tag 4.2.0-beta2', + ], + [ + 'beta', + ['4.2.0-beta1', '4.2.0-beta2'], + '4.2.0-beta1', + false, + 'must be greater than the latest beta tag 4.2.0-beta2', ], - // beta — next minor / next major + // beta — new version line (must be greater than latest AND beta1) ['beta', ['4.2.0-beta1', '4.2.0-beta2'], '4.3.0-beta1', true, null], ['beta', ['4.2.0-beta1', '4.2.0-beta2'], '5.0.0-beta1', true, null], [ @@ -99,6 +106,14 @@ describe('checkVersionIsNext', () => { false, 'Expected next beta line to be 4.3.0-beta1 or 5.0.0-beta1', ], + // beta — older version line must be rejected (regression) + [ + 'beta', + ['4.2.0-beta1', '4.2.0-beta2'], + '4.1.0-beta1', + false, + 'must be greater than the latest beta tag 4.2.0-beta2', + ], // beta — no existing tags ['beta', ['4.1.0', '4.2.0'], '4.2.0-beta1', true, null], ] as const)( diff --git a/actions/release-tag-creation/current-version-validation.ts b/actions/release-tag-creation/current-version-validation.ts index dff2f9b4b..114a14ac5 100644 --- a/actions/release-tag-creation/current-version-validation.ts +++ b/actions/release-tag-creation/current-version-validation.ts @@ -48,6 +48,12 @@ function validateNextBeta( l: semver.SemVer, latest: string, ): void { + if (!semver.gt(n, l)) { + throw new Error( + `Version ${version} must be greater than the latest beta tag ${latest}.`, + ); + } + const latestBetaNum = Number(String(l.prerelease[0]).replace('beta', '')); const newBetaNum = Number(String(n.prerelease[0]).replace('beta', '')); const sameLine =