99# ///
1010import itertools
1111import subprocess
12+ import tempfile
1213from pathlib import Path
1314from typing import Annotated
1415
2324from util import nox
2425from util import require_clean_and_up_to_date_repo
2526from util import FolderOption
26- from util import RepoMetadata
2727from util import DEMO
2828
2929
@@ -45,19 +45,15 @@ def release_demo(
4545 try :
4646 nox ("setup-release" , "--" , "MINOR" )
4747 logger .success (f"Successfully created release { demo_name } " )
48- _ensure_github_repo_set ( repo = DEMO )
48+ gh ( " repo" , "set-default" , DEMO . app_author , DEMO . app_name )
4949
5050 except subprocess .CalledProcessError as error :
5151 logger .warning (f"Failed to setup release: { error } " )
5252 _rollback_failed_release ()
5353 raise error
5454
5555 git ("push" , "-u" )
56-
57-
58- def _ensure_github_repo_set (repo : RepoMetadata ) -> None :
59- """Ensures the repo has a github repo set."""
60- gh ("repo" , "set-default" , repo .app_author , repo .app_name )
56+ _create_demo_pr ()
6157
6258
6359def _rollback_failed_release () -> None :
@@ -71,12 +67,30 @@ def _rollback_failed_release() -> None:
7167 git ("branch" , "-D" , starting_demo_branch )
7268
7369
74- def _create_demo_pr (version : str ) -> None :
70+ def _create_demo_pr () -> None :
7571 """Creates a pull request to merge the demo's feature branch into ."""
72+ current_branch : str = get_current_branch ()
73+ if not current_branch .startswith ("release/" ):
74+ raise ValueError ("Not in a release branch, canceling PR creation." )
75+ title : str = current_branch .capitalize ()
76+ release_notes : str = __get_demo_release_notes ()
77+
7678 pr_kwargs : dict [str , str ] = {
77- "--title" : f"Release/{ version } "
79+ "--title" : title ,
80+ "--body" : release_notes ,
81+ "--assignee" : "@me" ,
82+ "--base" : "main" ,
7883 }
79- publish_release_commands : list [list [str ]] = [
80- ["gh" , "pr" , "create" , * itertools .chain (pr_kwargs .items ())],
81- ]
84+ command : list [str ] = ["gh" , "pr" , "create" , * itertools .chain (pr_kwargs .items ())]
85+ subprocess .run (command , check = True )
86+
87+
88+ def __get_demo_release_notes () -> str :
89+ """Returns the release notes for the demo."""
90+ temp_folder : Path = Path (tempfile .mkdtemp ()).resolve ()
91+ notes_path : Path = temp_folder / "body.md"
92+ command : list [str ] = ["uv" , "run" , "./scripts/get-release-notes.py" , notes_path ]
93+ subprocess .run (command , check = True )
8294
95+ notes_contents : str = notes_path .read_text ()
96+ return notes_contents
0 commit comments