mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 13:25:00 +00:00

I wanted to consolidate these anyway, and apparently it's a huge pain to make a Windows task fail early via GitHub's PowerShell setup so I implement this in Python instead.
60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
import os
|
|
import pathlib
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
|
|
SELF_FILE = pathlib.Path(__file__)
|
|
COMMANDS_FILE = SELF_FILE.parent / "commands.sh"
|
|
|
|
|
|
def read_commands() -> list[list[str]]:
|
|
return [
|
|
shlex.split(line)
|
|
for line in COMMANDS_FILE.read_text().splitlines()
|
|
# Skip empty lines and comments
|
|
if line.strip() and not line.strip().startswith("#")
|
|
]
|
|
|
|
|
|
def run_command(command: list[str]) -> subprocess.CompletedProcess:
|
|
env = os.environ.copy()
|
|
# Prepend either the parent uv path to the PATH or the current directory
|
|
env = {
|
|
**env,
|
|
"PATH": str(
|
|
pathlib.Path(env.get("UV")).parent if "UV" in env else pathlib.Path.cwd()
|
|
)
|
|
+ os.pathsep
|
|
+ env.get("PATH"),
|
|
}
|
|
return subprocess.run(command, capture_output=True, text=True, env=env)
|
|
|
|
|
|
def report_result(result: subprocess.CompletedProcess):
|
|
print("=============================================")
|
|
print(f"command: {' '.join(result.args)}")
|
|
print(f"exit code: {result.returncode}")
|
|
print()
|
|
print("------- stdout -------")
|
|
print(result.stdout)
|
|
print()
|
|
print("------- stderr -------")
|
|
print(result.stderr)
|
|
|
|
|
|
def main():
|
|
results = [run_command(command) for command in read_commands()]
|
|
failed = sum(result.returncode != 0 for result in results)
|
|
for result in results:
|
|
report_result(result)
|
|
|
|
print("=============================================")
|
|
if failed:
|
|
print(f"FAILURE - {failed}/{len(results)} commands failed")
|
|
sys.exit(1)
|
|
else:
|
|
print(f"SUCCESS - {len(results)}/{len(results)} commands succeeded")
|
|
|
|
|
|
main()
|