Skip to content

Commit a830b7e

Browse files
committed
feat: add verbose logging
1 parent ab87b7e commit a830b7e

File tree

1 file changed

+186
-10
lines changed

1 file changed

+186
-10
lines changed

sync-team/src/github/mod.rs

Lines changed: 186 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,11 @@ impl SyncGitHub {
645645
let id = actual_ruleset.id.unwrap_or(0);
646646
ruleset_diffs.push(RulesetDiff {
647647
name: ruleset_name,
648-
operation: RulesetDiffOperation::Update(id, expected_ruleset),
648+
operation: RulesetDiffOperation::Update(
649+
id,
650+
actual_ruleset,
651+
expected_ruleset,
652+
),
649653
});
650654
}
651655
} else {
@@ -1617,6 +1621,182 @@ fn log_branch_protection(
16171621
Ok(())
16181622
}
16191623

1624+
fn log_ruleset(
1625+
current: &api::Ruleset,
1626+
new: Option<&api::Ruleset>,
1627+
mut result: impl Write,
1628+
) -> std::fmt::Result {
1629+
macro_rules! log {
1630+
($str:literal, $field:expr, $new_field:expr) => {
1631+
let old = $field;
1632+
let new_val = $new_field;
1633+
if Some(old) != new_val {
1634+
if let Some(n) = new_val {
1635+
writeln!(result, " {}: {:?} => {:?}", $str, old, n)?;
1636+
} else {
1637+
writeln!(result, " {}: {:?}", $str, old)?;
1638+
}
1639+
}
1640+
};
1641+
}
1642+
1643+
// Log basic ruleset properties
1644+
log!("Target", &current.target, new.map(|n| &n.target));
1645+
log!(
1646+
"Source Type",
1647+
&current.source_type,
1648+
new.map(|n| &n.source_type)
1649+
);
1650+
log!(
1651+
"Enforcement",
1652+
&current.enforcement,
1653+
new.map(|n| &n.enforcement)
1654+
);
1655+
1656+
// Log branch conditions
1657+
if let Some(ref_name) = &current.conditions.ref_name {
1658+
let new_ref_name = new.and_then(|n| n.conditions.ref_name.as_ref());
1659+
if !ref_name.include.is_empty() {
1660+
log!(
1661+
"Include Branches",
1662+
&ref_name.include,
1663+
new_ref_name.map(|r| &r.include)
1664+
);
1665+
}
1666+
if !ref_name.exclude.is_empty() {
1667+
log!(
1668+
"Exclude Branches",
1669+
&ref_name.exclude,
1670+
new_ref_name.map(|r| &r.exclude)
1671+
);
1672+
}
1673+
}
1674+
1675+
// Log bypass actors
1676+
if let Some(bypass_actors) = &current.bypass_actors
1677+
&& !bypass_actors.is_empty()
1678+
{
1679+
let new_bypass = new.and_then(|n| n.bypass_actors.as_ref());
1680+
log!("Bypass Actors", bypass_actors, new_bypass);
1681+
}
1682+
1683+
// Log individual rules
1684+
for rule in &current.rules {
1685+
match rule {
1686+
api::RulesetRule::Creation => {
1687+
writeln!(result, " Rule: Creation")?;
1688+
}
1689+
api::RulesetRule::Update => {
1690+
writeln!(result, " Rule: Update")?;
1691+
}
1692+
api::RulesetRule::Deletion => {
1693+
writeln!(result, " Rule: Deletion")?;
1694+
}
1695+
api::RulesetRule::RequiredLinearHistory => {
1696+
writeln!(result, " Rule: Required Linear History")?;
1697+
}
1698+
api::RulesetRule::RequiredSignatures => {
1699+
writeln!(result, " Rule: Required Signatures")?;
1700+
}
1701+
api::RulesetRule::NonFastForward => {
1702+
writeln!(result, " Rule: Non-Fast-Forward")?;
1703+
}
1704+
api::RulesetRule::MergeQueue { parameters } => {
1705+
writeln!(result, " Rule: Merge Queue")?;
1706+
writeln!(
1707+
result,
1708+
" Timeout: {} minutes",
1709+
parameters.check_response_timeout_minutes
1710+
)?;
1711+
writeln!(
1712+
result,
1713+
" Grouping Strategy: {:?}",
1714+
parameters.grouping_strategy
1715+
)?;
1716+
writeln!(
1717+
result,
1718+
" Merge Method: {:?}",
1719+
parameters.merge_method
1720+
)?;
1721+
writeln!(
1722+
result,
1723+
" Max Entries to Build: {}",
1724+
parameters.max_entries_to_build
1725+
)?;
1726+
writeln!(
1727+
result,
1728+
" Max Entries to Merge: {}",
1729+
parameters.max_entries_to_merge
1730+
)?;
1731+
writeln!(
1732+
result,
1733+
" Min Entries to Merge: {}",
1734+
parameters.min_entries_to_merge
1735+
)?;
1736+
writeln!(
1737+
result,
1738+
" Min Wait Time: {} minutes",
1739+
parameters.min_entries_to_merge_wait_minutes
1740+
)?;
1741+
}
1742+
api::RulesetRule::PullRequest { parameters } => {
1743+
writeln!(result, " Rule: Pull Request")?;
1744+
writeln!(
1745+
result,
1746+
" Dismiss Stale Reviews: {}",
1747+
parameters.dismiss_stale_reviews_on_push
1748+
)?;
1749+
writeln!(
1750+
result,
1751+
" Require Code Owner Review: {}",
1752+
parameters.require_code_owner_review
1753+
)?;
1754+
writeln!(
1755+
result,
1756+
" Require Last Push Approval: {}",
1757+
parameters.require_last_push_approval
1758+
)?;
1759+
writeln!(
1760+
result,
1761+
" Required Approving Review Count: {}",
1762+
parameters.required_approving_review_count
1763+
)?;
1764+
writeln!(
1765+
result,
1766+
" Required Review Thread Resolution: {}",
1767+
parameters.required_review_thread_resolution
1768+
)?;
1769+
}
1770+
api::RulesetRule::RequiredStatusChecks { parameters } => {
1771+
writeln!(result, " Rule: Required Status Checks")?;
1772+
writeln!(
1773+
result,
1774+
" Strict Policy: {}",
1775+
parameters.strict_required_status_checks_policy
1776+
)?;
1777+
if !parameters.required_status_checks.is_empty() {
1778+
let checks: Vec<_> = parameters
1779+
.required_status_checks
1780+
.iter()
1781+
.map(|c| &c.context)
1782+
.collect();
1783+
writeln!(result, " Checks: {:?}", checks)?;
1784+
}
1785+
}
1786+
api::RulesetRule::RequiredDeployments { parameters } => {
1787+
writeln!(result, " Rule: Required Deployments")?;
1788+
writeln!(
1789+
result,
1790+
" Environments: {:?}",
1791+
parameters.required_deployment_environments
1792+
)?;
1793+
}
1794+
}
1795+
}
1796+
1797+
Ok(())
1798+
}
1799+
16201800
#[derive(Debug)]
16211801
enum BranchProtectionDiffOperation {
16221802
Create(api::BranchProtection),
@@ -1637,8 +1817,8 @@ impl RulesetDiff {
16371817
RulesetDiffOperation::Create(ruleset) => {
16381818
sync.upsert_ruleset(RulesetOp::CreateForRepo, org, repo_name, ruleset)?;
16391819
}
1640-
RulesetDiffOperation::Update(id, ruleset) => {
1641-
sync.upsert_ruleset(RulesetOp::UpdateRuleset(*id), org, repo_name, ruleset)?;
1820+
RulesetDiffOperation::Update(id, _, new_ruleset) => {
1821+
sync.upsert_ruleset(RulesetOp::UpdateRuleset(*id), org, repo_name, new_ruleset)?;
16421822
}
16431823
RulesetDiffOperation::Delete(id) => {
16441824
debug!(
@@ -1657,12 +1837,8 @@ impl std::fmt::Display for RulesetDiff {
16571837
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16581838
writeln!(f, " {}", self.name)?;
16591839
match &self.operation {
1660-
RulesetDiffOperation::Create(_) => {
1661-
writeln!(f, " Creating ruleset with merge queue enabled")
1662-
}
1663-
RulesetDiffOperation::Update(_, _) => {
1664-
writeln!(f, " Updating ruleset")
1665-
}
1840+
RulesetDiffOperation::Create(ruleset) => log_ruleset(ruleset, None, f),
1841+
RulesetDiffOperation::Update(_, old, new) => log_ruleset(old, Some(new), f),
16661842
RulesetDiffOperation::Delete(_) => {
16671843
writeln!(f, " Deleting ruleset")
16681844
}
@@ -1673,7 +1849,7 @@ impl std::fmt::Display for RulesetDiff {
16731849
#[derive(Debug)]
16741850
enum RulesetDiffOperation {
16751851
Create(api::Ruleset),
1676-
Update(i64, api::Ruleset),
1852+
Update(i64, api::Ruleset, api::Ruleset), // id, old, new
16771853
Delete(i64),
16781854
}
16791855

0 commit comments

Comments
 (0)