From 1b7620a4f839b2bde06b95133313352b64788ec1 Mon Sep 17 00:00:00 2001 From: Blue Date: Thu, 26 Jun 2025 11:54:19 -0700 Subject: [PATCH] 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 --- .pipelines/flight-stage.yml | 2 +- tools/devops/create-release.py | 55 ++++++++++++++++++---------------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/.pipelines/flight-stage.yml b/.pipelines/flight-stage.yml index 1bf1a30..5b5b8bb 100644 --- a/.pipelines/flight-stage.yml +++ b/.pipelines/flight-stage.yml @@ -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: diff --git a/tools/devops/create-release.py b/tools/devops/create-release.py index 0fe9e59..cc3a467 100644 --- a/tools/devops/create-release.py +++ b/tools/devops/create-release.py @@ -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()