11from __future__ import annotations
22
3+ import enum
34import os
45import shutil
56import subprocess
@@ -116,6 +117,7 @@ async def setup_ty(
116117 ty_dir : Path ,
117118 revision_like : RevisionLike ,
118119 * ,
120+ build_mode : RustBuildMode ,
119121 repo : str | None ,
120122) -> Path :
121123 ty_dir .mkdir (parents = True , exist_ok = True )
@@ -131,7 +133,7 @@ async def setup_ty(
131133
132134 try :
133135 await run (
134- ["cargo" , "build" , "--bin" , "ty" , "--release" ],
136+ ["cargo" , "build" , "--bin" , "ty" , * build_mode . flags () ],
135137 cwd = repo_dir ,
136138 env = env ,
137139 output = True ,
@@ -142,7 +144,7 @@ async def setup_ty(
142144 print (e .stderr , file = sys .stderr )
143145 raise e
144146
145- ty_exe = cargo_target_dir / "release" / "ty"
147+ ty_exe = cargo_target_dir / build_mode . artifact_directory () / "ty"
146148 assert ty_exe .exists ()
147149 return ty_exe
148150
@@ -151,6 +153,7 @@ async def setup_pyrefly(
151153 pyrefly_dir : Path ,
152154 revision_like : RevisionLike ,
153155 * ,
156+ build_mode : RustBuildMode ,
154157 repo : str | None ,
155158 typeshed_dir : Path | None ,
156159) -> Path :
@@ -169,7 +172,7 @@ async def setup_pyrefly(
169172 if not os .environ .get ("MYPY_PRIMER_NO_REBUILD" , False ):
170173 try :
171174 await run (
172- ["cargo" , "build" , "--release" ],
175+ ["cargo" , "build" , * build_mode . flags () ],
173176 cwd = repo_dir / "pyrefly" ,
174177 env = env ,
175178 output = True ,
@@ -180,7 +183,7 @@ async def setup_pyrefly(
180183 print (e .stderr , file = sys .stderr )
181184 raise e
182185
183- pyrefly_exe = repo_dir / "target" / "release" / "pyrefly"
186+ pyrefly_exe = repo_dir / "target" / build_mode . artifact_directory () / "pyrefly"
184187 assert pyrefly_exe .exists ()
185188 return pyrefly_exe
186189
@@ -190,3 +193,20 @@ async def setup_typeshed(parent_dir: Path, *, repo: str, revision_like: Revision
190193 shutil .rmtree (parent_dir )
191194 parent_dir .mkdir (exist_ok = True )
192195 return await ensure_repo_at_revision (repo , parent_dir , revision_like )
196+
197+
198+ class RustBuildMode (enum .Enum ):
199+ RELEASE = "release"
200+ DEBUG = "debug"
201+
202+ def flags (self ) -> list [str ]:
203+ if self == RustBuildMode .RELEASE :
204+ return ["--release" ]
205+ else :
206+ return []
207+
208+ def artifact_directory (self ) -> Path :
209+ if self == RustBuildMode .RELEASE :
210+ return Path ("release" )
211+ else :
212+ return Path ("debug" )
0 commit comments