Compare commits

...

3 Commits

Author SHA1 Message Date
dependabot[bot]
a1e479c352 chore(deps): bump the npm group across 1 directory with 5 updates
Bumps the npm group with 4 updates in the / directory: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node), [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8), [esbuild](https://github.com/evanw/esbuild) and [typescript](https://github.com/microsoft/TypeScript).


Updates `@types/node` from 20.19.37 to 20.19.39
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@vitest/coverage-v8` from 4.1.0 to 4.1.2
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.2/packages/coverage-v8)

Updates `esbuild` from 0.27.4 to 0.28.0
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.27.4...v0.28.0)

Updates `typescript` from 5.9.3 to 6.0.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.9.3...v6.0.2)

Updates `vitest` from 4.1.0 to 4.1.2
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.2/packages/vitest)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 20.19.39
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
- dependency-name: esbuild
  dependency-version: 0.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm
- dependency-name: typescript
  dependency-version: 6.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm
- dependency-name: vitest
  dependency-version: 4.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 22:43:21 +00:00
Rui Chen
153bb8e044 release 2.6.1
Signed-off-by: Rui Chen <rui@chenrui.dev>
2026-03-15 20:57:00 -04:00
Rui Chen
569deb874d fix: preserve discussion category when publishing releases (#765)
Signed-off-by: Rui Chen <rui@chenrui.dev>
2026-03-15 20:54:29 -04:00
6 changed files with 401 additions and 292 deletions

View File

@@ -1,3 +1,17 @@
## 2.6.1
`2.6.1` is a patch release focused on restoring linked discussion thread creation when
`discussion_category_name` is set. It fixes `#764`, where the draft-first publish flow
stopped carrying the discussion category through the final publish step.
If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible.
## What's Changed
### Bug fixes 🐛
* fix: preserve discussion category on publish by @chenrui333 in https://github.com/softprops/action-gh-release/pull/765
## 2.6.0
`2.6.0` is a minor release centered on `previous_tag` support for `generate_release_notes`,

View File

@@ -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', () => {
@@ -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 {

4
dist/index.js vendored

File diff suppressed because one or more lines are too long

564
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "action-gh-release",
"version": "2.6.0",
"version": "2.6.1",
"private": true,
"description": "GitHub Action for creating GitHub Releases",
"main": "lib/main.js",
@@ -32,12 +32,12 @@
"devDependencies": {
"@types/glob": "^9.0.0",
"@types/mime-types": "^3.0.1",
"@types/node": "^20.19.37",
"@vitest/coverage-v8": "^4.1.0",
"esbuild": "^0.27.3",
"@types/node": "^20.19.39",
"@vitest/coverage-v8": "^4.1.2",
"esbuild": "^0.28.0",
"prettier": "3.8.1",
"ts-node": "^10.9.2",
"typescript": "^5.9.3",
"typescript": "^6.0.2",
"typescript-formatter": "^7.2.2",
"vitest": "^4.0.4"
}

View File

@@ -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[] }>;
@@ -181,6 +182,7 @@ 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,
@@ -188,6 +190,7 @@ export class GitHubReleaser implements Releaser {
release_id: params.release_id,
draft: false,
make_latest: params.make_latest,
discussion_category_name: params.discussion_category_name,
});
}
@@ -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;