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.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. use eyre::{bail, Context};
  2. use std::path::Path;
  3. use tracing::metadata::LevelFilter;
  4. use tracing_subscriber::Layer;
  5. #[tokio::main]
  6. async fn main() -> eyre::Result<()> {
  7. set_up_tracing().wrap_err("failed to set up tracing subscriber")?;
  8. let root = Path::new(env!("CARGO_MANIFEST_DIR"));
  9. std::env::set_current_dir(root.join(file!()).parent().unwrap())
  10. .wrap_err("failed to set working dir")?;
  11. let dataflow = Path::new("dataflow.yml");
  12. build_dataflow(dataflow).await?;
  13. build_package("dora-runtime").await?;
  14. let dora_runtime_path = Some(root.join("target").join("debug").join("dora-runtime"));
  15. dora_daemon::Daemon::run_dataflow(dataflow, dora_runtime_path).await?;
  16. Ok(())
  17. }
  18. async fn build_dataflow(dataflow: &Path) -> eyre::Result<()> {
  19. let cargo = std::env::var("CARGO").unwrap();
  20. let mut cmd = tokio::process::Command::new(&cargo);
  21. cmd.arg("run");
  22. cmd.arg("--package").arg("dora-cli");
  23. cmd.arg("--").arg("build").arg(dataflow);
  24. if !cmd.status().await?.success() {
  25. bail!("failed to build dataflow");
  26. };
  27. Ok(())
  28. }
  29. async fn build_package(package: &str) -> eyre::Result<()> {
  30. let cargo = std::env::var("CARGO").unwrap();
  31. let mut cmd = tokio::process::Command::new(&cargo);
  32. cmd.arg("build");
  33. cmd.arg("--package").arg(package);
  34. if !cmd.status().await?.success() {
  35. bail!("failed to build {package}");
  36. };
  37. Ok(())
  38. }
  39. fn set_up_tracing() -> eyre::Result<()> {
  40. use tracing_subscriber::prelude::__tracing_subscriber_SubscriberExt;
  41. let stdout_log = tracing_subscriber::fmt::layer()
  42. .pretty()
  43. .with_filter(LevelFilter::DEBUG);
  44. let subscriber = tracing_subscriber::Registry::default().with(stdout_log);
  45. tracing::subscriber::set_global_default(subscriber)
  46. .context("failed to set tracing global subscriber")
  47. }

DORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed datafl