diff --git a/__tests__/Action.test.ts b/__tests__/Action.test.ts index 8c017c6..838c972 100644 --- a/__tests__/Action.test.ts +++ b/__tests__/Action.test.ts @@ -55,6 +55,7 @@ describe("Action", () => { applyReleaseDataMock.mockClear() applyAssetUrlsMock.mockClear() createMock.mockClear() + genReleaseNotesMock.mockClear() getMock.mockClear() listMock.mockClear() shouldSkipMock.mockClear() @@ -62,18 +63,81 @@ describe("Action", () => { uploadMock.mockClear() }) + it("creates release with generated release notes when no body provided", async () => { + const action = createAction(false, false, false, true, false, "") + + await action.perform() + + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) + expect(createMock).toHaveBeenCalledWith( + tag, + generatedReleaseBody, + commit, + discussionCategory, + createDraft, + makeLatest, + createName, + createPrerelease + ) + expect(uploadMock).not.toHaveBeenCalled() + assertOutputApplied() + assertAssetUrlsApplied({}) + }) + + it("creates release with generated release notes that override existing body", async () => { + const action = createAction(false, false, false, true, false, "existing body") + + await action.perform() + + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) + expect(createMock).toHaveBeenCalledWith( + tag, + generatedReleaseBody, + commit, + discussionCategory, + createDraft, + makeLatest, + createName, + createPrerelease + ) + expect(uploadMock).not.toHaveBeenCalled() + assertOutputApplied() + assertAssetUrlsApplied({}) + }) + + it("creates release with static body when generateReleaseNotes is false", async () => { + const action = createAction(false, false, false, false, false, "static body") + + await action.perform() + + expect(genReleaseNotesMock).not.toHaveBeenCalled() + expect(createMock).toHaveBeenCalledWith( + tag, + "static body", + commit, + discussionCategory, + createDraft, + makeLatest, + createName, + createPrerelease + ) + expect(uploadMock).not.toHaveBeenCalled() + assertOutputApplied() + assertAssetUrlsApplied({}) + }) + it("creates release but does not upload if no artifact", async () => { const action = createAction(false, false) await action.perform() + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) expect(createMock).toHaveBeenCalledWith( tag, - createBody, + generatedReleaseBody, commit, discussionCategory, createDraft, - generateReleaseNotes, makeLatest, createName, createPrerelease @@ -90,13 +154,13 @@ describe("Action", () => { await action.perform() + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) expect(createMock).toHaveBeenCalledWith( tag, - createBody, + generatedReleaseBody, commit, discussionCategory, createDraft, - generateReleaseNotes, makeLatest, createName, createPrerelease @@ -119,13 +183,13 @@ describe("Action", () => { await action.perform() + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) expect(createMock).toHaveBeenCalledWith( tag, - createBody, + generatedReleaseBody, commit, discussionCategory, createDraft, - generateReleaseNotes, makeLatest, createName, createPrerelease @@ -143,13 +207,13 @@ describe("Action", () => { await action.perform() + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) expect(createMock).toHaveBeenCalledWith( tag, - createBody, + generatedReleaseBody, commit, discussionCategory, createDraft, - generateReleaseNotes, makeLatest, createName, createPrerelease @@ -209,13 +273,13 @@ describe("Action", () => { expect(error).toEqual("error") } + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) expect(createMock).toHaveBeenCalledWith( tag, - createBody, + generatedReleaseBody, commit, discussionCategory, createDraft, - generateReleaseNotes, makeLatest, createName, createPrerelease @@ -310,13 +374,13 @@ describe("Action", () => { expect(error).toEqual(expectedError) } + expect(genReleaseNotesMock).toHaveBeenCalledWith(tag) expect(createMock).toHaveBeenCalledWith( tag, - createBody, + generatedReleaseBody, commit, discussionCategory, createDraft, - generateReleaseNotes, makeLatest, createName, createPrerelease @@ -484,7 +548,8 @@ describe("Action", () => { hasArtifact: boolean, removeArtifacts = false, generateReleaseNotes = true, - omitBodyDuringUpdate = false + omitBodyDuringUpdate = false, + createdReleaseBody = createBody ): Action { let inputArtifact: Artifact[] @@ -551,7 +616,7 @@ describe("Action", () => { artifactErrorsFailBuild: true, artifacts: inputArtifact, createdDraft: createDraft, - createdReleaseBody: createBody, + createdReleaseBody: createdReleaseBody, createdReleaseName: createName, commit, discussionCategory, diff --git a/src/Action.ts b/src/Action.ts index 0141c3c..5515422 100644 --- a/src/Action.ts +++ b/src/Action.ts @@ -141,13 +141,19 @@ export class Action { } private async createRelease(): Promise { + let releaseBody = this.inputs.createdReleaseBody + + if (this.inputs.generateReleaseNotes) { + const response = await this.releases.generateReleaseNotes(this.inputs.tag) + releaseBody = response.data.body + } + return await this.releases.create( this.inputs.tag, - this.inputs.createdReleaseBody, + releaseBody, this.inputs.commit, this.inputs.discussionCategory, this.inputs.createdDraft, - this.inputs.generateReleaseNotes, this.inputs.makeLatest, this.inputs.createdReleaseName, this.inputs.createdPrerelease diff --git a/src/Releases.ts b/src/Releases.ts index 5d5aa27..ada1640 100644 --- a/src/Releases.ts +++ b/src/Releases.ts @@ -27,7 +27,6 @@ export interface Releases { commitHash?: string, discussionCategory?: string, draft?: boolean, - generateReleaseNotes?: boolean, makeLatest?: "legacy" | "true" | "false" | undefined, name?: string, prerelease?: boolean @@ -80,7 +79,6 @@ export class GithubReleases implements Releases { commitHash?: string, discussionCategory?: string, draft?: boolean, - generateReleaseNotes?: boolean, makeLatest?: "legacy" | "true" | "false" | undefined, name?: string, prerelease?: boolean @@ -91,7 +89,6 @@ export class GithubReleases implements Releases { name: name, discussion_category_name: discussionCategory, draft: draft, - generate_release_notes: generateReleaseNotes, make_latest: makeLatest, owner: this.inputs.owner, prerelease: prerelease,