1
1
// Write a CLI program that call the bash file rails-new inside the bin folder.
2
2
3
3
// use std::process::Command;
4
+ mod docker_client;
4
5
mod rails_new;
5
6
use rails_new:: Cli ;
6
7
use std:: io:: Write ;
7
- use std:: process:: { Command , Stdio } ;
8
8
9
9
use clap:: Parser ;
10
10
11
+ use crate :: docker_client:: DockerClient ;
12
+
11
13
fn main ( ) {
12
14
let cli = Cli :: parse ( ) ;
13
15
@@ -19,16 +21,7 @@ fn main() {
19
21
20
22
// Run docker build --build-arg RUBY_VERSION=$RUBY_VERSION --build-arg RAILS_VERSION=$RAILS_VERSION -t rails-new-$RUBY_VERSION-$RAILS_VERSION
21
23
// passing the content of DOCKERFILE to the command stdin
22
- let mut child = Command :: new ( "docker" )
23
- . arg ( "build" )
24
- . arg ( "--build-arg" )
25
- . arg ( format ! ( "RUBY_VERSION={}" , ruby_version) )
26
- . arg ( "--build-arg" )
27
- . arg ( format ! ( "RAILS_VERSION={}" , rails_version) )
28
- . arg ( "-t" )
29
- . arg ( format ! ( "rails-new-{}-{}" , ruby_version, rails_version) )
30
- . arg ( "-" )
31
- . stdin ( Stdio :: piped ( ) )
24
+ let mut child = DockerClient :: build_image ( & ruby_version, & rails_version)
32
25
. spawn ( )
33
26
. expect ( "Failed to execute process" ) ;
34
27
@@ -40,19 +33,7 @@ fn main() {
40
33
assert ! ( status. success( ) ) ;
41
34
42
35
// Run the image with docker run -v $(pwd):/$(pwd) -w $(pwd) rails-new-$RUBY_VERSION-$RAILS_VERSION rails new $@
43
- let binding = std:: env:: current_dir ( ) . unwrap ( ) ;
44
- let current_dir = binding. to_str ( ) . unwrap ( ) ;
45
-
46
- let status = Command :: new ( "docker" )
47
- . arg ( "run" )
48
- . arg ( "-v" )
49
- . arg ( format ! ( "{}:{}" , current_dir, current_dir) )
50
- . arg ( "-w" )
51
- . arg ( current_dir)
52
- . arg ( format ! ( "rails-new-{}-{}" , ruby_version, rails_version) )
53
- . arg ( "rails" )
54
- . arg ( "new" )
55
- . args ( cli. args )
36
+ let status = DockerClient :: run_image ( & ruby_version, & rails_version, cli. args )
56
37
. status ( )
57
38
. expect ( "Failed to execute process" ) ;
58
39
0 commit comments