Add smoke test script in Python (#11628)

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.
This commit is contained in:
Zanie Blue 2025-03-27 15:35:21 -05:00 committed by GitHub
parent 6a13e4cedd
commit a28db37f33
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 111 additions and 22 deletions

View file

@ -0,0 +1,60 @@
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()

View file

@ -0,0 +1,17 @@
# NOTE this is not a real shell-script, it's parsed by `smoke-test/__main__.py` and executed
# serially via Python for cross-platform support.
# Use any Python 3.13 version
uv python pin 3.13
# Create a virtual environment and install a package with `uv pip`
uv venv -v
uv pip install ruff -v
# Install a package with extension modules, e.g., `numpy` and make sure it's importable
uv pip install numpy -v
uv run python -c "import numpy; print(numpy.__version__)"
# Run a package via `uvx`
uvx -v ruff --version