Standardize on separate call to generate release notes

This commit is contained in:
Nick Cipollo
2025-08-21 20:31:21 -04:00
parent 20ce211d17
commit bf8a34312f
3 changed files with 87 additions and 19 deletions
+79 -14
View File
@@ -55,6 +55,7 @@ describe("Action", () => {
applyReleaseDataMock.mockClear() applyReleaseDataMock.mockClear()
applyAssetUrlsMock.mockClear() applyAssetUrlsMock.mockClear()
createMock.mockClear() createMock.mockClear()
genReleaseNotesMock.mockClear()
getMock.mockClear() getMock.mockClear()
listMock.mockClear() listMock.mockClear()
shouldSkipMock.mockClear() shouldSkipMock.mockClear()
@@ -62,18 +63,81 @@ describe("Action", () => {
uploadMock.mockClear() 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 () => { it("creates release but does not upload if no artifact", async () => {
const action = createAction(false, false) const action = createAction(false, false)
await action.perform() await action.perform()
expect(genReleaseNotesMock).toHaveBeenCalledWith(tag)
expect(createMock).toHaveBeenCalledWith( expect(createMock).toHaveBeenCalledWith(
tag, tag,
createBody, generatedReleaseBody,
commit, commit,
discussionCategory, discussionCategory,
createDraft, createDraft,
generateReleaseNotes,
makeLatest, makeLatest,
createName, createName,
createPrerelease createPrerelease
@@ -90,13 +154,13 @@ describe("Action", () => {
await action.perform() await action.perform()
expect(genReleaseNotesMock).toHaveBeenCalledWith(tag)
expect(createMock).toHaveBeenCalledWith( expect(createMock).toHaveBeenCalledWith(
tag, tag,
createBody, generatedReleaseBody,
commit, commit,
discussionCategory, discussionCategory,
createDraft, createDraft,
generateReleaseNotes,
makeLatest, makeLatest,
createName, createName,
createPrerelease createPrerelease
@@ -119,13 +183,13 @@ describe("Action", () => {
await action.perform() await action.perform()
expect(genReleaseNotesMock).toHaveBeenCalledWith(tag)
expect(createMock).toHaveBeenCalledWith( expect(createMock).toHaveBeenCalledWith(
tag, tag,
createBody, generatedReleaseBody,
commit, commit,
discussionCategory, discussionCategory,
createDraft, createDraft,
generateReleaseNotes,
makeLatest, makeLatest,
createName, createName,
createPrerelease createPrerelease
@@ -143,13 +207,13 @@ describe("Action", () => {
await action.perform() await action.perform()
expect(genReleaseNotesMock).toHaveBeenCalledWith(tag)
expect(createMock).toHaveBeenCalledWith( expect(createMock).toHaveBeenCalledWith(
tag, tag,
createBody, generatedReleaseBody,
commit, commit,
discussionCategory, discussionCategory,
createDraft, createDraft,
generateReleaseNotes,
makeLatest, makeLatest,
createName, createName,
createPrerelease createPrerelease
@@ -209,13 +273,13 @@ describe("Action", () => {
expect(error).toEqual("error") expect(error).toEqual("error")
} }
expect(genReleaseNotesMock).toHaveBeenCalledWith(tag)
expect(createMock).toHaveBeenCalledWith( expect(createMock).toHaveBeenCalledWith(
tag, tag,
createBody, generatedReleaseBody,
commit, commit,
discussionCategory, discussionCategory,
createDraft, createDraft,
generateReleaseNotes,
makeLatest, makeLatest,
createName, createName,
createPrerelease createPrerelease
@@ -310,13 +374,13 @@ describe("Action", () => {
expect(error).toEqual(expectedError) expect(error).toEqual(expectedError)
} }
expect(genReleaseNotesMock).toHaveBeenCalledWith(tag)
expect(createMock).toHaveBeenCalledWith( expect(createMock).toHaveBeenCalledWith(
tag, tag,
createBody, generatedReleaseBody,
commit, commit,
discussionCategory, discussionCategory,
createDraft, createDraft,
generateReleaseNotes,
makeLatest, makeLatest,
createName, createName,
createPrerelease createPrerelease
@@ -484,7 +548,8 @@ describe("Action", () => {
hasArtifact: boolean, hasArtifact: boolean,
removeArtifacts = false, removeArtifacts = false,
generateReleaseNotes = true, generateReleaseNotes = true,
omitBodyDuringUpdate = false omitBodyDuringUpdate = false,
createdReleaseBody = createBody
): Action { ): Action {
let inputArtifact: Artifact[] let inputArtifact: Artifact[]
@@ -551,7 +616,7 @@ describe("Action", () => {
artifactErrorsFailBuild: true, artifactErrorsFailBuild: true,
artifacts: inputArtifact, artifacts: inputArtifact,
createdDraft: createDraft, createdDraft: createDraft,
createdReleaseBody: createBody, createdReleaseBody: createdReleaseBody,
createdReleaseName: createName, createdReleaseName: createName,
commit, commit,
discussionCategory, discussionCategory,
+8 -2
View File
@@ -141,13 +141,19 @@ export class Action {
} }
private async createRelease(): Promise<CreateReleaseResponse> { private async createRelease(): Promise<CreateReleaseResponse> {
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( return await this.releases.create(
this.inputs.tag, this.inputs.tag,
this.inputs.createdReleaseBody, releaseBody,
this.inputs.commit, this.inputs.commit,
this.inputs.discussionCategory, this.inputs.discussionCategory,
this.inputs.createdDraft, this.inputs.createdDraft,
this.inputs.generateReleaseNotes,
this.inputs.makeLatest, this.inputs.makeLatest,
this.inputs.createdReleaseName, this.inputs.createdReleaseName,
this.inputs.createdPrerelease this.inputs.createdPrerelease
-3
View File
@@ -27,7 +27,6 @@ export interface Releases {
commitHash?: string, commitHash?: string,
discussionCategory?: string, discussionCategory?: string,
draft?: boolean, draft?: boolean,
generateReleaseNotes?: boolean,
makeLatest?: "legacy" | "true" | "false" | undefined, makeLatest?: "legacy" | "true" | "false" | undefined,
name?: string, name?: string,
prerelease?: boolean prerelease?: boolean
@@ -80,7 +79,6 @@ export class GithubReleases implements Releases {
commitHash?: string, commitHash?: string,
discussionCategory?: string, discussionCategory?: string,
draft?: boolean, draft?: boolean,
generateReleaseNotes?: boolean,
makeLatest?: "legacy" | "true" | "false" | undefined, makeLatest?: "legacy" | "true" | "false" | undefined,
name?: string, name?: string,
prerelease?: boolean prerelease?: boolean
@@ -91,7 +89,6 @@ export class GithubReleases implements Releases {
name: name, name: name,
discussion_category_name: discussionCategory, discussion_category_name: discussionCategory,
draft: draft, draft: draft,
generate_release_notes: generateReleaseNotes,
make_latest: makeLatest, make_latest: makeLatest,
owner: this.inputs.owner, owner: this.inputs.owner,
prerelease: prerelease, prerelease: prerelease,