@@ -14,6 +14,7 @@ pub enum BuildTriggerType {
1414 Webhook ,
1515 Schedule ,
1616 WebEdit ,
17+ BuckFileUpload ,
1718}
1819
1920impl fmt:: Display for BuildTriggerType {
@@ -25,6 +26,7 @@ impl fmt::Display for BuildTriggerType {
2526 BuildTriggerType :: Webhook => "webhook" ,
2627 BuildTriggerType :: Schedule => "schedule" ,
2728 BuildTriggerType :: WebEdit => "webedit" ,
29+ BuildTriggerType :: BuckFileUpload => "buck_file_upload" ,
2830 } ;
2931 write ! ( f, "{}" , s)
3032 }
@@ -160,6 +162,26 @@ pub struct WebEditPayload {
160162 pub triggered_by : Option < String > ,
161163}
162164
165+ /// Payload for Buck file upload trigger
166+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
167+ pub struct BuckFileUploadPayload {
168+ pub repo : String ,
169+ pub from_hash : String ,
170+ pub commit_hash : String ,
171+ pub cl_link : String ,
172+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
173+ pub cl_id : Option < i64 > ,
174+ pub builds : serde_json:: Value ,
175+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
176+ pub triggered_by : Option < String > ,
177+ /// Target branch name; always "main" for current single-branch upload flow
178+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
179+ pub ref_name : Option < String > ,
180+ /// Ref type for display; always "branch" for current flow
181+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
182+ pub ref_type : Option < String > ,
183+ }
184+
163185/// Trigger payload - stores context specific to each trigger type
164186/// This enum is serialized to JSON and stored in database's trigger_payload column
165187#[ derive( Debug , Clone , Serialize , Deserialize ) ]
@@ -171,6 +193,7 @@ pub enum BuildTriggerPayload {
171193 Webhook ( WebhookPayload ) ,
172194 Schedule ( SchedulePayload ) ,
173195 WebEdit ( WebEditPayload ) ,
196+ BuckFileUpload ( BuckFileUploadPayload ) ,
174197}
175198
176199impl BuildTriggerPayload {
@@ -182,6 +205,7 @@ impl BuildTriggerPayload {
182205 BuildTriggerPayload :: Webhook ( p) => & p. repo ,
183206 BuildTriggerPayload :: Schedule ( p) => & p. repo ,
184207 BuildTriggerPayload :: WebEdit ( p) => & p. repo ,
208+ BuildTriggerPayload :: BuckFileUpload ( p) => & p. repo ,
185209 }
186210 }
187211
@@ -193,6 +217,7 @@ impl BuildTriggerPayload {
193217 BuildTriggerPayload :: Webhook ( p) => & p. commit_hash ,
194218 BuildTriggerPayload :: Schedule ( p) => & p. commit_hash ,
195219 BuildTriggerPayload :: WebEdit ( p) => & p. commit_hash ,
220+ BuildTriggerPayload :: BuckFileUpload ( p) => & p. commit_hash ,
196221 }
197222 }
198223
@@ -204,6 +229,7 @@ impl BuildTriggerPayload {
204229 BuildTriggerPayload :: Webhook ( p) => & p. cl_link ,
205230 BuildTriggerPayload :: Schedule ( p) => & p. cl_link ,
206231 BuildTriggerPayload :: WebEdit ( p) => & p. cl_link ,
232+ BuildTriggerPayload :: BuckFileUpload ( p) => & p. cl_link ,
207233 }
208234 }
209235
@@ -215,6 +241,7 @@ impl BuildTriggerPayload {
215241 BuildTriggerPayload :: Webhook ( p) => p. cl_id ,
216242 BuildTriggerPayload :: Schedule ( p) => p. cl_id ,
217243 BuildTriggerPayload :: WebEdit ( p) => p. cl_id ,
244+ BuildTriggerPayload :: BuckFileUpload ( p) => p. cl_id ,
218245 }
219246 }
220247
@@ -226,6 +253,7 @@ impl BuildTriggerPayload {
226253 BuildTriggerPayload :: Webhook ( _) => None ,
227254 BuildTriggerPayload :: Schedule ( _) => None ,
228255 BuildTriggerPayload :: WebEdit ( p) => p. triggered_by . as_deref ( ) ,
256+ BuildTriggerPayload :: BuckFileUpload ( p) => p. triggered_by . as_deref ( ) ,
229257 }
230258 }
231259
@@ -237,6 +265,7 @@ impl BuildTriggerPayload {
237265 BuildTriggerPayload :: Webhook ( _) => "" ,
238266 BuildTriggerPayload :: Schedule ( _) => "" ,
239267 BuildTriggerPayload :: WebEdit ( p) => & p. from_hash ,
268+ BuildTriggerPayload :: BuckFileUpload ( p) => & p. from_hash ,
240269 }
241270 }
242271}
@@ -373,6 +402,36 @@ impl TriggerContext {
373402 ref_type : None ,
374403 }
375404 }
405+
406+ /// Build context for Buck file upload trigger.
407+ /// Caller should set context.ref_name and context.ref_type after construction (same as Manual).
408+ pub fn from_buck_upload (
409+ repo_path : String ,
410+ from_hash : String ,
411+ commit_hash : String ,
412+ cl_link : String ,
413+ cl_id : Option < i64 > ,
414+ triggered_by : Option < String > ,
415+ ) -> Self {
416+ Self {
417+ trigger_type : BuildTriggerType :: BuckFileUpload ,
418+ trigger_source : if triggered_by. is_some ( ) {
419+ TriggerSource :: User
420+ } else {
421+ TriggerSource :: System
422+ } ,
423+ triggered_by,
424+ repo_path,
425+ from_hash,
426+ commit_hash,
427+ cl_link : Some ( cl_link) ,
428+ cl_id,
429+ params : None ,
430+ original_trigger_id : None ,
431+ ref_name : None ,
432+ ref_type : None ,
433+ }
434+ }
376435}
377436
378437impl From < mega_cl:: Model > for TriggerContext {
@@ -458,6 +517,9 @@ impl TriggerResponse {
458517 p. ref_type . clone ( ) ,
459518 ) ,
460519 BuildTriggerPayload :: Webhook ( p) => ( p. raw_payload . clone ( ) , None , None , None ) ,
520+ BuildTriggerPayload :: BuckFileUpload ( p) => {
521+ ( None , None , p. ref_name . clone ( ) , p. ref_type . clone ( ) )
522+ }
461523 _ => ( None , None , None , None ) ,
462524 } ;
463525
0 commit comments