From e198da49c483b3c3c067eabcb8ac0060a01d10ad Mon Sep 17 00:00:00 2001 From: Emilien Escalle Date: Mon, 24 Oct 2022 16:21:15 +0200 Subject: [PATCH] fix(release): strip prefix before comparing version --- dist/index.js | 13 ++++++++++--- lib/releases.js | 13 ++++++++++--- test/releases.test.js | 44 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/dist/index.js b/dist/index.js index f0b23c061..9e8840d74 100644 --- a/dist/index.js +++ b/dist/index.js @@ -142893,11 +142893,17 @@ const { getVersionInfo } = __nccwpck_require__(49914) const { template } = __nccwpck_require__(47282) const { log } = __nccwpck_require__(71911) -const sortReleases = (releases) => { +const sortReleases = (releases, tagPrefix) => { // For semver, we find the greatest release number // For non-semver, we use the most recently merged try { - return releases.sort((r1, r2) => compareVersions(r1.tag_name, r2.tag_name)) + const tagPrefixRexExp = new RegExp(`^${regexEscape(tagPrefix)}`) + return releases.sort((r1, r2) => + compareVersions( + r1.tag_name.replace(tagPrefixRexExp, ''), + r2.tag_name.replace(tagPrefixRexExp, '') + ) + ) } catch { return releases.sort( (r1, r2) => new Date(r1.created_at) - new Date(r2.created_at) @@ -142948,7 +142954,8 @@ const findReleases = async ({ const sortedSelectedReleases = sortReleases( filteredReleases.filter( (r) => !r.draft && (!r.prerelease || includePreReleases) - ) + ), + tagPrefix ) const draftRelease = filteredReleases.find((r) => r.draft) const lastRelease = sortedSelectedReleases[sortedSelectedReleases.length - 1] diff --git a/lib/releases.js b/lib/releases.js index 1f99289b4..f1686376f 100644 --- a/lib/releases.js +++ b/lib/releases.js @@ -5,11 +5,17 @@ const { getVersionInfo } = require('./versions') const { template } = require('./template') const { log } = require('./log') -const sortReleases = (releases) => { +const sortReleases = (releases, tagPrefix) => { // For semver, we find the greatest release number // For non-semver, we use the most recently merged try { - return releases.sort((r1, r2) => compareVersions(r1.tag_name, r2.tag_name)) + const tagPrefixRexExp = new RegExp(`^${regexEscape(tagPrefix)}`) + return releases.sort((r1, r2) => + compareVersions( + r1.tag_name.replace(tagPrefixRexExp, ''), + r2.tag_name.replace(tagPrefixRexExp, '') + ) + ) } catch { return releases.sort( (r1, r2) => new Date(r1.created_at) - new Date(r2.created_at) @@ -60,7 +66,8 @@ const findReleases = async ({ const sortedSelectedReleases = sortReleases( filteredReleases.filter( (r) => !r.draft && (!r.prerelease || includePreReleases) - ) + ), + tagPrefix ) const draftRelease = filteredReleases.find((r) => r.draft) const lastRelease = sortedSelectedReleases[sortedSelectedReleases.length - 1] diff --git a/test/releases.test.js b/test/releases.test.js index 8dd8316fc..3d8e80f80 100644 --- a/test/releases.test.js +++ b/test/releases.test.js @@ -1,4 +1,4 @@ -const { generateChangeLog } = require('../lib/releases') +const { generateChangeLog, findReleases } = require('../lib/releases') const { DEFAULT_CONFIG } = require('../lib/default-config') const pullRequests = [ @@ -234,4 +234,46 @@ describe('releases', () => { `) }) }) + + describe('findReleases', () => { + it('should retrieve last release respecting semver, stripped prefix', async () => { + const paginate = jest.fn().mockResolvedValue([ + { + tag_name: 'test-1.0.1', + target_commitish: 'master', + created_at: '2021-06-29T05:45:15Z', + }, + { + tag_name: 'test-1.0.0', + target_commitish: 'master', + created_at: '2022-06-29T05:45:15Z', + }, + ]) + + const context = { + log: { + info: jest.fn(), + }, + repo: jest.fn(), + payload: { + repository: 'test', + }, + octokit: { + paginate, + repos: { listReleases: { endpoint: { merge: jest.fn() } } }, + }, + } + const targetCommitish = 'refs/heads/master' + const filterByCommitish = '' + const tagPrefix = 'test-' + + const { lastRelease } = await findReleases({ + context, + targetCommitish, + filterByCommitish, + tagPrefix, + }) + expect(lastRelease.tag_name).toEqual('test-1.0.1') + }) + }) })