def deploy(self) -> str: """Deploy the server from a local folder for this task""" assert self.server_dir is not None, "Deploy called before prepare" self.running_dir = os.path.join( get_mephisto_tmp_dir(), f"local_server_{self.task_run_id}", "server" ) shutil.copytree(self.server_dir, self.running_dir) return_dir = os.getcwd() os.chdir(self.running_dir) self.server_process = subprocess.Popen( ["node", "server.js"], preexec_fn=os.setpgrp, env=dict(os.environ, PORT=f"{self.port}"), ) self.server_process_pid = self.server_process.pid os.chdir(return_dir) time.sleep(1) print("Server running locally with pid {}.".format(self.server_process_pid)) host = self.hostname port = self.port if host is None: host = input( "Please enter the public server address, like https://hostname.com: " ) self.hostname = host if port is None: port = input("Please enter the port given above, likely 3000: ") self.port = port return "{}:{}".format(host, port)
from mephisto.operations.logger_core import get_logger logger = get_logger(name=__name__) ARCHITECT_TYPE = "heroku" USER_NAME = getpass.getuser() HEROKU_SERVER_BUILD_DIRECTORY = "heroku_server" HEROKU_CLIENT_URL = ( "https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli" ) HEROKU_WAIT_TIME = 3 HEROKU_TMP_DIR = os.path.join(get_mephisto_tmp_dir(), "heroku") os.makedirs(HEROKU_TMP_DIR, exist_ok=True) @dataclass class HerokuArchitectArgs(ArchitectArgs): """Additional arguments for configuring a heroku architect""" _architect_type: str = ARCHITECT_TYPE use_hobby: bool = field( default=False, metadata={"help": "Launch on the Heroku Hobby tier"} ) heroku_team: Optional[str] = field( default=MISSING, metadata={"help": "Heroku team to use for this launch"} )