feat(workout): make created apps self-service
Write a standalone hemx-workout command into created apps and verify it carries dev, test, build, mobile-release, mobile-verify, runtime integrity, and store blocker checks outside the monorepo. req: examples/006
This commit is contained in:
+19
-7
@@ -143,14 +143,10 @@ fn create_workout_app(destination: &Path) -> std::io::Result<()> {
|
|||||||
.replace(
|
.replace(
|
||||||
"path = \"../../hemx-build\"",
|
"path = \"../../hemx-build\"",
|
||||||
&format!("path = \"{}\"", root.join("hemx-build").display()),
|
&format!("path = \"{}\"", root.join("hemx-build").display()),
|
||||||
)
|
),
|
||||||
.replace("hemx_workout_example", "hemx_workout_app"),
|
|
||||||
)?;
|
|
||||||
replace_in_file(
|
|
||||||
&destination.join("src/main.rs"),
|
|
||||||
"hemx_workout_example",
|
|
||||||
"hemx_workout_app",
|
|
||||||
)?;
|
)?;
|
||||||
|
replace_in_tree(destination, "hemx_workout_example", "hemx_workout_app")?;
|
||||||
|
replace_in_tree(destination, "hemx-workout-example", "workout-app")?;
|
||||||
write_workout_app_command(destination)?;
|
write_workout_app_command(destination)?;
|
||||||
fs::write(
|
fs::write(
|
||||||
destination.join("CREATED.md"),
|
destination.join("CREATED.md"),
|
||||||
@@ -175,6 +171,17 @@ fn replace_in_file(path: &Path, from: &str, to: &str) -> std::io::Result<()> {
|
|||||||
fs::write(path, contents.replace(from, to))
|
fs::write(path, contents.replace(from, to))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn replace_in_tree(path: &Path, from: &str, to: &str) -> std::io::Result<()> {
|
||||||
|
if path.is_dir() {
|
||||||
|
for entry in fs::read_dir(path)? {
|
||||||
|
replace_in_tree(&entry?.path(), from, to)?;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
replace_in_file(path, from, to)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn write_workout_app_command(destination: &Path) -> std::io::Result<()> {
|
fn write_workout_app_command(destination: &Path) -> std::io::Result<()> {
|
||||||
let script_path = destination.join("hemx-workout");
|
let script_path = destination.join("hemx-workout");
|
||||||
fs::write(&script_path, workout_app_command_script())?;
|
fs::write(&script_path, workout_app_command_script())?;
|
||||||
@@ -1070,8 +1077,13 @@ mod tests {
|
|||||||
assert!(manifest.contains("edition = \"2021\""));
|
assert!(manifest.contains("edition = \"2021\""));
|
||||||
assert!(manifest.contains("hemx-build"));
|
assert!(manifest.contains("hemx-build"));
|
||||||
let main_rs = fs::read_to_string(destination.join("src/main.rs")).expect("main rs");
|
let main_rs = fs::read_to_string(destination.join("src/main.rs")).expect("main rs");
|
||||||
|
let e2e_rs = fs::read_to_string(destination.join("tests/e2e.rs")).expect("e2e rs");
|
||||||
assert!(main_rs.contains("hemx_workout_app"));
|
assert!(main_rs.contains("hemx_workout_app"));
|
||||||
|
assert!(e2e_rs.contains("hemx_workout_app"));
|
||||||
|
assert!(e2e_rs.contains("CARGO_BIN_EXE_workout-app"));
|
||||||
assert!(!main_rs.contains("hemx_workout_example"));
|
assert!(!main_rs.contains("hemx_workout_example"));
|
||||||
|
assert!(!e2e_rs.contains("hemx_workout_example"));
|
||||||
|
assert!(!e2e_rs.contains("hemx-workout-example"));
|
||||||
let command = fs::read_to_string(destination.join("hemx-workout")).expect("command");
|
let command = fs::read_to_string(destination.join("hemx-workout")).expect("command");
|
||||||
assert!(command.contains("mobile-release"));
|
assert!(command.contains("mobile-release"));
|
||||||
assert!(command.contains("mobile-verify"));
|
assert!(command.contains("mobile-verify"));
|
||||||
|
|||||||
Reference in New Issue
Block a user