Skip to content

Commit e82a97d

Browse files
committed
add cargo to rulesets
1 parent b7d8905 commit e82a97d

9 files changed

Lines changed: 360 additions & 99 deletions

File tree

config.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ members-without-zulip-id = [
8484

8585
enable-rulesets-repos = [
8686
"rust-lang/bors",
87+
"rust-lang/cargo",
8788
"rust-lang/crates.io",
8889
"rust-lang/rustfmt",
8990
]

repos/rust-lang/cargo.toml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,21 @@ cargo = "write"
1010
[[branch-protections]]
1111
pattern = "master"
1212
ci-checks = ["conclusion"]
13+
merge-queue = true
1314

1415
[[branch-protections]]
1516
pattern = "rust-1.*"
1617
ci-checks = ["conclusion"]
1718

19+
[[branch-protections]]
20+
name = "Only allow the release process to publish tags"
21+
pattern = "0.*"
22+
target = "tag"
23+
pr-required = false
24+
allowed-merge-apps = ["promote-release"]
25+
prevent-update = true
26+
1827
[environments.github-pages]
1928

2029
[environments.release]
2130
tags = ["*"]
22-

rust_team_data/src/v1.rs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,22 +252,34 @@ pub enum MergeBot {
252252
RustTimer,
253253
Bors,
254254
WorkflowsCratesIo,
255+
PromoteRelease,
255256
}
256257

257258
impl MergeBot {
258259
pub fn app_id(&self) -> Option<i64> {
259260
match self {
260261
MergeBot::WorkflowsCratesIo => Some(2201425),
261262
MergeBot::Bors => Some(278306),
263+
MergeBot::PromoteRelease => Some(217112),
262264
// These are user-based bots, not GitHub Apps
263265
MergeBot::RustTimer | MergeBot::Homu => None,
264266
}
265267
}
266268
}
267269

270+
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
271+
#[serde(rename_all = "snake_case")]
272+
pub enum ProtectionTarget {
273+
#[default]
274+
Branch,
275+
Tag,
276+
}
277+
268278
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
269279
pub struct BranchProtection {
270280
pub pattern: String,
281+
#[serde(default, skip_serializing_if = "is_branch_target")]
282+
pub target: ProtectionTarget,
271283
#[serde(default, skip_serializing_if = "Option::is_none")]
272284
pub name: Option<String>,
273285
pub dismiss_stale_review: bool,
@@ -276,11 +288,16 @@ pub struct BranchProtection {
276288
pub merge_bots: Vec<MergeBot>,
277289
pub allowed_merge_apps: Vec<MergeBot>,
278290
pub merge_queue: bool,
279-
#[serde(default = "default_true")]
291+
#[serde(default = "branch_protection_default_prevent_creation")]
280292
pub prevent_creation: bool,
281-
#[serde(default = "default_true")]
293+
#[serde(
294+
default = "branch_protection_default_prevent_update",
295+
skip_serializing_if = "is_false"
296+
)]
297+
pub prevent_update: bool,
298+
#[serde(default = "branch_protection_default_prevent_deletion")]
282299
pub prevent_deletion: bool,
283-
#[serde(default = "default_true")]
300+
#[serde(default = "branch_protection_default_prevent_force_push")]
284301
pub prevent_force_push: bool,
285302
}
286303

@@ -312,6 +329,26 @@ pub struct People {
312329
pub people: IndexMap<String, Person>,
313330
}
314331

315-
fn default_true() -> bool {
332+
pub const fn branch_protection_default_prevent_creation() -> bool {
333+
true
334+
}
335+
336+
pub const fn branch_protection_default_prevent_update() -> bool {
337+
false
338+
}
339+
340+
pub const fn branch_protection_default_prevent_deletion() -> bool {
316341
true
317342
}
343+
344+
pub const fn branch_protection_default_prevent_force_push() -> bool {
345+
true
346+
}
347+
348+
fn is_branch_target(target: &ProtectionTarget) -> bool {
349+
matches!(target, ProtectionTarget::Branch)
350+
}
351+
352+
fn is_false(value: &bool) -> bool {
353+
!*value
354+
}

src/schema.rs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -861,13 +861,24 @@ pub(crate) enum AllowedMergeApp {
861861
RustTimer,
862862
Bors,
863863
WorkflowsCratesIo,
864+
PromoteRelease,
865+
}
866+
867+
#[derive(serde::Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
868+
#[serde(rename_all = "kebab-case")]
869+
pub(crate) enum ProtectionTarget {
870+
#[default]
871+
Branch,
872+
Tag,
864873
}
865874

866875
#[derive(serde::Deserialize, Debug)]
867876
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
868877
pub(crate) struct BranchProtection {
869878
pub pattern: String,
870879
#[serde(default)]
880+
pub target: ProtectionTarget,
881+
#[serde(default)]
871882
pub name: Option<String>,
872883
#[serde(default)]
873884
pub ci_checks: Vec<String>,
@@ -883,11 +894,13 @@ pub(crate) struct BranchProtection {
883894
pub allowed_merge_apps: Vec<AllowedMergeApp>,
884895
#[serde(default)]
885896
pub merge_queue: bool,
886-
#[serde(default = "default_true")]
897+
#[serde(default = "rust_team_data::v1::branch_protection_default_prevent_creation")]
887898
pub prevent_creation: bool,
888-
#[serde(default = "default_true")]
899+
#[serde(default = "rust_team_data::v1::branch_protection_default_prevent_update")]
900+
pub prevent_update: bool,
901+
#[serde(default = "rust_team_data::v1::branch_protection_default_prevent_deletion")]
889902
pub prevent_deletion: bool,
890-
#[serde(default = "default_true")]
903+
#[serde(default = "rust_team_data::v1::branch_protection_default_prevent_force_push")]
891904
pub prevent_force_push: bool,
892905
}
893906

src/static_api.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ impl<'a> Generator<'a> {
5454
.iter()
5555
.map(|b| v1::BranchProtection {
5656
pattern: b.pattern.clone(),
57+
target: match b.target {
58+
schema::ProtectionTarget::Branch => v1::ProtectionTarget::Branch,
59+
schema::ProtectionTarget::Tag => v1::ProtectionTarget::Tag,
60+
},
5761
name: b.name.clone(),
5862
dismiss_stale_review: b.dismiss_stale_review,
5963
mode: if b.pr_required {
@@ -72,10 +76,12 @@ impl<'a> Generator<'a> {
7276
AllowedMergeApp::RustTimer => v1::MergeBot::RustTimer,
7377
AllowedMergeApp::Bors => v1::MergeBot::Bors,
7478
AllowedMergeApp::WorkflowsCratesIo => v1::MergeBot::WorkflowsCratesIo,
79+
AllowedMergeApp::PromoteRelease => v1::MergeBot::PromoteRelease,
7580
})
7681
.collect(),
7782
merge_queue: b.merge_queue,
7883
prevent_creation: b.prevent_creation,
84+
prevent_update: b.prevent_update,
7985
prevent_deletion: b.prevent_deletion,
8086
prevent_force_push: b.prevent_force_push,
8187
// This field is empty for retrocompatibility with triagebot

src/sync/github/api/mod.rs

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -538,23 +538,32 @@ pub(crate) struct Ruleset {
538538
pub(crate) rules: BTreeSet<RulesetRule>,
539539
}
540540

541-
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
541+
#[derive(
542+
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
543+
)]
542544
#[serde(rename_all = "lowercase")]
543545
pub(crate) enum RulesetTarget {
546+
#[default]
544547
Branch,
545548
Tag,
546549
}
547550

548-
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
551+
#[derive(
552+
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
553+
)]
549554
#[serde(rename_all = "PascalCase")]
550555
pub(crate) enum RulesetSourceType {
556+
#[default]
551557
Repository,
552558
Organization,
553559
}
554560

555-
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
561+
#[derive(
562+
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
563+
)]
556564
#[serde(rename_all = "lowercase")]
557565
pub(crate) enum RulesetEnforcement {
566+
#[default]
558567
Active,
559568
Disabled,
560569
Evaluate,
@@ -628,21 +637,48 @@ pub(crate) struct MergeQueueParameters {
628637
pub(crate) min_entries_to_merge_wait_minutes: i32,
629638
}
630639

631-
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
640+
pub(crate) const DEFAULT_MERGE_QUEUE_TIMEOUT_MINUTES: i32 = 360;
641+
pub(crate) const DEFAULT_MERGE_QUEUE_MAX_ENTRIES_TO_BUILD: i32 = 5;
642+
pub(crate) const DEFAULT_MERGE_QUEUE_MAX_ENTRIES_TO_MERGE: i32 = 5;
643+
pub(crate) const DEFAULT_MERGE_QUEUE_MIN_ENTRIES_TO_MERGE: i32 = 0;
644+
pub(crate) const DEFAULT_MERGE_QUEUE_MIN_ENTRIES_TO_MERGE_WAIT_MINUTES: i32 = 0;
645+
646+
#[derive(
647+
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
648+
)]
632649
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
633650
pub(crate) enum MergeQueueGroupingStrategy {
651+
#[default]
634652
Allgreen,
635653
Headgreen,
636654
}
637655

638-
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
656+
#[derive(
657+
Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
658+
)]
639659
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
640660
pub(crate) enum MergeQueueMergeMethod {
661+
#[default]
641662
Merge,
642663
Squash,
643664
Rebase,
644665
}
645666

667+
impl Default for MergeQueueParameters {
668+
fn default() -> Self {
669+
Self {
670+
check_response_timeout_minutes: DEFAULT_MERGE_QUEUE_TIMEOUT_MINUTES,
671+
grouping_strategy: MergeQueueGroupingStrategy::default(),
672+
max_entries_to_build: DEFAULT_MERGE_QUEUE_MAX_ENTRIES_TO_BUILD,
673+
max_entries_to_merge: DEFAULT_MERGE_QUEUE_MAX_ENTRIES_TO_MERGE,
674+
merge_method: MergeQueueMergeMethod::default(),
675+
min_entries_to_merge: DEFAULT_MERGE_QUEUE_MIN_ENTRIES_TO_MERGE,
676+
min_entries_to_merge_wait_minutes:
677+
DEFAULT_MERGE_QUEUE_MIN_ENTRIES_TO_MERGE_WAIT_MINUTES,
678+
}
679+
}
680+
}
681+
646682
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize)]
647683
pub(crate) struct RequiredDeploymentsParameters {
648684
pub(crate) required_deployment_environments: Vec<String>,
@@ -662,6 +698,7 @@ pub(crate) struct RequiredStatusChecksParameters {
662698
#[serde(skip_serializing_if = "Option::is_none")]
663699
pub(crate) do_not_enforce_on_create: Option<bool>,
664700
pub(crate) required_status_checks: Vec<RequiredStatusCheck>,
701+
/// Whether pull requests targeting a matching branch must be tested with the latest code.
665702
pub(crate) strict_required_status_checks_policy: bool,
666703
}
667704

0 commit comments

Comments
 (0)