def test_decode(self): string = b'Hello from popper' result = pu.decode(string) if sys.version_info[0] == 2: self.assertIsInstance(result, unicode) else: self.assertIsInstance(result, str) string = 'Hello from popper' result = pu.decode(string) if sys.version_info[0] == 2: self.assertIsInstance(result, unicode) else: self.assertIsInstance(result, str)
def run(self, reuse=False): cmd = self.action.get('runs', ['entrypoint.sh']) cmd[0] = os.path.join('./', cmd[0]) cmd.extend(self.action.get('args', [])) cwd = self.cwd if not self.dry_run: if 'repo_dir' in self.action: os.chdir(self.action['repo_dir']) cmd[0] = os.path.join(self.action['repo_dir'], cmd[0]) else: os.chdir(os.path.join(cwd, self.action['uses'])) cmd[0] = os.path.join(cwd, self.action['uses'], cmd[0]) os.environ.update(self.action.get('env', {})) log.info('{}[{}] {}'.format(self.msg_prefix, self.action['name'], ' '.join(cmd))) if self.dry_run: return ecode = 0 try: log.debug('Executing: {}'.format(' '.join(cmd))) p = Popen(cmd, stdout=PIPE, stderr=STDOUT, universal_newlines=True, preexec_fn=os.setsid) popper.cli.process_list.append(p.pid) log.debug('Reading process output') for line in iter(p.stdout.readline, ''): line_decoded = pu.decode(line) log.info(line_decoded[:-1]) ecode = p.poll() log.debug('Code returned by process: {}'.format(ecode)) except CalledProcessError as ex: msg = "Command '{}' failed: {}".format(cmd, ex) ecode = ex.returncode log.info(msg) finally: log.info() # remove variables that we added to the environment for i in self.action.get('env', {}): os.environ.pop(i) os.chdir(cwd) if ecode != 0: log.fail("Action '{}' failed.".format(self.action['name']))
def docker_start(self): log.info('{}[{}] docker start '.format(self.msg_prefix, self.action['name'])) if self.dry_run: return 0 self.container.start() cout = self.container.logs(stream=True) for line in cout: log.action_info(pu.decode(line).strip('\n')) return self.container.wait()['StatusCode']
def host_start(self, cmd): """Start the execution of the command on the host machine. Args: cmd(str): The command to execute. Returns: int: The return code of the process. """ log.info('{}[{}] {}'.format(self.msg_prefix, self.action['name'], ' '.join(cmd))) if self.dry_run: return 0 ecode = 0 try: log.debug('Executing: {}'.format(' '.join(cmd))) p = Popen(' '.join(cmd), stdout=PIPE, stderr=STDOUT, shell=True, universal_newlines=True, preexec_fn=os.setsid) popper.cli.process_list.append(p.pid) log.debug('Reading process output') for line in iter(p.stdout.readline, ''): line_decoded = pu.decode(line) log.action_info(line_decoded[:-1]) p.wait() ecode = p.poll() log.debug('Code returned by process: {}'.format(ecode)) except CalledProcessError as ex: msg = "Command '{}' failed: {}".format(cmd, ex) ecode = ex.returncode log.action_info(msg) finally: log.action_info() os.chdir(self.cwd) return ecode
def docker_start(self): """Start the container process. Args: None Returns: int: The returncode of the container process. """ log.info('{}[{}] docker start '.format(self.msg_prefix, self.action['name'])) if self.dry_run: return 0 self.container.start() cout = self.container.logs(stream=True) for line in cout: log.action_info(pu.decode(line).strip('\n')) return self.container.wait()['StatusCode']