@@ -19,18 +19,22 @@ def get_cargo_version(cargo_toml_path):
19
19
20
20
return version
21
21
22
- def build_docker_image (dockerfile_path , image_name , version ):
23
- # Docker build command
24
- command = f"docker build -t { image_name } :{ version } -f { dockerfile_path } ."
25
22
26
- # Run the command
27
- process = subprocess .Popen (command , shell = True )
28
- output , error = process .communicate ()
23
+ def build_docker_image (dockerfile_path , image_name , version , num_jobs = None ):
24
+ # Docker build command
25
+ command = f"docker build -t { image_name } :{ version } -f { dockerfile_path } "
26
+ if num_jobs :
27
+ command += f" --build-arg NUM_JOBS={ num_jobs } "
28
+ command += " ."
29
29
30
- if error :
31
- print ( f"Error occurred: { error } " )
32
- else :
30
+ try :
31
+ # Run the command
32
+ subprocess . check_call ( command , shell = True )
33
33
print (f"Built { image_name } :{ version } successfully." )
34
+ catch :
35
+ print (f"Error occurred: { error } " )
36
+ exit (1 ) # stop the build
37
+
34
38
35
39
def push_docker_image (image_name , version , latest = False ):
36
40
# Docker tag command
@@ -53,6 +57,7 @@ def push_docker_image(image_name, version, latest=False):
53
57
if latest :
54
58
print (f"Pushed { latest_image_name } successfully." )
55
59
60
+
56
61
def delete_docker_image (image_name , version ):
57
62
# Full image name
58
63
full_image_name = f"{ image_name } :{ version } "
@@ -67,33 +72,40 @@ def delete_docker_image(image_name, version):
67
72
except subprocess .CalledProcessError :
68
73
print (f"Failed to delete { full_image_name } ." )
69
74
70
- def build_instances (version ):
71
- build_docker_image ("build-tools/docker/Dockerfile.builder" , "mintlayer-builder" , "latest" )
75
+
76
+ def build_instances (version , num_jobs = None ):
77
+ build_docker_image ("build-tools/docker/Dockerfile.builder" , "mintlayer-builder" , "latest" , num_jobs )
72
78
build_docker_image ("build-tools/docker/Dockerfile.node-daemon" , "mintlayer/node-daemon" , version )
73
79
build_docker_image ("build-tools/docker/Dockerfile.node-gui" , "mintlayer/node-gui" , version )
74
80
build_docker_image ("build-tools/docker/Dockerfile.wallet-cli" , "mintlayer/wallet-cli" , version )
75
81
delete_docker_image ("mintlayer-builder" , "latest" )
76
82
83
+
77
84
def push_instances (version , latest ):
78
85
push_docker_image ("mintlayer/node-daemon" ,version , latest )
79
86
push_docker_image ("mintlayer/node-gui" ,version , latest )
80
87
push_docker_image ("mintlayer/wallet-cli" ,version , latest )
81
88
89
+
82
90
def main ():
83
91
parser = argparse .ArgumentParser ()
84
92
parser .add_argument ('--push' , action = 'store_true' , help = 'Push the Docker image to Docker Hub' )
85
93
parser .add_argument ('--latest' , action = 'store_true' , help = 'Tag the Docker image as latest while pushing' )
86
94
parser .add_argument ('--build' , type = lambda x : (str (x ).lower () == 'true' ), default = True , help = "Set to false avoid the build" )
95
+ parser .add_argument ('--version' , help = 'Override version number' , default = None )
96
+ parser .add_argument ('--num_jobs' , help = 'Number of parallel jobs, defaults to # of CPUs' , default = None )
87
97
args = parser .parse_args ()
88
- version = get_cargo_version ("Cargo.toml" )
98
+
99
+ version = args .version if args .version else get_cargo_version ("Cargo.toml" )
89
100
90
101
if args .build :
91
- build_instances (version )
102
+ build_instances (version , num_jobs )
92
103
93
104
# Only push the image if the --push flag is provided
94
105
if args .push :
95
106
latest = args .latest
96
107
push_instances (version , latest )
97
108
109
+
98
110
if __name__ == "__main__" :
99
111
main ()
0 commit comments