Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions __tests__/github.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,64 @@ describe('github', () => {
);
expect(createRelease.mock.calls[0][0]).not.toHaveProperty('previous_tag_name');
});

it('passes discussion_category_name when finalizing a release', async () => {
const updateRelease = vi.fn(async () => ({
data: {
id: 1,
upload_url: 'test',
html_url: 'test',
tag_name: 'v1.0.0',
name: 'v1.0.0',
body: 'test',
target_commitish: 'main',
draft: false,
prerelease: false,
assets: [],
},
}));

const releaser = new GitHubReleaser({
rest: {
repos: {
generateReleaseNotes: vi.fn(),
createRelease: vi.fn(),
updateRelease,
getReleaseByTag: vi.fn(),
listReleaseAssets: vi.fn(),
deleteReleaseAsset: vi.fn(),
deleteRelease: vi.fn(),
updateReleaseAsset: vi.fn(),
listReleases: {
endpoint: {
merge: vi.fn(),
},
},
},
},
paginate: {
iterator: vi.fn(),
},
request: vi.fn(),
} as any);

await releaser.finalizeRelease({
owner: 'owner',
repo: 'repo',
release_id: 1,
make_latest: 'legacy',
discussion_category_name: 'Announcements',
});

expect(updateRelease).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repo',
release_id: 1,
draft: false,
make_latest: 'legacy',
discussion_category_name: 'Announcements',
});
});
});

describe('finalizeRelease input_draft behavior', () => {
Expand Down Expand Up @@ -309,10 +367,49 @@ describe('github', () => {
owner: 'owner',
repo: 'repo',
release_id: release.id,
make_latest: undefined,
discussion_category_name: undefined,
});
}
});

it('passes discussion_category_name through when finalizing a draft release', async () => {
const finalizeReleaseSpy = vi.fn(async () => ({ data: finalizedRelease }));

const releaser: Releaser = {
getReleaseByTag: () => Promise.reject('Not implemented'),
createRelease: () => Promise.reject('Not implemented'),
updateRelease: () => Promise.reject('Not implemented'),
finalizeRelease: finalizeReleaseSpy,
allReleases: async function* () {
throw new Error('Not implemented');
},
listReleaseAssets: () => Promise.reject('Not implemented'),
deleteReleaseAsset: () => Promise.reject('Not implemented'),
deleteRelease: () => Promise.reject('Not implemented'),
updateReleaseAsset: () => Promise.reject('Not implemented'),
uploadReleaseAsset: () => Promise.reject('Not implemented'),
};

await finalizeRelease(
{
...config,
input_draft: false,
input_discussion_category_name: 'Announcements',
},
releaser,
draftRelease,
);

expect(finalizeReleaseSpy).toHaveBeenCalledWith({
owner: 'owner',
repo: 'repo',
release_id: draftRelease.id,
make_latest: undefined,
discussion_category_name: 'Announcements',
});
});

it('deletes a newly created draft when tag creation is blocked by repository rules', async () => {
const finalizeReleaseSpy = vi.fn(async () => {
throw {
Expand Down
4 changes: 2 additions & 2 deletions dist/index.js

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions src/github.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ export interface Releaser {
repo: string;
release_id: number;
make_latest: 'true' | 'false' | 'legacy' | undefined;
discussion_category_name: string | undefined;
}): Promise<{ data: Release }>;

allReleases(params: { owner: string; repo: string }): AsyncIterable<{ data: Release[] }>;
Expand Down Expand Up @@ -181,13 +182,15 @@ export class GitHubReleaser implements Releaser {
repo: string;
release_id: number;
make_latest: 'true' | 'false' | 'legacy' | undefined;
discussion_category_name: string | undefined;
}) {
return await this.github.rest.repos.updateRelease({
owner: params.owner,
repo: params.repo,
release_id: params.release_id,
draft: false,
make_latest: params.make_latest,
discussion_category_name: params.discussion_category_name,
});
}

Expand Down Expand Up @@ -641,6 +644,7 @@ export const finalizeRelease = async (
repo,
release_id: release.id,
make_latest: config.input_make_latest,
discussion_category_name: config.input_discussion_category_name,
});

return data;
Expand Down