eng/scripts/helpers.py (45 lines of code) (raw):
import os
import sys
import subprocess
import time
import argparse
root_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", ".."))
# from https://stackoverflow.com/a/43357954/1233374
# allow for boolean arguments as switches or with values
# parser.add_argument("--nice", type=str2bool, nargs='?',
# const=True, default=False,
# help="Activate nice mode.")
# --nice, --nice=true, --nice 1
# --nice false, --nice no, --nice 0
def str2bool(v):
if isinstance(v, bool):
return v
if v.lower() in ("yes", "true", "t", "y", "1"):
return True
elif v.lower() in ("no", "false", "f", "n", "0"):
return False
else:
raise argparse.ArgumentTypeError("Boolean value expected.")
def is_pipeline_build():
return not not os.environ.get("TF_BUILD", "")
def call(cmd: str, cwd=root_dir, suppress_failures=False, capture_output=False):
print("\n============================================================")
print(f"From {cwd}\n> {cmd}")
print("============================================================", flush=True)
start_time = time.time()
process = subprocess.run(
cmd,
cwd=cwd,
shell=True,
text=True,
stdout=subprocess.PIPE if capture_output else None,
stderr=subprocess.STDOUT if capture_output else None,
)
returncode = process.returncode
if capture_output:
print(process.stdout.rstrip(), flush=True)
elapsed_time = time.time() - start_time
command_failed = returncode != 0 and not suppress_failures
print("------------------------------------------------------------")
if command_failed:
print(f"##[error]Command failed: {cmd}")
else:
print(f"End: {cmd}")
print(f"Exit code {returncode}, Duration: {elapsed_time:.3f}s")
print("------------------------------------------------------------\n", flush=True)
if command_failed:
sys.exit(returncode)
return process.stdout