Skip to content

Commit c79d4c6

Browse files
committed
fix: preserve discussion category when publishing releases
Signed-off-by: Rui Chen <rui@chenrui.dev>
1 parent 26e8ad2 commit c79d4c6

File tree

3 files changed

+103
-2
lines changed

3 files changed

+103
-2
lines changed

__tests__/github.test.ts

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,64 @@ describe('github', () => {
226226
);
227227
expect(createRelease.mock.calls[0][0]).not.toHaveProperty('previous_tag_name');
228228
});
229+
230+
it('passes discussion_category_name when finalizing a release', async () => {
231+
const updateRelease = vi.fn(async () => ({
232+
data: {
233+
id: 1,
234+
upload_url: 'test',
235+
html_url: 'test',
236+
tag_name: 'v1.0.0',
237+
name: 'v1.0.0',
238+
body: 'test',
239+
target_commitish: 'main',
240+
draft: false,
241+
prerelease: false,
242+
assets: [],
243+
},
244+
}));
245+
246+
const releaser = new GitHubReleaser({
247+
rest: {
248+
repos: {
249+
generateReleaseNotes: vi.fn(),
250+
createRelease: vi.fn(),
251+
updateRelease,
252+
getReleaseByTag: vi.fn(),
253+
listReleaseAssets: vi.fn(),
254+
deleteReleaseAsset: vi.fn(),
255+
deleteRelease: vi.fn(),
256+
updateReleaseAsset: vi.fn(),
257+
listReleases: {
258+
endpoint: {
259+
merge: vi.fn(),
260+
},
261+
},
262+
},
263+
},
264+
paginate: {
265+
iterator: vi.fn(),
266+
},
267+
request: vi.fn(),
268+
} as any);
269+
270+
await releaser.finalizeRelease({
271+
owner: 'owner',
272+
repo: 'repo',
273+
release_id: 1,
274+
make_latest: 'legacy',
275+
discussion_category_name: 'Announcements',
276+
});
277+
278+
expect(updateRelease).toHaveBeenCalledWith({
279+
owner: 'owner',
280+
repo: 'repo',
281+
release_id: 1,
282+
draft: false,
283+
make_latest: 'legacy',
284+
discussion_category_name: 'Announcements',
285+
});
286+
});
229287
});
230288

231289
describe('finalizeRelease input_draft behavior', () => {
@@ -309,10 +367,49 @@ describe('github', () => {
309367
owner: 'owner',
310368
repo: 'repo',
311369
release_id: release.id,
370+
make_latest: undefined,
371+
discussion_category_name: undefined,
312372
});
313373
}
314374
});
315375

376+
it('passes discussion_category_name through when finalizing a draft release', async () => {
377+
const finalizeReleaseSpy = vi.fn(async () => ({ data: finalizedRelease }));
378+
379+
const releaser: Releaser = {
380+
getReleaseByTag: () => Promise.reject('Not implemented'),
381+
createRelease: () => Promise.reject('Not implemented'),
382+
updateRelease: () => Promise.reject('Not implemented'),
383+
finalizeRelease: finalizeReleaseSpy,
384+
allReleases: async function* () {
385+
throw new Error('Not implemented');
386+
},
387+
listReleaseAssets: () => Promise.reject('Not implemented'),
388+
deleteReleaseAsset: () => Promise.reject('Not implemented'),
389+
deleteRelease: () => Promise.reject('Not implemented'),
390+
updateReleaseAsset: () => Promise.reject('Not implemented'),
391+
uploadReleaseAsset: () => Promise.reject('Not implemented'),
392+
};
393+
394+
await finalizeRelease(
395+
{
396+
...config,
397+
input_draft: false,
398+
input_discussion_category_name: 'Announcements',
399+
},
400+
releaser,
401+
draftRelease,
402+
);
403+
404+
expect(finalizeReleaseSpy).toHaveBeenCalledWith({
405+
owner: 'owner',
406+
repo: 'repo',
407+
release_id: draftRelease.id,
408+
make_latest: undefined,
409+
discussion_category_name: 'Announcements',
410+
});
411+
});
412+
316413
it('deletes a newly created draft when tag creation is blocked by repository rules', async () => {
317414
const finalizeReleaseSpy = vi.fn(async () => {
318415
throw {

dist/index.js

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

src/github.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export interface Releaser {
7171
repo: string;
7272
release_id: number;
7373
make_latest: 'true' | 'false' | 'legacy' | undefined;
74+
discussion_category_name: string | undefined;
7475
}): Promise<{ data: Release }>;
7576

7677
allReleases(params: { owner: string; repo: string }): AsyncIterable<{ data: Release[] }>;
@@ -181,13 +182,15 @@ export class GitHubReleaser implements Releaser {
181182
repo: string;
182183
release_id: number;
183184
make_latest: 'true' | 'false' | 'legacy' | undefined;
185+
discussion_category_name: string | undefined;
184186
}) {
185187
return await this.github.rest.repos.updateRelease({
186188
owner: params.owner,
187189
repo: params.repo,
188190
release_id: params.release_id,
189191
draft: false,
190192
make_latest: params.make_latest,
193+
discussion_category_name: params.discussion_category_name,
191194
});
192195
}
193196

@@ -641,6 +644,7 @@ export const finalizeRelease = async (
641644
repo,
642645
release_id: release.id,
643646
make_latest: config.input_make_latest,
647+
discussion_category_name: config.input_discussion_category_name,
644648
});
645649

646650
return data;

0 commit comments

Comments
 (0)