|
3 | 3 | // use std::process::Command;
|
4 | 4 | mod rails_new;
|
5 | 5 | use rails_new::Cli;
|
6 |
| -use std::process::Command; |
| 6 | +use std::io::Write; |
| 7 | +use std::process::{Command, Stdio}; |
7 | 8 |
|
8 | 9 | use clap::Parser;
|
9 | 10 |
|
10 | 11 | fn main() {
|
11 | 12 | let cli = Cli::parse();
|
12 | 13 |
|
13 |
| - // Execute the bash file rails-new |
14 |
| - let status = Command::new("bash") |
15 |
| - .arg("bin/rails-new") |
16 |
| - .arg(cli.name) |
| 14 | + // read the content of the DOCKERFILE and store it in a variable |
| 15 | + let dockerfile = include_str!("../Dockerfile"); |
| 16 | + |
| 17 | + let ruby_version = cli.ruby_version.unwrap(); |
| 18 | + let rails_version = cli.rails_version.unwrap(); |
| 19 | + |
| 20 | + // Run docker build --build-arg RUBY_VERSION=$RUBY_VERSION --build-arg RAILS_VERSION=$RAILS_VERSION -t rails-new-$RUBY_VERSION-$RAILS_VERSION |
| 21 | + // 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()) |
| 32 | + .spawn() |
| 33 | + .expect("Failed to execute process"); |
| 34 | + |
| 35 | + let stdin = child.stdin.as_mut().expect("Failed to open stdin"); |
| 36 | + stdin.write_all(dockerfile.as_bytes()).unwrap(); |
| 37 | + |
| 38 | + let status = child.wait().expect("failed to wait on child"); |
| 39 | + |
| 40 | + assert!(status.success()); |
| 41 | + |
| 42 | + // 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) |
17 | 56 | .status()
|
18 | 57 | .expect("Failed to execute process");
|
19 | 58 |
|
|
0 commit comments