Initial skel
This commit is contained in:
89
ci/bootstrap.py
Executable file
89
ci/bootstrap.py
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from os.path import abspath
|
||||
from os.path import dirname
|
||||
from os.path import exists
|
||||
from os.path import join
|
||||
|
||||
base_path = dirname(dirname(abspath(__file__)))
|
||||
|
||||
|
||||
def check_call(args):
|
||||
print("+", *args)
|
||||
subprocess.check_call(args)
|
||||
|
||||
|
||||
def exec_in_env():
|
||||
env_path = join(base_path, ".tox", "bootstrap")
|
||||
if sys.platform == "win32":
|
||||
bin_path = join(env_path, "Scripts")
|
||||
else:
|
||||
bin_path = join(env_path, "bin")
|
||||
if not exists(env_path):
|
||||
import subprocess
|
||||
|
||||
print("Making bootstrap env in: {0} ...".format(env_path))
|
||||
try:
|
||||
check_call([sys.executable, "-m", "venv", env_path])
|
||||
except subprocess.CalledProcessError:
|
||||
try:
|
||||
check_call([sys.executable, "-m", "virtualenv", env_path])
|
||||
except subprocess.CalledProcessError:
|
||||
check_call(["virtualenv", env_path])
|
||||
print("Installing `jinja2` into bootstrap environment...")
|
||||
check_call([join(bin_path, "pip"), "install", "jinja2", "tox"])
|
||||
python_executable = join(bin_path, "python")
|
||||
if not os.path.exists(python_executable):
|
||||
python_executable += '.exe'
|
||||
|
||||
print("Re-executing with: {0}".format(python_executable))
|
||||
print("+ exec", python_executable, __file__, "--no-env")
|
||||
os.execv(python_executable, [python_executable, __file__, "--no-env"])
|
||||
|
||||
|
||||
def main():
|
||||
import jinja2
|
||||
|
||||
print("Project path: {0}".format(base_path))
|
||||
|
||||
jinja = jinja2.Environment(
|
||||
loader=jinja2.FileSystemLoader(join(base_path, "ci", "templates")),
|
||||
trim_blocks=True,
|
||||
lstrip_blocks=True,
|
||||
keep_trailing_newline=True
|
||||
)
|
||||
|
||||
tox_environments = [
|
||||
line.strip()
|
||||
# 'tox' need not be installed globally, but must be importable
|
||||
# by the Python that is running this script.
|
||||
# This uses sys.executable the same way that the call in
|
||||
# cookiecutter-pylibrary/hooks/post_gen_project.py
|
||||
# invokes this bootstrap.py itself.
|
||||
for line in subprocess.check_output([sys.executable, '-m', 'tox', '--listenvs'], universal_newlines=True).splitlines()
|
||||
]
|
||||
tox_environments = [line for line in tox_environments if line.startswith('py')]
|
||||
|
||||
for name in os.listdir(join("ci", "templates")):
|
||||
with open(join(base_path, name), "w") as fh:
|
||||
fh.write(jinja.get_template(name).render(tox_environments=tox_environments))
|
||||
print("Wrote {}".format(name))
|
||||
print("DONE.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = sys.argv[1:]
|
||||
if args == ["--no-env"]:
|
||||
main()
|
||||
elif not args:
|
||||
exec_in_env()
|
||||
else:
|
||||
print("Unexpected arguments {0}".format(args), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user