Files
hermes-agent/scripts/ci/python_packages.py

42 lines
1.6 KiB
Python

"""Prepare isolated CI tools, then export their Python or run it directly.
Requirements precede ``--``; arguments after it run with the selected Python.
Without a command, export the selection for subsequent GitHub Actions steps.
"""
from __future__ import annotations
import argparse
import os
import subprocess
import sys
def main(argv: list[str] | None = None) -> int:
from pm import ensure_environment
from scripts.ci.setup_toolchain import add_path, file_commands, python3_alias
argv = list(sys.argv[1:] if argv is None else argv)
boundary = argv.index("--") if "--" in argv else len(argv)
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("requirements", nargs="+")
args = parser.parse_args(argv[:boundary])
command = argv[boundary + 1:]
if boundary < len(argv) and not command:
parser.error("-- requires a Python command")
python = ensure_environment("ci-tools", args.requirements, explicit=True)
python3_alias(python)
if command:
environment = {key: value for key, value in os.environ.items()
if key not in {"PYTHONHOME", "VIRTUAL_ENV"}}
environment.update(HERMES_PYTHON=str(python), VIRTUAL_ENV=str(python.parent.parent))
environment["PATH"] = str(python.parent) + os.pathsep + environment.get("PATH", "")
return subprocess.call([str(python), *command], env=environment)
file_commands("GITHUB_ENV", {"HERMES_PYTHON": python, "VIRTUAL_ENV": python.parent.parent})
add_path([str(python.parent)])
print(f"CI tools ready: {python}")
return 0
if __name__ == "__main__":
raise SystemExit(main())