You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. use dora_tracing::set_up_tracing;
  2. use eyre::{bail, Context};
  3. use std::path::Path;
  4. #[tokio::main]
  5. async fn main() -> eyre::Result<()> {
  6. set_up_tracing("cmake-dataflow-runner").wrap_err("failed to set up tracing")?;
  7. if cfg!(windows) {
  8. tracing::error!(
  9. "The c++ example does not work on Windows currently because of a linker error"
  10. );
  11. return Ok(());
  12. }
  13. let root = Path::new(env!("CARGO_MANIFEST_DIR"));
  14. std::env::set_current_dir(root.join(file!()).parent().unwrap())
  15. .wrap_err("failed to set working dir")?;
  16. tokio::fs::create_dir_all("build").await?;
  17. let mut cmd = tokio::process::Command::new("cmake");
  18. cmd.arg(format!("-DDORA_ROOT_DIR={}", root.display()));
  19. cmd.arg("-B").arg("build");
  20. cmd.arg(".");
  21. if !cmd.status().await?.success() {
  22. bail!("failed to generating make file");
  23. }
  24. let mut cmd = tokio::process::Command::new("cmake");
  25. cmd.arg("--build").arg("build");
  26. if !cmd.status().await?.success() {
  27. bail!("failed to build a cmake-generated project binary tree");
  28. }
  29. let mut cmd = tokio::process::Command::new("cmake");
  30. cmd.arg("--install").arg("build");
  31. if !cmd.status().await?.success() {
  32. bail!("failed to build a cmake-generated project binary tree");
  33. }
  34. let dataflow = Path::new("dataflow.yml").to_owned();
  35. build_package("dora-runtime").await?;
  36. run_dataflow(&dataflow).await?;
  37. Ok(())
  38. }
  39. async fn build_package(package: &str) -> eyre::Result<()> {
  40. let cargo = std::env::var("CARGO").unwrap();
  41. let mut cmd = tokio::process::Command::new(&cargo);
  42. cmd.arg("build");
  43. cmd.arg("--package").arg(package);
  44. if !cmd.status().await?.success() {
  45. bail!("failed to build {package}");
  46. }
  47. Ok(())
  48. }
  49. async fn run_dataflow(dataflow: &Path) -> eyre::Result<()> {
  50. let cargo = std::env::var("CARGO").unwrap();
  51. let mut cmd = tokio::process::Command::new(&cargo);
  52. cmd.arg("run");
  53. cmd.arg("--package").arg("dora-cli");
  54. cmd.arg("--")
  55. .arg("daemon")
  56. .arg("--run-dataflow")
  57. .arg(dataflow);
  58. if !cmd.status().await?.success() {
  59. bail!("failed to run dataflow");
  60. };
  61. Ok(())
  62. }