Skip to content

Commit 7f7ce7b

Browse files
authored
Merge pull request #43 from nearform/fix/handle-no-release
fix: handle no release
2 parents a7e5131 + 598c72f commit 7f7ce7b

File tree

8 files changed

+113
-115
lines changed

8 files changed

+113
-115
lines changed

dist/index.js

Lines changed: 32 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
'use strict'
22
const core = require('@actions/core')
3-
const { logInfo } = require('./log')
43

54
const { runAction } = require('./release-notify-action')
65

76
async function run() {
8-
try {
9-
const token = core.getInput('github-token', { required: true })
10-
const staleDays = Number(core.getInput('stale-days'))
11-
const commitMessageLines = Number(core.getInput('commit-messages-lines'))
7+
const token = core.getInput('github-token', { required: true })
8+
const staleDays = Number(core.getInput('stale-days'))
9+
const commitMessageLines = Number(core.getInput('commit-messages-lines'))
1210

13-
return await runAction(token, staleDays, commitMessageLines)
14-
} catch (error) {
15-
logInfo(error.message)
16-
core.setFailed(error.message)
17-
}
11+
await runAction(token, staleDays, commitMessageLines)
1812
}
1913

2014
run()

src/release-notify-action.js

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict'
22

3-
const { logInfo } = require('./log')
3+
const { logInfo, logWarning } = require('./log')
44
const { getLatestRelease, getUnreleasedCommits } = require('./release')
55
const {
66
createOrUpdateIssue,
@@ -9,39 +9,46 @@ const {
99
} = require('./issue')
1010

1111
async function runAction(token, staleDays, commitMessageLines) {
12-
const latestRelease = await getLatestRelease(token)
12+
let latestRelease
1313

14-
if (!latestRelease) {
15-
return logInfo('Could not find latest release')
14+
try {
15+
latestRelease = await getLatestRelease(token)
16+
} catch (err) {
17+
return logWarning('Could not find latest release')
1618
}
1719

18-
logInfo(`Latest release - name:${latestRelease.name}, published:${latestRelease.published_at},
19-
Tag:${latestRelease.tag_name}, author:${latestRelease.author.login}`)
20+
logInfo(`Latest release:
21+
- name:${latestRelease.name}
22+
- published:${latestRelease.published_at}
23+
- tag:${latestRelease.tag_name}
24+
- author:${latestRelease.author.login}
25+
`)
26+
27+
const pendingIssue = await getLastOpenPendingIssue(token)
2028

21-
let pendingIssue = await getLastOpenPendingIssue(token)
2229
const unreleasedCommits = await getUnreleasedCommits(
2330
token,
2431
latestRelease.published_at,
2532
staleDays
2633
)
2734

2835
if (unreleasedCommits.length) {
29-
await createOrUpdateIssue(
36+
return createOrUpdateIssue(
3037
token,
3138
unreleasedCommits,
3239
pendingIssue,
3340
latestRelease,
3441
commitMessageLines
3542
)
36-
} else {
37-
logInfo('No pending commits found')
38-
if (
39-
pendingIssue &&
40-
Date.parse(latestRelease.published_at) >
41-
Date.parse(pendingIssue.updated_at)
42-
) {
43-
await closeIssue(token, pendingIssue.number)
44-
}
43+
}
44+
45+
logInfo('No pending commits found')
46+
47+
if (
48+
pendingIssue &&
49+
Date.parse(latestRelease.published_at) > Date.parse(pendingIssue.updated_at)
50+
) {
51+
return closeIssue(token, pendingIssue.number)
4552
}
4653
}
4754

src/release.js

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,10 @@ async function getLatestRelease(token) {
55
const octokit = github.getOctokit(token)
66
const { owner, repo } = github.context.repo
77

8-
const latestReleaseResponse = await octokit.request(
9-
`GET /repos/{owner}/{repo}/releases/latest`,
10-
{
11-
owner,
12-
repo,
13-
}
14-
)
15-
16-
return latestReleaseResponse.data
8+
return octokit.rest.repos.getLatestRelease({
9+
owner,
10+
repo,
11+
})
1712
}
1813

1914
async function getUnreleasedCommits(token, latestReleaseDate, staleDays) {

test/log.spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict'
2+
3+
jest.mock('@actions/core')
4+
5+
const log = require('../src/log')
6+
7+
describe('log', () => {
8+
it.each([['logDebug'], ['logInfo'], ['logWarning'], ['logError']])(
9+
'it should log with %s',
10+
(method) => log[method]()
11+
)
12+
})

test/release-notify-action.spec.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ const {
1010
pendingIssues,
1111
} = require('./testData')
1212

13-
jest.mock('../src/log', () => ({
14-
logInfo: jest.fn(),
15-
}))
13+
jest.mock('../src/log')
1614

1715
jest.mock('../src/release', () => ({
1816
getLatestRelease: jest.fn(),
@@ -36,7 +34,7 @@ beforeEach(() => {
3634
const token = 'dummyToken'
3735

3836
test('Create issue for unreleased commits (no existing issues)', async () => {
39-
release.getLatestRelease.mockResolvedValue(allReleases.data[0])
37+
release.getLatestRelease.mockResolvedValue(allReleases[0])
4038
issue.getLastOpenPendingIssue.mockResolvedValue(null)
4139
release.getUnreleasedCommits.mockResolvedValue(unreleasedCommitsData1)
4240

@@ -48,14 +46,14 @@ test('Create issue for unreleased commits (no existing issues)', async () => {
4846
token,
4947
unreleasedCommitsData1,
5048
null,
51-
allReleases.data[0],
49+
allReleases[0],
5250
1
5351
)
5452
expect(issue.closeIssue).not.toHaveBeenCalled()
5553
})
5654

5755
test('Update issue for unreleased commits (issue already exists)', async () => {
58-
release.getLatestRelease.mockResolvedValue(allReleases.data[0])
56+
release.getLatestRelease.mockResolvedValue(allReleases[0])
5957
issue.getLastOpenPendingIssue.mockResolvedValue(pendingIssues[0])
6058
release.getUnreleasedCommits.mockResolvedValue(unreleasedCommitsData1)
6159

@@ -67,14 +65,14 @@ test('Update issue for unreleased commits (issue already exists)', async () => {
6765
token,
6866
unreleasedCommitsData1,
6967
pendingIssues[0],
70-
allReleases.data[0],
68+
allReleases[0],
7169
1
7270
)
7371
expect(issue.closeIssue).not.toHaveBeenCalled()
7472
})
7573

7674
test('Close issue when there is one pending and no unreleased commits', async () => {
77-
release.getLatestRelease.mockResolvedValue(allReleases.data[0])
75+
release.getLatestRelease.mockResolvedValue(allReleases[0])
7876
issue.getLastOpenPendingIssue.mockResolvedValue(pendingIssues[0])
7977
release.getUnreleasedCommits.mockResolvedValue([])
8078

@@ -87,7 +85,7 @@ test('Close issue when there is one pending and no unreleased commits', async ()
8785
})
8886

8987
test('Do nothing when there is one issue pending and no new releases', async () => {
90-
release.getLatestRelease.mockResolvedValue(allReleases.data[1])
88+
release.getLatestRelease.mockResolvedValue(allReleases[1])
9189
issue.getLastOpenPendingIssue.mockResolvedValue(pendingIssues[0])
9290
release.getUnreleasedCommits.mockResolvedValue([])
9391

@@ -100,7 +98,7 @@ test('Do nothing when there is one issue pending and no new releases', async ()
10098
})
10199

102100
test('Do nothing when no releases found', async () => {
103-
release.getLatestRelease.mockResolvedValue(null)
101+
release.getLatestRelease.mockRejectedValue()
104102

105103
await runAction(token, 1, 1)
106104

test/release.spec.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const {
77
allReleasesData: allReleases,
88
unreleasedCommitsData0,
99
unreleasedCommitsData1,
10-
allReleasesNoData,
1110
} = require('./testData')
1211

1312
const token = 'dummytoken'
@@ -19,24 +18,28 @@ jest.mock('@actions/github', () => ({
1918

2019
test('Gets the latest release of the repository', async () => {
2120
getOctokit.mockReturnValue({
22-
request: async () => ({ data: allReleases.data[0] }),
21+
rest: {
22+
repos: { getLatestRelease: async () => allReleases[0] },
23+
},
2324
})
2425
const latestReleaseResponse = await getLatestRelease(token)
25-
expect(latestReleaseResponse).toStrictEqual(allReleases.data[0])
26+
expect(latestReleaseResponse).toStrictEqual(allReleases[0])
2627
})
2728

28-
test('Retuns null if no releases found', async () => {
29+
test('Throws if no releases found', async () => {
2930
getOctokit.mockReturnValue({
30-
request: async () => ({ data: allReleasesNoData.data[0] }),
31+
rest: {
32+
repos: { getLatestRelease: () => Promise.reject(new Error()) },
33+
},
3134
})
32-
const latestReleaseResponse = await getLatestRelease(token)
33-
expect(latestReleaseResponse).toBeUndefined()
35+
36+
await expect(getLatestRelease(token)).rejects.toBeDefined()
3437
})
3538

3639
test('Gets the unreleased commits with stale-days as 0', async () => {
3740
getOctokit.mockReturnValue({ request: async () => allCommits })
3841
const daysToIgnore = 0
39-
const latestReleaseDate = allReleases.data[0].created_at
42+
const latestReleaseDate = allReleases[0].created_at
4043
const allCommitsResponse = await getUnreleasedCommits(
4144
token,
4245
latestReleaseDate,
@@ -48,7 +51,7 @@ test('Gets the unreleased commits with stale-days as 0', async () => {
4851
test('Gets the unreleased commits with stale-days as non zero', async () => {
4952
getOctokit.mockReturnValue({ request: async () => allCommits })
5053
const daysToIgnore = 3
51-
const latestReleaseDate = allReleases.data[0].created_at
54+
const latestReleaseDate = allReleases[0].created_at
5255
const allCommitsResponse = await getUnreleasedCommits(
5356
token,
5457
latestReleaseDate,
@@ -60,7 +63,7 @@ test('Gets the unreleased commits with stale-days as non zero', async () => {
6063
test('Gets the unreleased commits and uses default value of stale-days', async () => {
6164
getOctokit.mockReturnValue({ request: async () => allCommits })
6265
const daysToIgnore = undefined
63-
const latestReleaseDate = allReleases.data[0].created_at
66+
const latestReleaseDate = allReleases[0].created_at
6467
const allCommitsResponse = await getUnreleasedCommits(
6568
token,
6669
latestReleaseDate,

0 commit comments

Comments
 (0)