in shim/shim.py [0:0]
def _build_target(target: str, *, mode: Optional[str] = None) -> Path:
LOG.info(f"Building `{target}`%s...", f" with `{mode}`" if mode else "")
# If a target starts with fbcode, then it needs to be built from fbcode instead of from fbsource
if ":" not in target:
LOG.warning(
f"Target `{target}` is an alias. Please expand it if it is a fbcode target. Otherwise buck build will fail."
)
fbcode_target_prefix = "fbcode//"
is_fbcode_target = target.startswith(fbcode_target_prefix)
if is_fbcode_target:
target = target[len(fbcode_target_prefix) :]
command = ["buck", "build", "--show-json-output"]
if mode:
command.append(str(mode))
command.append(target)
current_working_directory = Path(os.getcwd())
working_directory = (
current_working_directory / "fbcode"
if is_fbcode_target
else current_working_directory
)
output = subprocess.run(command, stdout=subprocess.PIPE, cwd=working_directory)
if output.returncode != 0:
raise ClientError(f"Error while building buck target `{target}`, aborting.")
try:
response = json.loads(output.stdout)
except json.JSONDecodeError:
response = {}
if len(response) != 1 or len(next(iter(response.values()))) == 0:
raise ClientError(f"Unexpected buck output:\n{output.stdout.decode()}")
return working_directory / next(iter(response.values()))