Skip to content

Commit 40bb172

Browse files
committed
Fixes #135 Add support for generate_release_notes
1 parent 66aaa1e commit 40bb172

File tree

15 files changed

+134
-23
lines changed

15 files changed

+134
-23
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ This action will create a GitHub release and optionally upload an artifact to it
1313
- **commit**: An optional commit reference. This will be used to create the tag if it does not exist.
1414
- **discussionCategory**: When provided this will generate a discussion of the specified category. The category must exist otherwise this will cause the action to fail. This isn't used with draft releases.
1515
- **draft**: Optionally marks this release as a draft release. Set to `true` to enable.
16+
- **generateReleaseNotes**: Indicates if release notes should be automatically generated. Set to `true` to enable.
1617
- **name**: An optional name for the release. If this is omitted the tag will be used.
1718
- **omitBody**: Indicates if the release body should be omitted.
1819
- **omitBodyDuringUpdate**: Indicates if the release body should be omitted during updates. The body will still be applied for newly created releases. This will preserve the existing body during updates.

__tests__/Action.test.ts

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const createName = 'createName'
2626
const commit = 'commit'
2727
const discussionCategory = 'discussionCategory'
2828
const draft = true
29+
const generateReleaseNotes = true
2930
const id = 100
3031
const createPrerelease = true
3132
const updatePrerelease = false
@@ -51,7 +52,14 @@ describe("Action", () => {
5152

5253
await action.perform()
5354

54-
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
55+
expect(createMock).toBeCalledWith(tag,
56+
createBody,
57+
commit,
58+
discussionCategory,
59+
draft,
60+
generateReleaseNotes,
61+
createName,
62+
createPrerelease)
5563
expect(uploadMock).not.toBeCalled()
5664
assertOutputApplied()
5765
})
@@ -63,7 +71,15 @@ describe("Action", () => {
6371

6472
await action.perform()
6573

66-
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
74+
expect(createMock).toBeCalledWith(
75+
tag,
76+
createBody,
77+
commit,
78+
discussionCategory,
79+
draft,
80+
generateReleaseNotes,
81+
createName,
82+
createPrerelease)
6783
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
6884
assertOutputApplied()
6985
})
@@ -80,7 +96,16 @@ describe("Action", () => {
8096

8197
await action.perform()
8298

83-
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
99+
expect(createMock).toBeCalledWith(
100+
tag,
101+
createBody,
102+
commit,
103+
discussionCategory,
104+
draft,
105+
generateReleaseNotes,
106+
createName,
107+
createPrerelease
108+
)
84109
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
85110
assertOutputApplied()
86111

@@ -91,7 +116,16 @@ describe("Action", () => {
91116

92117
await action.perform()
93118

94-
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
119+
expect(createMock).toBeCalledWith(
120+
tag,
121+
createBody,
122+
commit,
123+
discussionCategory,
124+
draft,
125+
generateReleaseNotes,
126+
createName,
127+
createPrerelease
128+
)
95129
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
96130
assertOutputApplied()
97131
})
@@ -125,7 +159,16 @@ describe("Action", () => {
125159
expect(error).toEqual("error")
126160
}
127161

128-
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
162+
expect(createMock).toBeCalledWith(
163+
tag,
164+
createBody,
165+
commit,
166+
discussionCategory,
167+
draft,
168+
generateReleaseNotes,
169+
createName,
170+
createPrerelease
171+
)
129172
expect(uploadMock).not.toBeCalled()
130173
})
131174

@@ -191,7 +234,16 @@ describe("Action", () => {
191234
expect(error).toEqual(expectedError)
192235
}
193236

194-
expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease)
237+
expect(createMock).toBeCalledWith(
238+
tag,
239+
createBody,
240+
commit,
241+
discussionCategory,
242+
draft,
243+
generateReleaseNotes,
244+
createName,
245+
createPrerelease
246+
)
195247
expect(uploadMock).toBeCalledWith(artifacts, releaseId, url)
196248
})
197249

@@ -315,6 +367,7 @@ describe("Action", () => {
315367
commit: commit,
316368
discussionCategory: discussionCategory,
317369
draft: draft,
370+
generateReleaseNotes: true,
318371
owner: "owner",
319372
createdPrerelease: createPrerelease,
320373
replacesArtifacts: replacesArtifacts,

__tests__/Inputs.test.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,16 @@ describe('Inputs', () => {
3838
inputs = new CoreInputs(createGlobber(), context)
3939
})
4040

41-
it('returns targetCommit', () => {
42-
mockGetInput.mockReturnValue('42')
43-
expect(inputs.commit).toBe('42')
41+
describe('commit', () => {
42+
it('returns commit', () => {
43+
mockGetInput.mockReturnValueOnce('commit')
44+
expect(inputs.commit).toBe('commit')
45+
})
46+
47+
it('returns undefined when omitted', () => {
48+
mockGetInput.mockReturnValueOnce('')
49+
expect(inputs.commit).toBeUndefined()
50+
})
4451
})
4552

4653
it('returns token', () => {
@@ -202,6 +209,18 @@ describe('Inputs', () => {
202209
})
203210
})
204211

212+
describe('generateReleaseNotes', () => {
213+
it('returns returns true', function () {
214+
mockGetInput.mockReturnValue("true")
215+
expect(inputs.generateReleaseNotes).toBe(true)
216+
});
217+
218+
it('returns false when omitted', function () {
219+
mockGetInput.mockReturnValue("")
220+
expect(inputs.generateReleaseNotes).toBe(false)
221+
});
222+
})
223+
205224
describe('owner', () => {
206225
it('returns owner from context', function () {
207226
process.env.GITHUB_REPOSITORY = "owner/repo"

__tests__/Integration.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ describe.skip('Integration Test', () => {
4343
artifacts: artifacts(),
4444
createdReleaseBody: "This release was generated by release-action's integration test",
4545
createdReleaseName: "Releases Action Integration Test",
46-
commit: "",
46+
commit: undefined,
4747
discussionCategory: 'Release',
4848
draft: false,
49+
generateReleaseNotes: true,
4950
owner: "ncipollo",
5051
createdPrerelease: false,
5152
replacesArtifacts: true,

action.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ inputs:
4343
description: "Optionally marks this release as a draft release. Set to true to enable."
4444
required: false
4545
default: ''
46+
generateReleaseNotes:
47+
description: 'Indicates if release notes should be automatically generated.'
48+
required: false
49+
default: 'false'
4650
name:
4751
description: 'An optional name for the release. If this is omitted the tag will be used.'
4852
required: false

dist/index.js

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

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/Action.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class Action {
9393
}
9494
createRelease() {
9595
return __awaiter(this, void 0, void 0, function* () {
96-
return yield this.releases.create(this.inputs.tag, this.inputs.createdReleaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, this.inputs.createdReleaseName, this.inputs.createdPrerelease);
96+
return yield this.releases.create(this.inputs.tag, this.inputs.createdReleaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, this.inputs.generateReleaseNotes, this.inputs.createdReleaseName, this.inputs.createdPrerelease);
9797
});
9898
}
9999
}

lib/Inputs.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ class CoreInputs {
7070
return '';
7171
}
7272
get commit() {
73-
return core.getInput('commit');
73+
const commit = core.getInput('commit');
74+
if (commit) {
75+
return commit;
76+
}
77+
return undefined;
7478
}
7579
get createdReleaseName() {
7680
if (CoreInputs.omitName)
@@ -98,6 +102,10 @@ class CoreInputs {
98102
const draft = core.getInput('draft');
99103
return draft == 'true';
100104
}
105+
get generateReleaseNotes() {
106+
const generate = core.getInput('generateReleaseNotes');
107+
return generate == 'true';
108+
}
101109
get owner() {
102110
let owner = core.getInput('owner');
103111
if (owner) {

lib/Releases.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ class GithubReleases {
1515
this.inputs = inputs;
1616
this.git = git;
1717
}
18-
create(tag, body, commitHash, discussionCategory, draft, name, prerelease) {
18+
create(tag, body, commitHash, discussionCategory, draft, generateReleaseNotes, name, prerelease) {
1919
return __awaiter(this, void 0, void 0, function* () {
2020
// noinspection TypeScriptValidateJSTypes
2121
return this.git.rest.repos.createRelease({
2222
body: body,
2323
name: name,
2424
discussion_category_name: discussionCategory,
2525
draft: draft,
26+
generate_release_notes: generateReleaseNotes,
2627
owner: this.inputs.owner,
2728
prerelease: prerelease,
2829
repo: this.inputs.repo,

0 commit comments

Comments
 (0)