9
9
import sys
10
10
import tempfile
11
11
from pathlib import Path
12
+ from typing import Optional
12
13
13
14
SCRIPT_DIR = Path (__file__ ).resolve ().parent
14
15
CODEX_CLI_ROOT = SCRIPT_DIR .parent
18
19
# The docs are not clear on what the expected value/format of
19
20
# workflow/workflowName is:
20
21
# https://cli.github.com/manual/gh_run_list
21
- WORKFLOW_NAME = ".github/workflows/ rust-release.yml "
22
+ WORKFLOW_NAME = "rust-release"
22
23
23
24
24
25
def parse_args () -> argparse .Namespace :
@@ -79,12 +80,16 @@ def main() -> int:
79
80
stage_sources (staging_dir , version )
80
81
81
82
workflow_url = args .workflow_url
82
- resolved_head_sha : str | None = None
83
+ resolved_head_sha : Optional [ str ] = None
83
84
if not workflow_url :
84
85
if release_version :
85
- workflow = resolve_release_workflow (version )
86
- workflow_url = workflow ["url" ]
87
- resolved_head_sha = workflow .get ("headSha" )
86
+ try :
87
+ workflow = resolve_release_workflow (version )
88
+ workflow_url = workflow ["url" ]
89
+ resolved_head_sha = workflow .get ("headSha" )
90
+ except RuntimeError :
91
+ # No workflow found, proceed without it
92
+ workflow_url = None
88
93
else :
89
94
workflow_url = resolve_latest_alpha_workflow_url ()
90
95
elif release_version :
@@ -97,8 +102,7 @@ def main() -> int:
97
102
if release_version and resolved_head_sha :
98
103
print (f"should `git checkout { resolved_head_sha } `" )
99
104
100
- if not workflow_url :
101
- raise RuntimeError ("Unable to determine workflow URL for native binaries." )
105
+ # workflow_url may be None if no workflow found, install_native_binaries handles it
102
106
103
107
install_native_binaries (staging_dir , workflow_url )
104
108
@@ -124,7 +128,7 @@ def main() -> int:
124
128
return 0
125
129
126
130
127
- def prepare_staging_dir (staging_dir : Path | None ) -> tuple [Path , bool ]:
131
+ def prepare_staging_dir (staging_dir : Optional [ Path ] ) -> tuple [Path , bool ]:
128
132
if staging_dir is not None :
129
133
staging_dir = staging_dir .resolve ()
130
134
staging_dir .mkdir (parents = True , exist_ok = True )
@@ -158,7 +162,7 @@ def stage_sources(staging_dir: Path, version: str) -> None:
158
162
out .write ("\n " )
159
163
160
164
161
- def install_native_binaries (staging_dir : Path , workflow_url : str | None ) -> None :
165
+ def install_native_binaries (staging_dir : Path , workflow_url : Optional [ str ] ) -> None :
162
166
cmd = ["./scripts/install_native_deps.py" ]
163
167
if workflow_url :
164
168
cmd .extend (["--workflow-url" , workflow_url ])
@@ -174,15 +178,15 @@ def resolve_latest_alpha_workflow_url() -> str:
174
178
175
179
def determine_latest_alpha_version () -> str :
176
180
releases = list_releases ()
177
- best_key : tuple [int , int , int , int ] | None = None
178
- best_version : str | None = None
181
+ best_key : Optional [ tuple [int , int , int , int ]] = None
182
+ best_version : Optional [ str ] = None
179
183
pattern = re .compile (r"^rust-v(\d+)\.(\d+)\.(\d+)-alpha\.(\d+)$" )
180
184
for release in releases :
181
185
tag = release .get ("tag_name" , "" )
182
186
match = pattern .match (tag )
183
187
if not match :
184
188
continue
185
- key = tuple (int (match .group (i )) for i in range ( 1 , 5 ))
189
+ key = (int (match .group (1 )), int ( match . group ( 2 )), int ( match . group ( 3 )), int ( match . group ( 4 ) ))
186
190
if best_key is None or key > best_key :
187
191
best_key = key
188
192
best_version = (
@@ -214,8 +218,6 @@ def resolve_release_workflow(version: str) -> dict:
214
218
"gh" ,
215
219
"run" ,
216
220
"list" ,
217
- "--branch" ,
218
- f"rust-v{ version } " ,
219
221
"--json" ,
220
222
"workflowName,url,headSha" ,
221
223
"--workflow" ,
0 commit comments