@smbcloud / cli / commits / 48cd8a4

add runner to project

Seto committed Oct 10, 2025 at 23:46 UTC 48cd8a4fdf212f98c3c7ed95ba62acd62ebb10bc
5 files changed +33 -2
crates/cli/src/deploy/setup_create_new_project.rs
+11 -1
@@ -1,10 +1,11 @@
1 use {
2 crate::token::get_smb_token::get_smb_token,
3 - dialoguer::{theme::ColorfulTheme, Input},
3 + dialoguer::{console::Term, theme::ColorfulTheme, Input, Select},
4 regex::Regex,
5 smbcloud_model::{
6 error_codes::{ErrorCode, ErrorResponse},
7 project::{Project, ProjectCreate},
8 + runner::Runner,
9 },
10 smbcloud_network::environment::Environment,
11 smbcloud_networking_project::crud_project_create::create_project,
@@ -73,6 +74,14 @@ pub(crate) async fn create_new_project(
74 }
75 };
76
77 + let runners = vec![Runner::NodeJs, Runner::Swift, Runner::Ruby];
78 + let runner = Select::with_theme(&ColorfulTheme::default())
79 + .items(&runners)
80 + .default(0)
81 + .interact_on_opt(&Term::stderr())
82 + .map(|i| runners[i.unwrap()])
83 + .unwrap();
84 +
85 let access_token = match get_smb_token(env) {
86 Ok(token) => token,
87 Err(_) => {
@@ -88,6 +97,7 @@ pub(crate) async fn create_new_project(
97 access_token,
98 ProjectCreate {
99 name,
100 + runner,
101 repository,
102 description,
103 },
crates/cli/src/project/crud_create.rs
+13
@@ -7,8 +7,11 @@ use crate::{
7 use anyhow::{anyhow, Result};
8 use chrono::Utc;
9 use console::style;
10 +use dialoguer::console::Term;
11 +use dialoguer::Select;
12 use dialoguer::{theme::ColorfulTheme, Input};
13 use smbcloud_model::project::ProjectCreate;
14 +use smbcloud_model::runner::Runner;
15 use smbcloud_network::environment::Environment;
16 use smbcloud_networking_project::crud_project_create::create_project;
17 use spinners::Spinner;
@@ -31,6 +34,15 @@ pub async fn process_project_init(
34 return Err(anyhow!(fail_message("Invalid project name.")));
35 }
36 };
37 +
38 + let runners = vec![Runner::NodeJs, Runner::Swift, Runner::Ruby];
39 + let runner = Select::with_theme(&ColorfulTheme::default())
40 + .items(&runners)
41 + .default(0)
42 + .interact_on_opt(&Term::stderr())
43 + .map(|i| runners[i.unwrap()])
44 + .unwrap();
45 +
46 let repository = match Input::<String>::with_theme(&ColorfulTheme::default())
47 .with_prompt("Repository name")
48 .interact()
@@ -65,6 +77,7 @@ pub async fn process_project_init(
77 access_token,
78 ProjectCreate {
79 name: project_name.clone(),
80 + runner,
81 repository,
82 description: description.clone(),
83 },
crates/cli/src/project/crud_read.rs
+3
@@ -19,6 +19,8 @@ struct ProjectRow {
19 id: i32,
20 #[tabled(rename = "Name")]
21 name: String,
22 + #[tabled(rename = "Runner")]
23 + runner: String,
24 #[tabled(rename = "Repository")]
25 repository: String,
26 #[tabled(rename = "Description")]
@@ -112,6 +114,7 @@ pub(crate) fn show_projects(projects: Vec<Project>) {
114 .map(|p| ProjectRow {
115 id: p.id,
116 name: p.name,
117 + runner: p.runner.to_string(),
118 repository: p.repository.unwrap_or("-".to_string()),
119 description: p.description.unwrap_or("-".to_owned()),
120 })
crates/smbcloud-model/src/project.rs
+3
@@ -36,6 +36,7 @@ pub struct ProjectCreate {
36 pub name: String,
37 pub repository: String,
38 pub description: String,
39 + pub runner: Runner,
40 }
41
42 #[derive(Deserialize, Serialize, Debug)]
@@ -86,11 +87,13 @@ mod tests {
87 name: "test".to_owned(),
88 repository: "test".to_owned(),
89 description: "test".to_owned(),
90 + runner: Runner::NodeJs,
91 };
92 let json = json!({
93 "name": "test",
94 "repository": "test", // Corrected: repository should be included as per struct
95 "description": "test",
96 + "runner": 0
97 });
98 assert_eq!(serde_json::to_value(project_create).unwrap(), json);
99 }
crates/smbcloud-model/src/runner.rs
+3 -1
@@ -1,6 +1,7 @@
1 use {
2 crate::error_codes::{ErrorCode::UnsupportedRunner, ErrorResponse},
3 serde::{Deserialize, Serialize},
4 + serde_repr::{Deserialize_repr, Serialize_repr},
5 std::{
6 fmt::{self, Display, Formatter},
7 fs,
@@ -8,7 +9,8 @@ use {
9 },
10 };
11
11 -#[derive(Debug, Serialize, Deserialize, Clone)]
12 +#[derive(Debug, Deserialize_repr, Serialize_repr, Clone, Copy)]
13 +#[repr(u8)]
14 #[tsync::tsync]
15 pub enum Runner {
16 NodeJs,