codecombat/scripts/devSetup/factories.py

82 lines
3.5 KiB
Python
Raw Normal View History

2014-01-03 13:32:13 -05:00
__author__ = u'schmatz'
import errors
import configuration
import mongo
import node
import repositoryInstaller
import ruby
import shutil
import os
import glob
import subprocess
def print_computer_information(os_name,address_width):
print(os_name + " detected, architecture: " + str(address_width) + " bit")
2014-01-03 13:32:13 -05:00
def constructSetup():
config = configuration.Configuration()
address_width = config.system.get_virtual_memory_address_width()
2014-01-03 13:32:13 -05:00
if config.system.operating_system == u"mac":
print_computer_information("Mac",address_width)
2014-01-03 13:32:13 -05:00
return MacSetup(config)
elif config.system.operating_system == u"win":
print_computer_information("Windows",address_width)
2014-01-03 13:32:13 -05:00
raise NotImplementedError("Windows is not supported at this time.")
elif config.system.operating_system == u"linux":
print_computer_information("Linux",address_width)
2014-01-03 13:32:13 -05:00
return LinuxSetup(config)
class SetupFactory(object):
def __init__(self,config):
self.config = config
self.mongo = mongo.MongoDB(self.config)
self.node = node.Node(self.config)
self.repoCloner = repositoryInstaller.RepositoryInstaller(self.config)
self.ruby = ruby.Ruby(self.config)
def setup(self):
mongo_version_string = ""
try:
mongo_version_string = subprocess.check_output("mongod --version",shell=True)
2014-02-27 14:58:45 -05:00
mongo_version_string = mongo_version_string.decode(encoding='UTF-8')
2014-01-03 13:32:13 -05:00
except:
print("Mongod not found.")
if "v2.5.4" not in mongo_version_string:
print("MongoDB 2.5.4 not found, so installing...")
self.mongo.download_dependencies()
self.mongo.install_dependencies()
self.node.download_dependencies()
self.node.install_dependencies()
#self.repoCloner.cloneRepository()
self.repoCloner.install_node_packages()
self.ruby.install_gems()
print ("Doing initial bower install...")
bower_path = self.config.directory.root_dir + os.sep + "coco" + os.sep + "node_modules" + os.sep + ".bin" + os.sep + "bower"
subprocess.call(bower_path + " --allow-root install",shell=True,cwd=self.config.directory.root_dir + os.sep + "coco")
print("Removing temporary directories")
2014-01-05 22:42:43 -05:00
self.config.directory.remove_tmp_directory()
2014-01-03 13:32:13 -05:00
print("Changing permissions of files...")
#TODO: Make this more robust and portable(doesn't pose security risk though)
subprocess.call("chmod -R 755 " + self.config.directory.root_dir + os.sep + "coco" + os.sep + "bin",shell=True)
chown_command = "chown -R " + os.getenv("SUDO_USER") + " bower_components"
chown_directory = self.config.directory.root_dir + os.sep + "coco"
subprocess.call(chown_command,shell=True,cwd=chown_directory)
2014-01-03 13:32:13 -05:00
print("Done! If you want to start the server, head into /coco/bin and run ")
2014-01-03 21:31:36 -05:00
print("1. ./coco-mongodb")
print("2. ./coco-brunch ")
2014-01-03 21:31:36 -05:00
print("3. ./coco-dev-server")
print("NOTE: brunch may need to be run as sudo if it doesn't work (ulimit needs to be set higher than default)")
2014-01-03 13:32:13 -05:00
print("Once brunch is done, visit http://localhost:3000!")
def cleanup(self):
2014-01-05 14:01:19 -05:00
self.config.directory.remove_tmp_directory()
2014-01-03 13:32:13 -05:00
class MacSetup(SetupFactory):
def setup(self):
super(self.__class__, self).setup()
class WinSetup(SetupFactory):
def setup(self):
super(self.__class__, self).setup()
class LinuxSetup(SetupFactory):
def setup(self):
super(self.__class__, self).setup()