Use the github generated release notes by default in create-release.py (#13161)

* Use the github generated release notes by default in create-release.py

* Merge
This commit is contained in:
Blue 2025-06-26 11:54:19 -07:00 committed by GitHub
parent 17319988a6
commit 1b7620a4f8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 26 deletions

View File

@ -113,7 +113,7 @@ stages:
# Create a draft github release
- powershell: |
pip install --user -r tools/devops/requirements.txt
python tools/devops/create-release.py '${{ parameters.packageVersion }}' drop\bundle\Microsoft.WSL_${{ parameters.packageVersion }}.0_x64_ARM64.msixbundle drop\bundle\wsl.${{ parameters.packageVersion }}.0.arm64.msi drop\bundle\wsl.${{ parameters.packageVersion }}.0.x64.msi --no-fetch --github-token "$env:token" ${{ iif(parameters.publishPackage, '--publish', '--use-current-ref') }}
python tools/devops/create-release.py '${{ parameters.packageVersion }}' drop\bundle\Microsoft.WSL_${{ parameters.packageVersion }}.0_x64_ARM64.msixbundle drop\bundle\wsl.${{ parameters.packageVersion }}.0.arm64.msi drop\bundle\wsl.${{ parameters.packageVersion }}.0.x64.msi --no-fetch --github-token "$env:token" ${{ iif(parameters.publishPackage, '--publish --auto-release-notes', '--use-current-ref') }}
displayName: Create Github release
env:

View File

@ -19,7 +19,8 @@ from urllib.parse import urlparse
@click.option('--no-fetch', is_flag=True, default=False)
@click.option('--github-token', default=None)
@click.option('--use-current-ref', is_flag=True, default=False)
def main(version: str, previous: str, max_message_lines: int, publish: bool, assets: list, no_fetch: bool, github_token: str, use_current_ref: bool):
@click.option('--auto-release-notes', is_flag=True, default=False)
def main(version: str, previous: str, max_message_lines: int, publish: bool, assets: list, no_fetch: bool, github_token: str, use_current_ref: bool, auto_release_notes: bool):
if publish:
if assets is None:
raise RuntimeError('--publish requires at least one asset')
@ -38,36 +39,38 @@ def main(version: str, previous: str, max_message_lines: int, publish: bool, ass
print(f'Creating release notes for: {previous} -> {current_ref}', file=sys.stderr)
changes = ''
for e in get_change_list(None if use_current_ref else version, previous, not no_fetch):
# Detect attached github issues
issues = find_github_issues(e.message)
pr_description, pr_number = get_github_pr_message(github_token, e.message)
if pr_description is not None:
issues = issues.union(find_github_issues(pr_description))
if not auto_release_notes:
for e in get_change_list(None if use_current_ref else version, previous, not no_fetch):
if github_token is not None:
issues = filter_github_issues(issues, github_token)
# Detect attached github issues
issues = find_github_issues(e.message)
pr_description, pr_number = get_github_pr_message(github_token, e.message)
if pr_description is not None:
issues = issues.union(find_github_issues(pr_description))
if len(issues) > 1:
print(f'WARNING: found more than 1 github issues in message: {message}. Issues: {issues}', file=sys.stderr)
if github_token is not None:
issues = filter_github_issues(issues, github_token)
message = e.message[:-1] if e.message.endswith('\n') else e.message
if len(issues) > 1:
print(f'WARNING: found more than 1 github issues in message: {message}. Issues: {issues}', file=sys.stderr)
# Shrink the message if it's too long
lines = message.split('\n')
message = '\n'.join([e for e in lines if e][:max_message_lines])
message = e.message[:-1] if e.message.endswith('\n') else e.message
# Get rid of the github PR #
if pr_number is not None:
message = message.replace(f'(#{pr_number})', '')
# Shrink the message if it's too long
lines = message.split('\n')
message = '\n'.join([e for e in lines if e][:max_message_lines])
# Append to the changes (chr(92) == '\n')
message = f'{message.replace(chr(92), "")} (solves {",".join(issues)})' if issues else message
changes += f'* {message}\n'
# Get rid of the github PR #
if pr_number is not None:
message = message.replace(f'(#{pr_number})', '')
# Append to the changes (chr(92) == '\n')
message = f'{message.replace(chr(92), "")} (solves {",".join(issues)})' if issues else message
changes += f'* {message}\n'
if publish:
publish_release(version, changes, assets, github_token)
publish_release(version, changes, assets, auto_release_notes, github_token)
else:
print(f'\n{changes}')
@ -172,7 +175,7 @@ def get_change_list(version: str, previous: str, fetch: bool) -> list:
@backoff.on_exception(backoff.expo, (requests.exceptions.Timeout, requests.exceptions.ConnectionError, requests.exceptions.RequestException), max_time=600)
def publish_release(version: str, changes: str, assets: list, token: str):
def publish_release(version: str, changes: str, assets: list, auto_release_notes: bool, token: str):
print(f'Creating private Github release for: {version}', file=sys.stderr)
# First create the release
@ -183,10 +186,12 @@ def publish_release(version: str, changes: str, assets: list, token: str):
content = {'tag_name': version,
'target_commitish': 'master',
'name': version,
'body': changes,
"draft":True ,
'prerelease':True ,
'generate_release_notes': False}
'generate_release_notes': auto_release_notes}
if changes:
content['body'] = changes
response = requests.post('https://api.github.com/repos/microsoft/wsl/releases', json=content, headers=headers)
response.raise_for_status()