Skip to content

Commit 48c7cf3

Browse files
authored
fix: release ref (#4965)
Signed-off-by: Matteo Collina <hello@matteocollina.com>
1 parent 58ef10d commit 48c7cf3

3 files changed

Lines changed: 60 additions & 2 deletions

File tree

.github/workflows/release.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ jobs:
3636
repo
3737
})
3838
39-
const previousRelease = releases.find((r) => r.tag_name.startsWith('v7'))
39+
const currentMajor = versionTag.match(/^v\d+/)?.[0]
40+
const previousRelease = releases.find((r) => {
41+
return r.tag_name !== versionTag && r.tag_name.startsWith(`${currentMajor}.`)
42+
})
4043
4144
if (versionTag !== previousRelease?.tag_name) {
4245
return versionTag

scripts/release.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,26 @@
22

33
// Called from .github/workflows
44

5+
const getMajorTagPrefix = (versionTag) => {
6+
const match = /^v(\d+)\./.exec(versionTag)
7+
return match ? `v${match[1]}` : versionTag
8+
}
9+
10+
const getPreviousRelease = ({ releases, versionTag }) => {
11+
const majorTagPrefix = getMajorTagPrefix(versionTag)
12+
13+
return releases.find((release) => {
14+
return release.tag_name !== versionTag && release.tag_name.startsWith(`${majorTagPrefix}.`)
15+
})
16+
}
17+
518
const generateReleaseNotes = async ({ github, owner, repo, versionTag, commitHash }) => {
619
const { data: releases } = await github.rest.repos.listReleases({
720
owner,
821
repo
922
})
1023

11-
const previousRelease = releases.find((r) => r.tag_name.startsWith('v7'))
24+
const previousRelease = getPreviousRelease({ releases, versionTag })
1225

1326
const { data: { body } } = await github.rest.repos.generateReleaseNotes({
1427
owner,
@@ -69,5 +82,6 @@ const release = async ({ github, context, versionTag, commitHash }) => {
6982

7083
module.exports = {
7184
generatePr,
85+
getPreviousRelease,
7286
release
7387
}

test/release.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'use strict'
2+
3+
const { strictEqual } = require('node:assert')
4+
const { test } = require('node:test')
5+
const { getPreviousRelease } = require('../scripts/release')
6+
7+
test('getPreviousRelease uses the latest release from the current major line', () => {
8+
const previousRelease = getPreviousRelease({
9+
versionTag: 'v8.0.1',
10+
releases: [
11+
{ tag_name: 'v8.0.0' },
12+
{ tag_name: 'v7.16.0' }
13+
]
14+
})
15+
16+
strictEqual(previousRelease?.tag_name, 'v8.0.0')
17+
})
18+
19+
test('getPreviousRelease ignores the current version tag', () => {
20+
const previousRelease = getPreviousRelease({
21+
versionTag: 'v8.0.1',
22+
releases: [
23+
{ tag_name: 'v8.0.1' },
24+
{ tag_name: 'v8.0.0' },
25+
{ tag_name: 'v7.16.0' }
26+
]
27+
})
28+
29+
strictEqual(previousRelease?.tag_name, 'v8.0.0')
30+
})
31+
32+
test('getPreviousRelease returns undefined when the current major has no previous releases', () => {
33+
const previousRelease = getPreviousRelease({
34+
versionTag: 'v8.0.0',
35+
releases: [
36+
{ tag_name: 'v7.16.0' }
37+
]
38+
})
39+
40+
strictEqual(previousRelease, undefined)
41+
})

0 commit comments

Comments
 (0)