@@ -479,3 +479,158 @@ 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+ #[ serde( rename_all = "snake_case" ) ]
529+ pub ( crate ) enum RulesetActorType {
530+ Integration ,
531+ OrganizationAdmin ,
532+ RepositoryRole ,
533+ Team ,
534+ }
535+
536+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
537+ #[ serde( rename_all = "snake_case" ) ]
538+ pub ( crate ) enum RulesetBypassMode {
539+ Always ,
540+ PullRequest ,
541+ }
542+
543+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
544+ pub ( crate ) struct RulesetConditions {
545+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
546+ pub ( crate ) ref_name : Option < RulesetRefNameCondition > ,
547+ }
548+
549+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
550+ pub ( crate ) struct RulesetRefNameCondition {
551+ pub ( crate ) include : Vec < String > ,
552+ pub ( crate ) exclude : Vec < String > ,
553+ }
554+
555+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
556+ #[ serde( tag = "type" , rename_all = "snake_case" ) ]
557+ pub ( crate ) enum RulesetRule {
558+ Creation ,
559+ Update ,
560+ Deletion ,
561+ RequiredLinearHistory ,
562+ MergeQueue {
563+ parameters : MergeQueueParameters ,
564+ } ,
565+ RequiredDeployments {
566+ parameters : RequiredDeploymentsParameters ,
567+ } ,
568+ RequiredSignatures ,
569+ PullRequest {
570+ parameters : PullRequestParameters ,
571+ } ,
572+ RequiredStatusChecks {
573+ parameters : RequiredStatusChecksParameters ,
574+ } ,
575+ NonFastForward ,
576+ }
577+
578+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
579+ pub ( crate ) struct MergeQueueParameters {
580+ pub ( crate ) check_response_timeout_minutes : i32 ,
581+ pub ( crate ) grouping_strategy : MergeQueueGroupingStrategy ,
582+ pub ( crate ) max_entries_to_build : i32 ,
583+ pub ( crate ) max_entries_to_merge : i32 ,
584+ pub ( crate ) merge_method : MergeQueueMergeMethod ,
585+ pub ( crate ) min_entries_to_merge : i32 ,
586+ pub ( crate ) min_entries_to_merge_wait_minutes : i32 ,
587+ }
588+
589+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
590+ #[ serde( rename_all = "SCREAMING_SNAKE_CASE" ) ]
591+ pub ( crate ) enum MergeQueueGroupingStrategy {
592+ Allgreen ,
593+ Headgreen ,
594+ }
595+
596+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
597+ #[ serde( rename_all = "SCREAMING_SNAKE_CASE" ) ]
598+ pub ( crate ) enum MergeQueueMergeMethod {
599+ Merge ,
600+ Squash ,
601+ Rebase ,
602+ }
603+
604+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
605+ pub ( crate ) struct RequiredDeploymentsParameters {
606+ pub ( crate ) required_deployment_environments : Vec < String > ,
607+ }
608+
609+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
610+ pub ( crate ) struct PullRequestParameters {
611+ pub ( crate ) dismiss_stale_reviews_on_push : bool ,
612+ pub ( crate ) require_code_owner_review : bool ,
613+ pub ( crate ) require_last_push_approval : bool ,
614+ pub ( crate ) required_approving_review_count : i32 ,
615+ pub ( crate ) required_review_thread_resolution : bool ,
616+ }
617+
618+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
619+ pub ( crate ) struct RequiredStatusChecksParameters {
620+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
621+ pub ( crate ) do_not_enforce_on_create : Option < bool > ,
622+ pub ( crate ) required_status_checks : Vec < RequiredStatusCheck > ,
623+ pub ( crate ) strict_required_status_checks_policy : bool ,
624+ }
625+
626+ #[ derive( Clone , Debug , PartialEq , Eq , serde:: Serialize , serde:: Deserialize ) ]
627+ pub ( crate ) struct RequiredStatusCheck {
628+ pub ( crate ) context : String ,
629+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
630+ pub ( crate ) integration_id : Option < i64 > ,
631+ }
632+
633+ pub ( crate ) enum RulesetOp {
634+ CreateForRepo ,
635+ UpdateRuleset ( i64 ) ,
636+ }
0 commit comments