@@ -479,3 +479,157 @@ pub(crate) struct RepoSettings {
479479 pub archived : bool ,
480480 pub auto_merge_enabled : bool ,
481481}
482+
483+ /// GitHub Repository Ruleset
484+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
485+ pub ( crate ) struct Ruleset {
486+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
487+ pub ( crate ) id : Option < i64 > ,
488+ pub ( crate ) name : String ,
489+ pub ( crate ) target : RulesetTarget ,
490+ pub ( crate ) source_type : RulesetSourceType ,
491+ pub ( crate ) enforcement : RulesetEnforcement ,
492+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
493+ pub ( crate ) bypass_actors : Option < Vec < RulesetBypassActor > > ,
494+ pub ( crate ) conditions : RulesetConditions ,
495+ pub ( crate ) rules : Vec < RulesetRule > ,
496+ }
497+
498+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
499+ #[ serde( rename_all = "lowercase" ) ]
500+ pub ( crate ) enum RulesetTarget {
501+ Branch ,
502+ Tag ,
503+ }
504+
505+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
506+ #[ serde( rename_all = "lowercase" ) ]
507+ pub ( crate ) enum RulesetSourceType {
508+ Repository ,
509+ Organization ,
510+ }
511+
512+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
513+ #[ serde( rename_all = "lowercase" ) ]
514+ pub ( crate ) enum RulesetEnforcement {
515+ Active ,
516+ Disabled ,
517+ Evaluate ,
518+ }
519+
520+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
521+ pub ( crate ) struct RulesetBypassActor {
522+ pub ( crate ) actor_id : i64 ,
523+ pub ( crate ) actor_type : RulesetActorType ,
524+ pub ( crate ) bypass_mode : RulesetBypassMode ,
525+ }
526+
527+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
528+ pub ( crate ) enum RulesetActorType {
529+ Integration ,
530+ OrganizationAdmin ,
531+ RepositoryRole ,
532+ Team ,
533+ }
534+
535+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
536+ #[ serde( rename_all = "lowercase" ) ]
537+ pub ( crate ) enum RulesetBypassMode {
538+ Always ,
539+ PullRequest ,
540+ }
541+
542+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
543+ pub ( crate ) struct RulesetConditions {
544+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
545+ pub ( crate ) ref_name : Option < RulesetRefNameCondition > ,
546+ }
547+
548+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
549+ pub ( crate ) struct RulesetRefNameCondition {
550+ pub ( crate ) include : Vec < String > ,
551+ pub ( crate ) exclude : Vec < String > ,
552+ }
553+
554+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
555+ #[ serde( tag = "type" , rename_all = "snake_case" ) ]
556+ pub ( crate ) enum RulesetRule {
557+ Creation ,
558+ Update ,
559+ Deletion ,
560+ RequiredLinearHistory ,
561+ MergeQueue {
562+ parameters : MergeQueueParameters ,
563+ } ,
564+ RequiredDeployments {
565+ parameters : RequiredDeploymentsParameters ,
566+ } ,
567+ RequiredSignatures ,
568+ PullRequest {
569+ parameters : PullRequestParameters ,
570+ } ,
571+ RequiredStatusChecks {
572+ parameters : RequiredStatusChecksParameters ,
573+ } ,
574+ NonFastForward ,
575+ }
576+
577+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
578+ pub ( crate ) struct MergeQueueParameters {
579+ pub ( crate ) check_response_timeout_minutes : i32 ,
580+ pub ( crate ) grouping_strategy : MergeQueueGroupingStrategy ,
581+ pub ( crate ) max_entries_to_build : i32 ,
582+ pub ( crate ) max_entries_to_merge : i32 ,
583+ pub ( crate ) merge_method : MergeQueueMergeMethod ,
584+ pub ( crate ) min_entries_to_merge : i32 ,
585+ pub ( crate ) min_entries_to_merge_wait_minutes : i32 ,
586+ }
587+
588+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
589+ #[ serde( rename_all = "SCREAMING_SNAKE_CASE" ) ]
590+ pub ( crate ) enum MergeQueueGroupingStrategy {
591+ Allgreen ,
592+ Headgreen ,
593+ }
594+
595+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
596+ #[ serde( rename_all = "SCREAMING_SNAKE_CASE" ) ]
597+ pub ( crate ) enum MergeQueueMergeMethod {
598+ Merge ,
599+ Squash ,
600+ Rebase ,
601+ }
602+
603+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
604+ pub ( crate ) struct RequiredDeploymentsParameters {
605+ pub ( crate ) required_deployment_environments : Vec < String > ,
606+ }
607+
608+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
609+ pub ( crate ) struct PullRequestParameters {
610+ pub ( crate ) dismiss_stale_reviews_on_push : bool ,
611+ pub ( crate ) require_code_owner_review : bool ,
612+ pub ( crate ) require_last_push_approval : bool ,
613+ pub ( crate ) required_approving_review_count : i32 ,
614+ pub ( crate ) required_review_thread_resolution : bool ,
615+ }
616+
617+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
618+ pub ( crate ) struct RequiredStatusChecksParameters {
619+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
620+ pub ( crate ) do_not_enforce_on_create : Option < bool > ,
621+ pub ( crate ) required_status_checks : Vec < RequiredStatusCheck > ,
622+ pub ( crate ) strict_required_status_checks_policy : bool ,
623+ }
624+
625+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
626+ pub ( crate ) struct RequiredStatusCheck {
627+ pub ( crate ) context : String ,
628+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
629+ pub ( crate ) integration_id : Option < i64 > ,
630+ }
631+
632+ pub ( crate ) enum RulesetOp {
633+ CreateForRepo ,
634+ UpdateRuleset ( i64 ) ,
635+ }
0 commit comments