From c8302d1430c4f27491131313a626113e421de100 Mon Sep 17 00:00:00 2001 From: Nick Cipollo Date: Fri, 26 Nov 2021 16:11:52 -0500 Subject: [PATCH] Fixes #135 Add support for generate_release_notes --- __tests__/Action.test.ts | 65 +++++++++++++++++++++++++++++++---- __tests__/Inputs.test.ts | 25 ++++++++++++-- __tests__/Integration.test.ts | 3 +- action.yml | 4 +++ src/Action.ts | 1 + src/Inputs.ts | 16 +++++++-- src/Releases.ts | 3 ++ 7 files changed, 104 insertions(+), 13 deletions(-) diff --git a/__tests__/Action.test.ts b/__tests__/Action.test.ts index 2398c277..6d13a4f7 100644 --- a/__tests__/Action.test.ts +++ b/__tests__/Action.test.ts @@ -26,6 +26,7 @@ const createName = 'createName' const commit = 'commit' const discussionCategory = 'discussionCategory' const draft = true +const generateReleaseNotes = true const id = 100 const createPrerelease = true const updatePrerelease = false @@ -51,7 +52,14 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease) + expect(createMock).toBeCalledWith(tag, + createBody, + commit, + discussionCategory, + draft, + generateReleaseNotes, + createName, + createPrerelease) expect(uploadMock).not.toBeCalled() assertOutputApplied() }) @@ -63,7 +71,15 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease) + expect(createMock).toBeCalledWith( + tag, + createBody, + commit, + discussionCategory, + draft, + generateReleaseNotes, + createName, + createPrerelease) expect(uploadMock).toBeCalledWith(artifacts, releaseId, url) assertOutputApplied() }) @@ -80,7 +96,16 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease) + expect(createMock).toBeCalledWith( + tag, + createBody, + commit, + discussionCategory, + draft, + generateReleaseNotes, + createName, + createPrerelease + ) expect(uploadMock).toBeCalledWith(artifacts, releaseId, url) assertOutputApplied() @@ -91,7 +116,16 @@ describe("Action", () => { await action.perform() - expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease) + expect(createMock).toBeCalledWith( + tag, + createBody, + commit, + discussionCategory, + draft, + generateReleaseNotes, + createName, + createPrerelease + ) expect(uploadMock).toBeCalledWith(artifacts, releaseId, url) assertOutputApplied() }) @@ -125,7 +159,16 @@ describe("Action", () => { expect(error).toEqual("error") } - expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease) + expect(createMock).toBeCalledWith( + tag, + createBody, + commit, + discussionCategory, + draft, + generateReleaseNotes, + createName, + createPrerelease + ) expect(uploadMock).not.toBeCalled() }) @@ -191,7 +234,16 @@ describe("Action", () => { expect(error).toEqual(expectedError) } - expect(createMock).toBeCalledWith(tag, createBody, commit, discussionCategory, draft, createName, createPrerelease) + expect(createMock).toBeCalledWith( + tag, + createBody, + commit, + discussionCategory, + draft, + generateReleaseNotes, + createName, + createPrerelease + ) expect(uploadMock).toBeCalledWith(artifacts, releaseId, url) }) @@ -315,6 +367,7 @@ describe("Action", () => { commit: commit, discussionCategory: discussionCategory, draft: draft, + generateReleaseNotes: true, owner: "owner", createdPrerelease: createPrerelease, replacesArtifacts: replacesArtifacts, diff --git a/__tests__/Inputs.test.ts b/__tests__/Inputs.test.ts index ad361e13..8cebcc23 100644 --- a/__tests__/Inputs.test.ts +++ b/__tests__/Inputs.test.ts @@ -38,9 +38,16 @@ describe('Inputs', () => { inputs = new CoreInputs(createGlobber(), context) }) - it('returns targetCommit', () => { - mockGetInput.mockReturnValue('42') - expect(inputs.commit).toBe('42') + describe('commit', () => { + it('returns commit', () => { + mockGetInput.mockReturnValueOnce('commit') + expect(inputs.commit).toBe('commit') + }) + + it('returns undefined when omitted', () => { + mockGetInput.mockReturnValueOnce('') + expect(inputs.commit).toBeUndefined() + }) }) it('returns token', () => { @@ -202,6 +209,18 @@ describe('Inputs', () => { }) }) + describe('generateReleaseNotes', () => { + it('returns returns true', function () { + mockGetInput.mockReturnValue("true") + expect(inputs.generateReleaseNotes).toBe(true) + }); + + it('returns false when omitted', function () { + mockGetInput.mockReturnValue("") + expect(inputs.generateReleaseNotes).toBe(false) + }); + }) + describe('owner', () => { it('returns owner from context', function () { process.env.GITHUB_REPOSITORY = "owner/repo" diff --git a/__tests__/Integration.test.ts b/__tests__/Integration.test.ts index aaf1f491..7ef1f6bb 100644 --- a/__tests__/Integration.test.ts +++ b/__tests__/Integration.test.ts @@ -43,9 +43,10 @@ describe.skip('Integration Test', () => { artifacts: artifacts(), createdReleaseBody: "This release was generated by release-action's integration test", createdReleaseName: "Releases Action Integration Test", - commit: "", + commit: undefined, discussionCategory: 'Release', draft: false, + generateReleaseNotes: true, owner: "ncipollo", createdPrerelease: false, replacesArtifacts: true, diff --git a/action.yml b/action.yml index f9688eab..775847b9 100644 --- a/action.yml +++ b/action.yml @@ -43,6 +43,10 @@ inputs: description: "Optionally marks this release as a draft release. Set to true to enable." required: false default: '' + generateReleaseNotes: + description: 'Indicates if release notes should be automatically generated.' + required: false + default: 'false' name: description: 'An optional name for the release. If this is omitted the tag will be used.' required: false diff --git a/src/Action.ts b/src/Action.ts index 516caaba..2057fed1 100644 --- a/src/Action.ts +++ b/src/Action.ts @@ -114,6 +114,7 @@ export class Action { this.inputs.commit, this.inputs.discussionCategory, this.inputs.draft, + this.inputs.generateReleaseNotes, this.inputs.createdReleaseName, this.inputs.createdPrerelease ) diff --git a/src/Inputs.ts b/src/Inputs.ts index ae1f2484..8b50fa62 100644 --- a/src/Inputs.ts +++ b/src/Inputs.ts @@ -8,11 +8,12 @@ export interface Inputs { readonly allowUpdates: boolean readonly artifactErrorsFailBuild: boolean readonly artifacts: Artifact[] - readonly commit: string + readonly commit?: string readonly createdReleaseBody?: string readonly createdReleaseName?: string readonly discussionCategory?: string readonly draft: boolean + readonly generateReleaseNotes: boolean readonly owner: string readonly createdPrerelease: boolean readonly removeArtifacts: boolean @@ -83,8 +84,12 @@ export class CoreInputs implements Inputs { return '' } - get commit(): string { - return core.getInput('commit') + get commit(): string | undefined { + const commit = core.getInput('commit') + if (commit) { + return commit + } + return undefined } get createdReleaseName(): string | undefined { @@ -117,6 +122,11 @@ export class CoreInputs implements Inputs { const draft = core.getInput('draft') return draft == 'true' } + + get generateReleaseNotes(): boolean { + const generate = core.getInput('generateReleaseNotes') + return generate == 'true' + } get owner(): string { let owner = core.getInput('owner') diff --git a/src/Releases.ts b/src/Releases.ts index dc681f45..e5c46fff 100644 --- a/src/Releases.ts +++ b/src/Releases.ts @@ -24,6 +24,7 @@ export interface Releases { commitHash?: string, discussionCategory?: string, draft?: boolean, + generateReleaseNotes?: boolean, name?: string, prerelease?: boolean ): Promise @@ -72,6 +73,7 @@ export class GithubReleases implements Releases { commitHash?: string, discussionCategory?: string, draft?: boolean, + generateReleaseNotes?: boolean, name?: string, prerelease?: boolean ): Promise { @@ -81,6 +83,7 @@ export class GithubReleases implements Releases { name: name, discussion_category_name: discussionCategory, draft: draft, + generate_release_notes: generateReleaseNotes, owner: this.inputs.owner, prerelease: prerelease, repo: this.inputs.repo,