1+ import json
12import pathlib
23import shutil
3- from typing import Optional
4+ from typing import Dict , Optional
45
56import click
67import yaml
@@ -37,7 +38,9 @@ def _docker_build(docker_args: DockerArgs) -> None:
3738 docker_client = docker .from_env ()
3839 docker_tag = docker_args .docker_build_tag ()
3940 try :
40- _ , logs_generator = docker_client .images .build (path = "." , tag = docker_tag )
41+ _ , logs_generator = docker_client .images .build (
42+ path = "." , tag = docker_tag , buildargs = docker_args .build_args
43+ )
4144 DockerResponseReader (logs_generator ).click_echo_ok_responses ()
4245 except docker .errors .BuildError as err :
4346 build_log = "\n " .join ([str (log ) for log in err .build_log ])
@@ -86,7 +89,12 @@ def _replace_datahub_with_jinja_vars(env: str) -> None:
8689 yaml .dump (updated_config , datahub_config_file )
8790
8891
89- def compile_project (env : str , docker_tag : Optional [str ] = None , docker_build : bool = False ) -> None :
92+ def compile_project (
93+ env : str ,
94+ docker_tag : Optional [str ] = None ,
95+ docker_build : bool = False ,
96+ docker_build_args : Optional [Dict [str , str ]] = None ,
97+ ) -> None :
9098 """
9199 Create local working directories and build artifacts.
92100
@@ -101,7 +109,7 @@ def compile_project(env: str, docker_tag: Optional[str] = None, docker_build: bo
101109 copy_dag_dir_to_build_dir ()
102110 copy_config_dir_to_build_dir ()
103111
104- docker_args = DockerArgs (env , docker_tag )
112+ docker_args = DockerArgs (env , docker_tag , docker_build_args or {} )
105113 replace_image_settings (docker_args )
106114 _replace_datahub_with_jinja_vars (env )
107115
@@ -133,5 +141,10 @@ def compile_project(env: str, docker_tag: Optional[str] = None, docker_build: bo
133141@click .option (
134142 "--docker-tag" , type = str , required = False , help = "Image tag of a Docker image to create"
135143)
136- def compile_project_command (env : str , docker_build : bool , docker_tag : Optional [str ]) -> None :
137- compile_project (env , docker_tag , docker_build )
144+ @click .option (
145+ "--docker-args" , type = str , required = False , help = "Args required to build project in json format"
146+ )
147+ def compile_project_command (
148+ env : str , docker_build : bool , docker_tag : Optional [str ], docker_args : Optional [str ]
149+ ) -> None :
150+ compile_project (env , docker_tag , docker_build , json .loads (docker_args or "{}" ))
0 commit comments