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
Blue committed
Jun 26, 2025 at 11:54 UTC
1b7620a4f839b2bde06b95133313352b64788ec1
2 files changed
+31
-26
.pipelines/flight-stage.yml
+1
-1
@@ -113,7 +113,7 @@ stages:
113
# Create a draft github release
114
- powershell: |
115
pip install --user -r tools/devops/requirements.txt
116
- 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') }}
116
+ 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') }}
117
118
displayName: Create Github release
119
env:
tools/devops/create-release.py
+30
-25
@@ -19,7 +19,8 @@ from urllib.parse import urlparse
19
@click.option('--no-fetch', is_flag=True, default=False)
20
@click.option('--github-token', default=None)
21
@click.option('--use-current-ref', is_flag=True, default=False)
22
-def main(version: str, previous: str, max_message_lines: int, publish: bool, assets: list, no_fetch: bool, github_token: str, use_current_ref: bool):
22
+@click.option('--auto-release-notes', is_flag=True, default=False)
23
+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):
24
if publish:
25
if assets is None:
26
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
39
print(f'Creating release notes for: {previous} -> {current_ref}', file=sys.stderr)
40
41
changes = ''
41
- for e in get_change_list(None if use_current_ref else version, previous, not no_fetch):
42
43
- # Detect attached github issues
44
- issues = find_github_issues(e.message)
45
- pr_description, pr_number = get_github_pr_message(github_token, e.message)
46
- if pr_description is not None:
47
- issues = issues.union(find_github_issues(pr_description))
43
+ if not auto_release_notes:
44
+ for e in get_change_list(None if use_current_ref else version, previous, not no_fetch):
45
49
- if github_token is not None:
50
- issues = filter_github_issues(issues, github_token)
46
+ # Detect attached github issues
47
+ issues = find_github_issues(e.message)
48
+ pr_description, pr_number = get_github_pr_message(github_token, e.message)
49
+ if pr_description is not None:
50
+ issues = issues.union(find_github_issues(pr_description))
51
52
- if len(issues) > 1:
53
- print(f'WARNING: found more than 1 github issues in message: {message}. Issues: {issues}', file=sys.stderr)
52
+ if github_token is not None:
53
+ issues = filter_github_issues(issues, github_token)
54
55
- message = e.message[:-1] if e.message.endswith('\n') else e.message
55
+ if len(issues) > 1:
56
+ print(f'WARNING: found more than 1 github issues in message: {message}. Issues: {issues}', file=sys.stderr)
57
57
- # Shrink the message if it's too long
58
- lines = message.split('\n')
59
- message = '\n'.join([e for e in lines if e][:max_message_lines])
58
+ message = e.message[:-1] if e.message.endswith('\n') else e.message
59
61
- # Get rid of the github PR #
62
- if pr_number is not None:
63
- message = message.replace(f'(#{pr_number})', '')
60
+ # Shrink the message if it's too long
61
+ lines = message.split('\n')
62
+ message = '\n'.join([e for e in lines if e][:max_message_lines])
63
65
- # Append to the changes (chr(92) == '\n')
66
- message = f'{message.replace(chr(92), "")} (solves {",".join(issues)})' if issues else message
67
- changes += f'* {message}\n'
64
+ # Get rid of the github PR #
65
+ if pr_number is not None:
66
+ message = message.replace(f'(#{pr_number})', '')
67
+
68
+ # Append to the changes (chr(92) == '\n')
69
+ message = f'{message.replace(chr(92), "")} (solves {",".join(issues)})' if issues else message
70
+ changes += f'* {message}\n'
71
72
if publish:
70
- publish_release(version, changes, assets, github_token)
73
+ publish_release(version, changes, assets, auto_release_notes, github_token)
74
else:
75
print(f'\n{changes}')
76
@@ -172,7 +175,7 @@ def get_change_list(version: str, previous: str, fetch: bool) -> list:
175
176
177
@backoff.on_exception(backoff.expo, (requests.exceptions.Timeout, requests.exceptions.ConnectionError, requests.exceptions.RequestException), max_time=600)
175
-def publish_release(version: str, changes: str, assets: list, token: str):
178
+def publish_release(version: str, changes: str, assets: list, auto_release_notes: bool, token: str):
179
print(f'Creating private Github release for: {version}', file=sys.stderr)
180
181
# First create the release
@@ -183,10 +186,12 @@ def publish_release(version: str, changes: str, assets: list, token: str):
186
content = {'tag_name': version,
187
'target_commitish': 'master',
188
'name': version,
186
- 'body': changes,
189
"draft":True ,
190
'prerelease':True ,
189
- 'generate_release_notes': False}
191
+ 'generate_release_notes': auto_release_notes}
192
+
193
+ if changes:
194
+ content['body'] = changes
195
196
response = requests.post('https://api.github.com/repos/microsoft/wsl/releases', json=content, headers=headers)
197
response.raise_for_status()