@smbcloud / cli / commits / 2a84b1f

add update project runner

Seto committed Oct 10, 2025 at 23:58 UTC 2a84b1f53a3d373fec1f069d09dc03ac49976add
3 files changed +21 -12
crates/cli/src/project/crud_update.rs
+15 -7
@@ -1,9 +1,10 @@
1 use crate::token::{get_smb_token::get_smb_token, is_logged_in::is_logged_in};
2 use anyhow::{anyhow, Result};
3 -use dialoguer::{theme::ColorfulTheme, Input};
3 +use dialoguer::{console::Term, theme::ColorfulTheme, Input, Select};
4 +use smbcloud_model::runner::Runner;
5 use smbcloud_network::environment::Environment;
6 use smbcloud_networking_project::{
6 - crud_project_read::get_project, crud_project_update::update_project_description,
7 + crud_project_read::get_project, crud_project_update::update_project,
8 };
9 use spinners::Spinner;
10
@@ -13,10 +14,7 @@ use crate::{
14 ui::{description, succeed_message, succeed_symbol},
15 };
16
16 -pub async fn process_project_update_description(
17 - env: Environment,
18 - project_id: String,
19 -) -> Result<CommandResult> {
17 +pub async fn process_project_update(env: Environment, project_id: String) -> Result<CommandResult> {
18 // Check credentials.
19 let is_logged_in = is_logged_in(env).await?;
20 if !is_logged_in {
@@ -29,6 +27,7 @@ pub async fn process_project_update_description(
27 if let Some(project_description) = project.description {
28 println!("Description: {}", description(&project_description));
29 }
30 + println!("Runner: {}", project.runner);
31
32 // Prompt for new description
33 let new_description = match Input::<String>::with_theme(&ColorfulTheme::default())
@@ -38,11 +37,20 @@ pub async fn process_project_update_description(
37 Ok(desc) => desc,
38 Err(_) => return Err(anyhow!("Invalid description.")),
39 };
40 +
41 + let runners = vec![Runner::NodeJs, Runner::Swift, Runner::Ruby];
42 + let runner = Select::with_theme(&ColorfulTheme::default())
43 + .items(&runners)
44 + .default(0)
45 + .interact_on_opt(&Term::stderr())
46 + .map(|i| runners[i.unwrap()])
47 + .unwrap();
48 +
49 let spinner = Spinner::new(
50 spinners::Spinners::SimpleDotsScrolling,
51 succeed_message("Loading"),
52 );
45 - update_project_description(env, access_token, project_id, &new_description).await?;
53 + update_project(env, access_token, project_id, &new_description, runner).await?;
54 Ok(CommandResult {
55 spinner,
56 symbol: succeed_symbol(),
crates/cli/src/project/process.rs
+2 -2
@@ -5,7 +5,7 @@ use crate::{
5 crud_create::process_project_init,
6 crud_delete::process_project_delete,
7 crud_read::{process_project_list, process_project_show, process_project_use},
8 - crud_update::process_project_update_description,
8 + crud_update::process_project_update,
9 deployment::process_deployment,
10 },
11 };
@@ -20,6 +20,6 @@ pub async fn process_project(env: Environment, commands: Commands) -> Result<Com
20 Commands::Delete { id } => process_project_delete(env, id).await,
21 Commands::Use { id } => process_project_use(env, id).await,
22 Commands::Deployment { id } => process_deployment(env, id).await,
23 - Commands::Update { id } => process_project_update_description(env, id).await,
23 + Commands::Update { id } => process_project_update(env, id).await,
24 }
25 }
crates/smbcloud-networking-project/src/crud_project_update.rs
+4 -3
@@ -1,14 +1,15 @@
1 use crate::url_builder::build_project_url_with_id;
2 use reqwest::Client;
3 -use smbcloud_model::{error_codes::ErrorResponse, project::Project};
3 +use smbcloud_model::{error_codes::ErrorResponse, project::Project, runner::Runner};
4 use smbcloud_network::{environment::Environment, network::request};
5 use smbcloud_networking::constants::SMB_USER_AGENT;
6
7 -pub async fn update_project_description(
7 +pub async fn update_project(
8 env: Environment,
9 access_token: String,
10 project_id: String,
11 new_description: &str,
12 + runner: Runner,
13 ) -> Result<Project, ErrorResponse> {
14 // PATCH is correct for partial update of description
15 let url = build_project_url_with_id(env, project_id.to_string());
@@ -16,6 +17,6 @@ pub async fn update_project_description(
17 .patch(url)
18 .header("Authorization", access_token)
19 .header("User-agent", SMB_USER_AGENT)
19 - .json(&serde_json::json!({ "description": new_description }));
20 + .json(&serde_json::json!({ "description": new_description, "runner": runner }));
21 request(builder).await
22 }