mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 21:35:00 +00:00
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:
parent
6a13e4cedd
commit
a28db37f33
4 changed files with 111 additions and 22 deletions
60
scripts/smoke-test/__main__.py
Normal file
60
scripts/smoke-test/__main__.py
Normal 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()
|
17
scripts/smoke-test/commands.sh
Normal file
17
scripts/smoke-test/commands.sh
Normal 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
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue