GitHubRelease: Add generate_release_notes support (fixes #21956)#21965
Draft
GitHubRelease: Add generate_release_notes support (fixes #21956)#21965
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsoft/azure-pipelines-tasks/sessions/58dec70b-ec09-460f-a72d-dbd932f4d3b6 Co-authored-by: sanjuyadav24 <185911972+sanjuyadav24@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsoft/azure-pipelines-tasks/sessions/58dec70b-ec09-460f-a72d-dbd932f4d3b6 Co-authored-by: sanjuyadav24 <185911972+sanjuyadav24@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix GitHub issue for GitHubRelease task enhancement
GitHubRelease: Add generate_release_notes support (fixes #21956)
Apr 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GitHub's Create a Release API supports a
generate_release_notesfield that auto-generates release notes from commits and merged PRs.GitHubRelease@1lacked a way to use this feature.Changes
New input option
generateReleaseNotesas a third option forreleaseNotesSource(filePath|inline|generateReleaseNotes)bodytext is authored by the task; GitHub generates the release notes server-sideaddChangeLogis also enabled, the computed changelog is still appended to the body (combined with GitHub's auto-generated notes)API layer
Release.createRelease/Release.editRelease: newgenerateReleaseNotes: boolean = falseparameter → sent as"generate_release_notes"in the request bodyAction.createReleaseAction/Action.editReleaseAction: propagate the flagmain.ts: derives the flag fromreleaseNotesSourceinput and passes it throughValidation / strings
ReleaseNotesSelectionModeclass exported (was private) with newgenerateReleaseNotesconstantvalidateReleaseNotesSourceaccepts the new valueInvalidReleaseNotesSourceerror message updated intask.json,task.loc.json, andresources.resjsonUsage in YAML
Context
Implements GitHub Issue #21956 — request to expose GitHub's
generate_release_notesAPI field inGitHubRelease@1.Task Name
GitHubReleaseV1
Description
Adds a new
generateReleaseNotesoption for thereleaseNotesSourceinput. When selected, the task setsgenerate_release_notes: truein the GitHub Releases API request, delegating release notes generation to GitHub rather than requiring a file or inline text.Risk Assessment Low
Purely additive — new enum value with default
falseat every call site. ExistingfilePathandinlinemodes are unchanged. Backward compatible.Change Behind Feature Flag No
Opt-in only: requires explicitly setting
releaseNotesSource: generateReleaseNotes. No behavioral change for existing pipelines.Tech Design / Approach
generateReleaseNotes: boolean = falsedefault parameter added tocreateRelease/editReleaseso all existing call sites continue to work without modification.ReleaseNotesSelectionModeexported to allow reuse inmain.tswithout string literals.make_latestpattern.Documentation Changes Required No
Help text updated inline in
task.jsonandresources.resjson.Unit Tests Added or Updated Yes
CreateReleaseGenerateNotesL0Tests.ts: verifiescreateReleaseActionis invoked withgenerateReleaseNotes=truewhenreleaseNotesSource = generateReleaseNotesUtilityL0Tests.ts: addedvalidateGetReleaseNoteGenerateMode; fixed existing test to use explicit"inline"mode (previously relied on implicit else-branch catch-all that no longer exists)L0.ts/TestStrings.ts: updated to cover the new test casesAdditional Testing Performed
TypeScript type-checked (
tsc --noEmit --skipLibCheck) — no new errors introduced by these changes.Logging Added/Updated No
Telemetry Added/Updated No
Rollback Scenario and Process Yes
Version bumped (270.0 → 270.1). Roll back by redeploying the previous version; existing pipelines not using
generateReleaseNotesare unaffected.Dependency Impact Assessed and Regression Tested Yes
No new dependencies. All existing action paths (
filePath,inline,delete) use the unchanged defaultgenerateReleaseNotes=false.Checklist
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
03nvsblobprodwcus014.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)055vsblobprodwcus02.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)1g1vsblobprodwcus01.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)3eavsblobprodwcus03.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)3zgvsblobprodwcus024.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)40qvsblobprodwcus022.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)4fdvsblobprodwcus012.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)5tbvsblobprodwcus06.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)61cvsblobprodwcus010.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)73dvsblobprodwcus07.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)8usvsblobprodwcus011.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)9owvsblobprodwcus020.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)arpvsblobprodwcus017.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)crcvsblobprodwcus021.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)fslvsblobprodwcus015.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)grnvsblobprodwcus04.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)k92vsblobprodwcus08.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)mnzvsblobprodwcus05.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)pl8vsblobprodwcus09.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)uubvsblobprodwcus018.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)vwmvsblobprodwcus016.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)whatsprintis.it/usr/bin/curl curl -s REDACTED(dns block)x4wvsblobprodwcus013.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)xg1vsblobprodwcus019.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)xlkvsblobprodwcus023.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --prefer-offline(dns block)/home/REDACTED/work/_temp/ghcca-node/node/bin/node node /home/REDACTED/work/_temp/ghcca-node/node/bin/npm install --cache /home/REDACTED/.npm/_cacache TOKEN"; }; f get TOKEN"; }; f get /home/REDACTED/.cargo/bin/git(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
Work item: AB#2375632
Created via Azure DevOps