diff --git a/crates/dagger-codegen/src/rust/templates/object_tmpl.rs b/crates/dagger-codegen/src/rust/templates/object_tmpl.rs index fe07f33..2fac8f8 100644 --- a/crates/dagger-codegen/src/rust/templates/object_tmpl.rs +++ b/crates/dagger-codegen/src/rust/templates/object_tmpl.rs @@ -3,7 +3,7 @@ use genco::prelude::rust; use genco::quote; use itertools::Itertools; -use crate::functions::{CommonFunctions}; +use crate::functions::CommonFunctions; use crate::rust::functions::{ field_options_struct_name, format_function, format_name, format_optional_args, format_struct_comment, format_struct_name, @@ -12,7 +12,7 @@ use crate::utility::OptionExt; pub fn render_object(funcs: &CommonFunctions, t: &FullType) -> eyre::Result { let selection = rust::import("crate::querybuilder", "Selection"); - let child = rust::import("std::process", "Child"); + let child = rust::import("tokio::process", "Child"); let conn = rust::import("dagger_core::connect_params", "ConnectParams"); let arc = rust::import("std::sync", "Arc"); diff --git a/crates/dagger-core/src/cli_session.rs b/crates/dagger-core/src/cli_session.rs index 42a62d6..87c88e4 100644 --- a/crates/dagger-core/src/cli_session.rs +++ b/crates/dagger-core/src/cli_session.rs @@ -6,6 +6,8 @@ use std::{ sync::Arc, }; +use tokio::io::AsyncBufReadExt; + use crate::{config::Config, connect_params::ConnectParams}; #[derive(Clone, Debug)] @@ -24,7 +26,7 @@ impl CliSession { &self, config: &Config, cli_path: &PathBuf, - ) -> eyre::Result<(ConnectParams, Child)> { + ) -> eyre::Result<(ConnectParams, tokio::process::Child)> { self.inner.connect(config, cli_path).await } } @@ -37,13 +39,13 @@ impl InnerCliSession { &self, config: &Config, cli_path: &PathBuf, - ) -> eyre::Result<(ConnectParams, Child)> { + ) -> eyre::Result<(ConnectParams, tokio::process::Child)> { let proc = self.start(config, cli_path)?; let params = self.get_conn(proc).await?; Ok(params) } - fn start(&self, config: &Config, cli_path: &PathBuf) -> eyre::Result { + fn start(&self, config: &Config, cli_path: &PathBuf) -> eyre::Result { let mut args: Vec = vec!["session".into()]; if let Some(workspace) = &config.workdir_path { let abs_path = canonicalize(workspace)?; @@ -54,7 +56,7 @@ impl InnerCliSession { args.extend(["--project".into(), abs_path.to_string_lossy().to_string()]) } - let proc = std::process::Command::new( + let proc = tokio::process::Command::new( cli_path .to_str() .ok_or(eyre::anyhow!("could not get string from path"))?, @@ -72,8 +74,8 @@ impl InnerCliSession { async fn get_conn( &self, - mut proc: std::process::Child, - ) -> eyre::Result<(ConnectParams, std::process::Child)> { + mut proc: tokio::process::Child, + ) -> eyre::Result<(ConnectParams, tokio::process::Child)> { let stdout = proc .stdout .take() @@ -87,22 +89,22 @@ impl InnerCliSession { let (sender, mut receiver) = tokio::sync::mpsc::channel(1); tokio::spawn(async move { - let stdout_bufr = BufReader::new(stdout); - for line in stdout_bufr.lines() { + let stdout_bufr = tokio::io::BufReader::new(stdout); + for line in stdout_bufr.lines().next_line().await { let out = line.as_ref().unwrap(); if let Ok(conn) = serde_json::from_str::(&out) { sender.send(conn).await.unwrap(); } - if let Ok(line) = line { + if let Some(line) = line { println!("dagger: {}", line); } } }); tokio::spawn(async move { - let stderr_bufr = BufReader::new(stderr); - for line in stderr_bufr.lines() { - if let Ok(line) = line { + let stdout_bufr = tokio::io::BufReader::new(stderr); + for line in stdout_bufr.lines().next_line().await { + if let Some(line) = line { println!("dagger: {}", line); } //panic!("could not start dagger session: {}", out) diff --git a/crates/dagger-core/src/engine.rs b/crates/dagger-core/src/engine.rs index 873a337..47c75be 100644 --- a/crates/dagger-core/src/engine.rs +++ b/crates/dagger-core/src/engine.rs @@ -11,7 +11,7 @@ impl Engine { Self {} } - async fn from_cli(&self, cfg: &Config) -> eyre::Result<(ConnectParams, Child)> { + async fn from_cli(&self, cfg: &Config) -> eyre::Result<(ConnectParams, tokio::process::Child)> { let cli = Downloader::new("0.3.12".into())?.get_cli().await?; let cli_session = CliSession::new(); @@ -19,7 +19,7 @@ impl Engine { Ok(cli_session.connect(cfg, &cli).await?) } - pub async fn start(&self, cfg: &Config) -> eyre::Result<(ConnectParams, Child)> { + pub async fn start(&self, cfg: &Config) -> eyre::Result<(ConnectParams, tokio::process::Child)> { // TODO: Add from existing session as well self.from_cli(cfg).await } diff --git a/crates/dagger-sdk/src/gen.rs b/crates/dagger-sdk/src/gen.rs index 64f76e6..9f3f01c 100644 --- a/crates/dagger-sdk/src/gen.rs +++ b/crates/dagger-sdk/src/gen.rs @@ -3,8 +3,8 @@ use crate::querybuilder::Selection; use dagger_core::connect_params::ConnectParams; use derive_builder::Builder; use serde::{Deserialize, Serialize}; -use std::process::Child; use std::sync::Arc; +use tokio::process::Child; #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)] pub struct CacheId(String); @@ -35,7 +35,7 @@ impl CacheVolume { pub async fn id( &self, ) -> eyre::Result { - let query = self.selection.select("id"); + let mut query = self.selection.select("id"); query.execute(&graphql_client(&self.conn)).await } @@ -216,7 +216,7 @@ impl Container { pub async fn default_args( &self, ) -> eyre::Result> { - let query = self.selection.select("defaultArgs"); + let mut query = self.selection.select("defaultArgs"); query.execute(&graphql_client(&self.conn)).await } @@ -239,7 +239,7 @@ impl Container { pub async fn entrypoint( &self, ) -> eyre::Result> { - let query = self.selection.select("entrypoint"); + let mut query = self.selection.select("entrypoint"); query.execute(&graphql_client(&self.conn)).await } @@ -258,7 +258,7 @@ impl Container { pub fn env_variables( &self, ) -> Vec { - let query = self.selection.select("envVariables"); + let mut query = self.selection.select("envVariables"); return vec![EnvVariable { proc: self.proc.clone(), @@ -274,7 +274,7 @@ impl Container { pub fn exec( &self, ) -> Container { - let query = self.selection.select("exec"); + let mut query = self.selection.select("exec"); return Container { proc: self.proc.clone(), @@ -321,7 +321,7 @@ impl Container { pub async fn exit_code( &self, ) -> eyre::Result { - let query = self.selection.select("exitCode"); + let mut query = self.selection.select("exitCode"); query.execute(&graphql_client(&self.conn)).await } @@ -405,7 +405,7 @@ impl Container { pub fn fs( &self, ) -> Directory { - let query = self.selection.select("fs"); + let mut query = self.selection.select("fs"); return Directory { proc: self.proc.clone(), @@ -417,7 +417,7 @@ impl Container { pub async fn id( &self, ) -> eyre::Result { - let query = self.selection.select("id"); + let mut query = self.selection.select("id"); query.execute(&graphql_client(&self.conn)).await } @@ -436,7 +436,7 @@ impl Container { pub fn labels( &self, ) -> Vec