@@ -17,6 +17,7 @@ import subprocess
1717import  sys 
1818import  threading 
1919from  concurrent .futures  import  ThreadPoolExecutor 
20+ from  typing  import  Optional , Sequence 
2021
2122DISTS  =  (
2223    "debian:buster" ,
@@ -39,8 +40,11 @@ projdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
3940
4041
4142class  Builder (object ):
42-     def  __init__ (self , redirect_stdout = False ):
43+     def  __init__ (
44+         self , redirect_stdout = False , docker_build_args : Optional [Sequence [str ]] =  None 
45+     ):
4346        self .redirect_stdout  =  redirect_stdout 
47+         self ._docker_build_args  =  tuple (docker_build_args  or  ())
4448        self .active_containers  =  set ()
4549        self ._lock  =  threading .Lock ()
4650        self ._failed  =  False 
@@ -79,8 +83,8 @@ class Builder(object):
7983            stdout  =  None 
8084
8185        # first build a docker image for the build environment 
82-         subprocess . check_call (
83-             [ 
86+         build_args   =   (
87+             ( 
8488                "docker" ,
8589                "build" ,
8690                "--tag" ,
@@ -89,8 +93,13 @@ class Builder(object):
8993                "distro="  +  dist ,
9094                "-f" ,
9195                "docker/Dockerfile-dhvirtualenv" ,
92-                 "docker" ,
93-             ],
96+             )
97+             +  self ._docker_build_args 
98+             +  ("docker" ,)
99+         )
100+ 
101+         subprocess .check_call (
102+             build_args ,
94103            stdout = stdout ,
95104            stderr = subprocess .STDOUT ,
96105            cwd = projdir ,
@@ -147,9 +156,7 @@ class Builder(object):
147156                self .active_containers .remove (c )
148157
149158
150- def  run_builds (dists , jobs = 1 , skip_tests = False ):
151-     builder  =  Builder (redirect_stdout = (jobs  >  1 ))
152- 
159+ def  run_builds (builder , dists , jobs = 1 , skip_tests = False ):
153160    def  sig (signum , _frame ):
154161        print ("Caught SIGINT" )
155162        builder .kill_containers ()
@@ -180,6 +187,11 @@ if __name__ == "__main__":
180187        action = "store_true" ,
181188        help = "skip running tests after building" ,
182189    )
190+     parser .add_argument (
191+         "--docker-build-arg" ,
192+         action = "append" ,
193+         help = "specify an argument to pass to docker build" ,
194+     )
183195    parser .add_argument (
184196        "--show-dists-json" ,
185197        action = "store_true" ,
@@ -195,4 +207,12 @@ if __name__ == "__main__":
195207    if  args .show_dists_json :
196208        print (json .dumps (DISTS ))
197209    else :
198-         run_builds (dists = args .dist , jobs = args .jobs , skip_tests = args .no_check )
210+         builder  =  Builder (
211+             redirect_stdout = (args .jobs  >  1 ), docker_build_args = args .docker_build_arg 
212+         )
213+         run_builds (
214+             builder ,
215+             dists = args .dist ,
216+             jobs = args .jobs ,
217+             skip_tests = args .no_check ,
218+         )
0 commit comments