def main_daemon(argv): parser = argparse.ArgumentParser(prog='minion-daemon') parser.add_argument('--workdir', default=os.environ.get('MINION_WORKDIR', '.'), help='minion working directory') args = parser.parse_args(argv) try: d = MinionDaemon(args.workdir) d.run() except KeyboardInterrupt: sys.exit(0) except MinionException as e: print(e) sys.exit(1)
def main_tool(argv): sock_default = os.environ.get('MINION_SOCKET', './minion.sock') parser = argparse.ArgumentParser(prog='minion') parser.add_argument('--socket', type=str, default=sock_default, help='socket to talk to minion daemon (default: %s)' % sock_default) subparsers = parser.add_subparsers(help='command-line tools') minion.cmd.update_heads(subparsers.add_parser('update-heads', help='fetch the latest sources')) minion.cmd.new_target(subparsers.add_parser('new-target', help='create a new build target')) minion.cmd.del_target(subparsers.add_parser('del-target', help='remove an existing build target')) minion.cmd.sync_target(subparsers.add_parser('sync-target', help="synchronize a target's sources with the heads")) minion.cmd.set_target_refspec(subparsers.add_parser('set-target-refspec', help='manually set the HEAD for a target/source pair')) minion.cmd.run_build_process(subparsers.add_parser('run-build-process', help='run the build process for a target (async)')) minion.cmd.build_status(subparsers.add_parser('build-status', help='check the status of a build')) minion.cmd.forget_build_failure(subparsers.add_parser('forget-build-failure', help='remove a cached process result for a given build target')) minion.cmd.add_blob(subparsers.add_parser('add-blob', help='manually add a blob')) # run it if not argv: parser.print_help() else: args = parser.parse_args(argv) s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_PASSCRED, 1) s.connect(args.socket) cmd = ' '.join([shlex.quote(arg) for arg in argv]) + '\n' s.sendall(cmd.encode('utf8')) s.shutdown(socket.SHUT_WR) data = b'' while True: x = s.recv(512) if not x: break data += x output = json.loads(data.decode('utf8')) if 'output' in output: stdout = output['output'] stdout = stdout.strip() stdout += '\n' sys.stdout.write(stdout) if output['status'] == 'success': sys.exit(0) else: sys.exit(1)