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.

run.rs 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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("rust-dataflow-runner").wrap_err("failed to set up tracing subscriber")?;
  7. let root = Path::new(env!("CARGO_MANIFEST_DIR"));
  8. std::env::set_current_dir(root.join(file!()).parent().unwrap())
  9. .wrap_err("failed to set working dir")?;
  10. let args: Vec<String> = std::env::args().collect();
  11. let dataflow = if args.len() > 1 {
  12. Path::new(&args[1])
  13. } else {
  14. Path::new("dataflow.yml")
  15. };
  16. build_dataflow(dataflow).await?;
  17. run_dataflow(dataflow).await?;
  18. Ok(())
  19. }
  20. async fn build_dataflow(dataflow: &Path) -> eyre::Result<()> {
  21. let cargo = std::env::var("CARGO").unwrap();
  22. let mut cmd = tokio::process::Command::new(&cargo);
  23. cmd.arg("run");
  24. cmd.arg("--package").arg("dora-cli");
  25. cmd.arg("--release");
  26. cmd.arg("--").arg("build").arg(dataflow);
  27. if !cmd.status().await?.success() {
  28. bail!("failed to build dataflow");
  29. };
  30. Ok(())
  31. }
  32. async fn run_dataflow(dataflow: &Path) -> eyre::Result<()> {
  33. let cargo = std::env::var("CARGO").unwrap();
  34. let mut cmd = tokio::process::Command::new(&cargo);
  35. cmd.arg("run");
  36. cmd.arg("--package").arg("dora-cli");
  37. cmd.arg("--release");
  38. cmd.arg("--")
  39. .arg("daemon")
  40. .arg("--run-dataflow")
  41. .arg(dataflow);
  42. if !cmd.status().await?.success() {
  43. bail!("failed to run dataflow");
  44. };
  45. Ok(())
  46. }