diff --git a/lib/tamarin.py b/lib/tamarin.py index de1bfb8..0d9d150 100644 --- a/lib/tamarin.py +++ b/lib/tamarin.py @@ -52,8 +52,9 @@ def get_workspace_subdir(subdir): def run(cmd, captureOutput=False, pty=False, debug=False, **kwargs): """Execute an arbitrary command on the system""" if debug: - print(" ".join(cmd)) + print(" ".join(cmd) if isinstance(cmd, list) else cmd) stdin=subprocess.PIPE + kwargs['shell'] = False if isinstance(cmd, list) else True if pty: kwargs['stdin'] = sys.stdin if captureOutput: @@ -62,4 +63,8 @@ def run(cmd, captureOutput=False, pty=False, debug=False, **kwargs): return subprocess.check_call(cmd, **kwargs) def run_docker(args, captureOutput=False, **kwargs): - return run(["docker"] + args, captureOutput=captureOutput, **kwargs) + if isinstance(args, list): + cmd = ["docker"] + args + else: + cmd = "docker " + args + return run(cmd, captureOutput=captureOutput, **kwargs) diff --git a/package b/package index 4d95fe7..d02b2ce 100755 --- a/package +++ b/package @@ -21,6 +21,7 @@ def create_args_parser(): parser.add_argument("--rebuild", help="Ignore cache and rebuild container's image", action="store_true", default=False) parser.add_argument("--debug", help="Will add extra output and start the container in interactive mode", action="store_true", default=False) parser.add_argument("--cleanup", help="Clear the workspace and remove obsolete Docker images before build", action="store_true", default=False) + parser.add_argument("--override-docker-args", help="Override all 'docker run' arguments. Use '[IMAGE_TAG]', '[PROFILE]' and '[ARCH]' to insert the corresponding values into your command.", default="") return parser @@ -63,8 +64,6 @@ if __name__ == "__main__": parser = create_args_parser() args = parser.parse_args() - validate_args(args) - if args.cleanup: cleanup(debug=args.debug) @@ -84,32 +83,41 @@ if __name__ == "__main__": image_tag = build_image(build_workspace, base_image, args.profile, profile, debug=args.debug, rebuild=args.rebuild) - # rkt run arguments - docker_args = [ - "run", - "--rm", - "-v", "{:s}:/src:ro".format(project_dir), - "-v", "{:s}:/dist".format(output_dir), - "-v", "{:s}:/tamarin/hooks:ro".format(tamarin.get_hooks_dir()), - "-v", "{:s}:/tamarin/lib:ro".format(tamarin.get_lib_dir()), - "-v", "{:s}:/tamarin/profiles:ro".format(tamarin.get_profiles_dir()) - ] - - # Use environment proxy if defined - for proxy_var in ['HTTP_PROXY', 'HTTPS_PROXY', 'http_proxy', 'https_proxy']: - if proxy_var in os.environ: - docker_args += ["-e", "{:s}={:s}".format(proxy_var, os.environ[proxy_var])] - kwargs = dict() kwargs['debug'] = args.debug - if args.debug: - kwargs['pty'] = True - docker_args += ["-it", image_tag, "/bin/sh"] - helper_cmd = " ".join(["/usr/bin/python3", "/tamarin/lib/build.py", args.profile, args.architecture]) - print("Executer '{:s}' pour lancer la construction du paquet.".format(helper_cmd)) + docker_args = [] + + # Append custom arguments + if args.override_docker_args != "": + docker_args = args.override_docker_args.replace('[IMAGE_TAG]', image_tag) + docker_args = docker_args.replace('[PROFILE]', args.profile) + docker_args = docker_args.replace('[ARCH]', args.architecture) else: - docker_args += [image_tag, "/usr/bin/python3", "/tamarin/lib/build.py", args.profile, args.architecture] + + docker_args += [ "run", "--rm" ] + + # volumes definition + docker_args += [ + "-v", "{:s}:/src:ro".format(project_dir), + "-v", "{:s}:/dist".format(output_dir), + "-v", "{:s}:/tamarin/hooks:ro".format(tamarin.get_hooks_dir()), + "-v", "{:s}:/tamarin/lib:ro".format(tamarin.get_lib_dir()), + "-v", "{:s}:/tamarin/profiles:ro".format(tamarin.get_profiles_dir()) + ] + + # Use environment proxy if defined + for proxy_var in ['HTTP_PROXY', 'HTTPS_PROXY', 'http_proxy', 'https_proxy']: + if proxy_var in os.environ: + docker_args += ["-e", "{:s}={:s}".format(proxy_var, os.environ[proxy_var])] + + if args.debug: + kwargs['pty'] = True + docker_args += ["-it", image_tag, "/bin/sh"] + helper_cmd = " ".join(["/usr/bin/python3", "/tamarin/lib/build.py", args.profile, args.architecture]) + print("Executer '{:s}' pour lancer la construction du paquet.".format(helper_cmd)) + else: + docker_args += [image_tag, "/usr/bin/python3", "/tamarin/lib/build.py", args.profile, args.architecture] # Start container tamarin.run_docker(docker_args, **kwargs)