-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathbootstrap.py
More file actions
86 lines (75 loc) · 2.92 KB
/
bootstrap.py
File metadata and controls
86 lines (75 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import platform
import subprocess
from pathlib import Path
from venv import EnvBuilder
class Colors:
"""ANSI color codes"""
BLACK = "\033[0;30m"
RED = "\033[0;31m"
GREEN = "\033[0;32m"
BROWN = "\033[0;33m"
BLUE = "\033[0;34m"
PURPLE = "\033[0;35m"
CYAN = "\033[0;36m"
LIGHT_GRAY = "\033[0;37m"
DARK_GRAY = "\033[1;30m"
LIGHT_RED = "\033[1;31m"
LIGHT_GREEN = "\033[1;32m"
YELLOW = "\033[1;33m"
LIGHT_BLUE = "\033[1;34m"
LIGHT_PURPLE = "\033[1;35m"
LIGHT_CYAN = "\033[1;36m"
LIGHT_WHITE = "\033[1;37m"
BOLD = "\033[1m"
FAINT = "\033[2m"
ITALIC = "\033[3m"
UNDERLINE = "\033[4m"
BLINK = "\033[5m"
NEGATIVE = "\033[7m"
CROSSED = "\033[9m"
END = "\033[0m"
# cancel SGR codes if we don't write to a terminal
if not __import__("sys").stdout.isatty():
for attr in dir():
if not attr.startswith("_"):
if isinstance(getattr(__class__, attr), str):
setattr(__class__, attr, "")
elif __import__("platform").system() == "Windows":
kernel32 = __import__("ctypes").windll.kernel32
kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
del kernel32
venv_dir = Path() / ".venv"
requirements_file = Path("requirements.txt")
website_dir = Path("website")
if not platform.platform().startswith("Windows"):
venv_bin = venv_dir / "bin"
venv_python = venv_bin / "python"
venv_pre_commit = venv_bin / "pre-commit"
else:
venv_bin = venv_dir / "Scripts"
venv_python = venv_bin / "python.exe"
venv_pre_commit = venv_bin / "pre-commit.exe"
if not venv_dir.exists():
print(f"Creating virtualenv in {venv_dir}")
EnvBuilder(with_pip=True).create(venv_dir)
subprocess.run([venv_python, "-m", "pip", "install", "-U", "pip"], check=True)
subprocess.run([venv_python, "-m", "pip", "install", "-U", "pre-commit"], check=True)
install_pdf_tooling = False
if requirements_file.exists():
answer = input(f"{Colors.GREEN}Install Robot Framework + browser batteries for PDF generation?{Colors.END} {Colors.YELLOW}[y/N]: {Colors.END}").strip().lower()
install_pdf_tooling = answer in {"y", "yes"}
if install_pdf_tooling:
subprocess.run([venv_python, "-m", "pip", "install", "-r", str(requirements_file)], check=True)
subprocess.run([venv_python, "-m", "Browser.entry", "install", "chromium", "--with-deps"], check=True)
subprocess.run([venv_pre_commit, "install"], check=True)
if website_dir.exists():
npm_cmd = ["npm", "install"]
print(f"Running {' '.join(npm_cmd)} in {website_dir}")
subprocess.run(npm_cmd, cwd=website_dir, check=True)
activate_script = (
"source .venv/bin/activate"
if not platform.platform().startswith("Windows")
else ".venv\\Scripts\\activate"
)
print(f"\n\nVirtualenv '{Colors.GREEN}{venv_dir}{Colors.END}' is ready and up-to-date.")
print(f"Run '{Colors.GREEN}{activate_script}{Colors.END}' to activate the virtualenv.")