smbcloud_model/
deploy_config.rs1use {
2 crate::{project::DeploymentMethod, runner::Runner},
3 serde::{Deserialize, Serialize},
4};
5
6#[derive(Debug, Serialize, Deserialize, Clone)]
11pub struct DeployConfig {
12 pub id: String,
13 pub name: String,
14 pub runner: Runner,
15 pub deployment_method: DeploymentMethod,
16 #[serde(default)]
17 pub source_path: Option<String>,
18 #[serde(default)]
19 pub kind: Option<String>,
20 #[serde(default)]
21 pub remote_path: Option<String>,
22 #[serde(default)]
23 pub output_path: Option<String>,
24 #[serde(default)]
25 pub build_command: Option<String>,
26 #[serde(default)]
27 pub install_command: Option<String>,
28 #[serde(default)]
29 pub binary_name: Option<String>,
30 #[serde(default)]
31 pub build_target: Option<String>,
32 #[serde(default)]
33 pub package_manager: Option<String>,
34 #[serde(default)]
35 pub pm2_app: Option<String>,
36 #[serde(default)]
37 pub pm2_env: Option<std::collections::HashMap<String, serde_json::Value>>,
38 #[serde(default)]
44 pub process_manager: Option<String>,
45 #[serde(default)]
46 pub port: Option<u16>,
47 #[serde(default)]
48 pub shared_lib_path: Option<String>,
49 #[serde(default)]
50 pub project_id: Option<i32>,
51 #[serde(default)]
52 pub deploy_repo_id: Option<i64>,
53 #[serde(default)]
54 pub repository: Option<String>,
55 #[serde(default)]
57 pub publish_target: Option<String>,
58 #[serde(default)]
60 pub site_url: Option<String>,
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn deserializes_full_deploy_config() {
69 let json = r#"{
70 "id": "80b309e8-c39a-45b6-9121-e616fde3cd42",
71 "name": "onde-cloud",
72 "runner": 0,
73 "deployment_method": 1,
74 "source_path": ".",
75 "kind": "rust",
76 "remote_path": "apps/rest-api/onde-cloud",
77 "output_path": null,
78 "build_command": null,
79 "install_command": null,
80 "binary_name": "onde-cloud",
81 "build_target": "x86_64-unknown-linux-gnu",
82 "package_manager": null,
83 "pm2_app": null,
84 "port": 8090,
85 "shared_lib_path": null,
86 "project_id": 50,
87 "deploy_repo_id": 18,
88 "repository": "test"
89 }"#;
90
91 let config: DeployConfig = serde_json::from_str(json).expect("should deserialize");
92 assert_eq!(config.id, "80b309e8-c39a-45b6-9121-e616fde3cd42");
93 assert_eq!(config.kind.as_deref(), Some("rust"));
94 assert_eq!(
95 config.remote_path.as_deref(),
96 Some("apps/rest-api/onde-cloud")
97 );
98 assert_eq!(config.binary_name.as_deref(), Some("onde-cloud"));
99 assert_eq!(
100 config.build_target.as_deref(),
101 Some("x86_64-unknown-linux-gnu")
102 );
103 assert_eq!(config.port, Some(8090));
104 assert_eq!(config.runner, Runner::NodeJs);
105 }
106
107 #[test]
108 fn deserializes_minimal_deploy_config() {
109 let json = r#"{
110 "id": "abc-123",
111 "name": "my-app",
112 "runner": 4,
113 "deployment_method": 0
114 }"#;
115
116 let config: DeployConfig = serde_json::from_str(json).expect("should deserialize");
117 assert_eq!(config.id, "abc-123");
118 assert_eq!(config.runner, Runner::Rust);
119 assert!(config.kind.is_none());
120 assert!(config.remote_path.is_none());
121 assert!(config.port.is_none());
122 }
123}