1
0
Atdalīts 0
kirsle.net/bootstrap.py

83 rindas
2.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""Bootstrap script to set up a local dev instance of Kirsle.net
This will `git clone` an instance of the Rophako CMS and configure it to run
this local website. When the dev Rophako instance already exists, running this
script again acts as a shortcut to running `python runserver.py` from within
the Rophako git repo.
This script is only designed to work in Python 3 and requires the `git` and
`pyvenv` commands.
This performs the following tasks:
* Clones Rophako into ./rophako
* Sets up a Python 3 virtual environment via `pyvenv` at ./rophako/pyvenv
* Installs requirements via `pip` into its virtual environment
* Symlinks settings.yml and kirsle_legacy.py into the Rophako root
* Runs the server
"""
import os
import os.path
import subprocess
import sys
def main():
# Make sure we have everything we need.
check_depends()
# Do we already have Rophako?
if os.path.isdir("./rophako"):
os.chdir("./rophako")
else:
# Clone it.
must_run(["git", "clone", "https://github.com/kirsle/rophako"])
os.chdir("./rophako")
# Make the Python environment.
must_run(["pyvenv", "pyvenv"])
must_run(["pyvenv/bin/pip", "install", "-r", "requirements.txt"])
# Configure it.
os.symlink("../settings.yml", "settings.yml")
os.symlink("../kirsle_legacy.py", "kirsle_legacy.py")
print("=" * 80)
print("Success! Rophako has been cloned and configured! The server")
print("will now start. To quickly start the server again in the")
print("future, just run bootstrap.py again.")
print("=" * 80)
# Run Rophako.
must_run(["pyvenv/bin/python", "runserver.py"])
def check_depends():
# Make sure we have access to required commands.
errors = False
for command in [ "git", "pyvenv" ]:
try:
subprocess.check_call(["which", command],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
except subprocess.CalledProcessError:
print("You seem to be missing the command: {}".format(command))
errors = True
if errors:
print("Make sure the required commands are installed and try again.")
sys.exit(1)
def must_run(args, **kwargs):
"""Calls subprocess to run a command which must succeed or die."""
result = subprocess.call(args, **kwargs)
if result != 0:
print("Errors were detected in the command I tried to run: {}".format(
" ".join(args),
))
sys.exit(1)
if __name__ == "__main__":
main()