2014-01-03 10:32:13 -08:00
__author__ = u ' schmatz '
import errors
import configuration
import mongo
import node
import repositoryInstaller
import ruby
import shutil
import os
import glob
import subprocess
2014-01-04 17:53:41 -05:00
def print_computer_information ( os_name , address_width ) :
print ( os_name + " detected, architecture: " + str ( address_width ) + " bit " )
2014-01-03 10:32:13 -08:00
def constructSetup ( ) :
config = configuration . Configuration ( )
2014-01-04 17:53:41 -05:00
address_width = config . system . get_virtual_memory_address_width ( )
2014-01-03 10:32:13 -08:00
if config . system . operating_system == u " mac " :
2014-01-04 17:53:41 -05:00
print_computer_information ( " Mac " , address_width )
2014-01-03 10:32:13 -08:00
return MacSetup ( config )
elif config . system . operating_system == u " win " :
2014-01-04 17:53:41 -05:00
print_computer_information ( " Windows " , address_width )
2014-01-03 10:32:13 -08:00
raise NotImplementedError ( " Windows is not supported at this time. " )
elif config . system . operating_system == u " linux " :
2014-01-04 17:53:41 -05:00
print_computer_information ( " Linux " , address_width )
2014-01-03 10:32:13 -08: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 11:58:45 -08:00
mongo_version_string = mongo_version_string . decode ( encoding = ' UTF-8 ' )
2014-04-11 20:48:42 -07:00
except Exception as e :
2014-04-11 20:37:06 -07:00
print ( " Mongod not found: %s " % e )
2014-03-29 18:04:36 -05:00
if " v2.6. " not in mongo_version_string :
2014-04-11 20:37:06 -07:00
if mongo_version_string :
print ( " Had MongoDB version: %s " % mongo_version_string )
print ( " MongoDB not found, so installing a local copy... " )
2014-01-03 10:32:13 -08:00
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 10:32:13 -08:00
print ( " Changing permissions of files... " )
#TODO: Make this more robust and portable(doesn't pose security risk though)
2014-01-03 15:08:14 -05:00
subprocess . call ( " chmod -R 755 " + self . config . directory . root_dir + os . sep + " coco " + os . sep + " bin " , shell = True )
2014-01-08 18:43:06 -05:00
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 10:32:13 -08:00
2014-03-29 18:45:53 -05:00
print ( " " )
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 " )
2014-01-05 19:51:52 -05:00
print ( " 2. ./coco-brunch " )
2014-01-03 21:31:36 -05:00
print ( " 3. ./coco-dev-server " )
2014-01-05 19:51:52 -05:00
print ( " NOTE: brunch may need to be run as sudo if it doesn ' t work (ulimit needs to be set higher than default) " )
2014-03-29 18:45:53 -05:00
print ( " " )
print ( " Before can play any levels you must update the database. See the Setup section here: " )
print ( " https://github.com/codecombat/codecombat/wiki/Developer-environment#setup " )
print ( " " )
2014-03-29 18:59:10 -05:00
print ( " Go to http://localhost:3000 to see your local CodeCombat in action! " )
2014-01-03 10:32:13 -08:00
def cleanup ( self ) :
2014-01-05 14:01:19 -05:00
self . config . directory . remove_tmp_directory ( )
2014-01-03 10:32:13 -08: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 ) :
2014-01-03 11:04:06 -08:00
super ( self . __class__ , self ) . setup ( )