2016-10-02 12:59:27 -04:00
|
|
|
#!/usr/bin/env python3
|
2016-05-14 23:30:19 +02:00
|
|
|
import subprocess
|
|
|
|
import os
|
2016-05-15 11:10:46 +02:00
|
|
|
import argparse
|
|
|
|
|
2016-07-18 11:30:57 +02:00
|
|
|
program_description = """Build and run Xonsh in a fresh, controlled
|
2016-05-15 11:10:46 +02:00
|
|
|
environment using docker """
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description=program_description)
|
|
|
|
|
2018-08-30 09:17:34 -05:00
|
|
|
parser.add_argument("env", nargs="*", default=[], metavar="ENV=value")
|
2020-08-05 07:29:31 -07:00
|
|
|
parser.add_argument("--python", "-p", default="3.6", metavar="python_version")
|
2018-08-30 09:17:34 -05:00
|
|
|
parser.add_argument("--pypy", default=None, metavar="pypy_version")
|
2022-05-24 23:46:34 -04:00
|
|
|
parser.add_argument("--ptk", "-t", default="3.0.29", metavar="ptk_version")
|
2018-08-30 09:17:34 -05:00
|
|
|
parser.add_argument("--keep", action="store_true")
|
|
|
|
parser.add_argument("--build", action="store_true")
|
|
|
|
parser.add_argument("--command", "-c", default="xonsh", metavar="command")
|
2020-08-30 19:51:04 +02:00
|
|
|
parser.add_argument("--pytest", action="store_true")
|
2016-05-15 11:10:46 +02:00
|
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
docker_script = """
|
|
|
|
from python:{python_version}
|
|
|
|
RUN pip install --upgrade pip && pip install \\
|
|
|
|
prompt-toolkit=={ptk_version} \\
|
2020-08-30 19:51:04 +02:00
|
|
|
{pytest} \\
|
2016-05-15 11:10:46 +02:00
|
|
|
pygments
|
|
|
|
RUN mkdir /xonsh
|
|
|
|
WORKDIR /xonsh
|
|
|
|
ADD ./ ./
|
|
|
|
RUN python setup.py install
|
|
|
|
""".format(
|
2020-09-12 20:01:41 -04:00
|
|
|
python_version=args.python,
|
|
|
|
ptk_version=args.ptk,
|
|
|
|
pytest="pytest" if args.pytest else "",
|
2018-08-30 09:17:34 -05:00
|
|
|
)
|
2016-05-15 11:10:46 +02:00
|
|
|
|
2017-12-07 15:01:08 -04:00
|
|
|
if args.pypy:
|
|
|
|
docker_script = """
|
|
|
|
from pypy:{python_version}
|
|
|
|
RUN pypy3 -m ensurepip
|
|
|
|
RUN pip install --upgrade pip && pip install \\
|
|
|
|
prompt-toolkit=={ptk_version} \\
|
2020-08-30 19:51:04 +02:00
|
|
|
{pytest} \\
|
2017-12-07 15:01:08 -04:00
|
|
|
pygments
|
|
|
|
RUN mkdir /xonsh
|
|
|
|
WORKDIR /xonsh
|
|
|
|
ADD ./ ./
|
|
|
|
RUN pypy3 setup.py install
|
|
|
|
""".format(
|
2020-09-12 20:01:41 -04:00
|
|
|
python_version=args.pypy,
|
|
|
|
ptk_version=args.ptk,
|
|
|
|
pytest="pytest" if args.pytest else "",
|
2018-08-30 09:17:34 -05:00
|
|
|
)
|
2017-12-07 15:01:08 -04:00
|
|
|
|
2018-08-30 09:17:34 -05:00
|
|
|
print("Building and running Xonsh")
|
|
|
|
print("Using python ", args.python)
|
|
|
|
print("Using prompt-toolkit ", args.ptk)
|
2016-05-14 23:30:19 +02:00
|
|
|
|
2018-08-30 09:17:34 -05:00
|
|
|
with open("./Dockerfile", "w+") as f:
|
2016-05-15 11:10:46 +02:00
|
|
|
f.write(docker_script)
|
2016-05-14 23:30:19 +02:00
|
|
|
|
2018-08-30 09:17:34 -05:00
|
|
|
env_string = " ".join(args.env)
|
2016-05-15 14:57:00 +02:00
|
|
|
|
2018-08-30 09:17:34 -05:00
|
|
|
subprocess.call(["docker", "build", "-t", "xonsh", "."])
|
|
|
|
os.remove("./Dockerfile")
|
2016-05-14 23:30:19 +02:00
|
|
|
|
2016-05-23 09:11:56 +02:00
|
|
|
if not args.build:
|
2018-08-30 09:17:34 -05:00
|
|
|
run_args = ["docker", "run", "-ti"]
|
2016-05-23 09:11:56 +02:00
|
|
|
for e in args.env:
|
2018-08-30 09:17:34 -05:00
|
|
|
run_args += ["-e", e]
|
2016-05-23 09:11:56 +02:00
|
|
|
if not args.keep:
|
2018-08-30 09:17:34 -05:00
|
|
|
run_args.append("--rm")
|
|
|
|
run_args += ["xonsh", args.command]
|
2016-05-23 09:11:56 +02:00
|
|
|
subprocess.call(run_args)
|