mirror of
https://github.com/dtzp555-max/clawkeeper.git
synced 2026-07-21 21:15:06 +00:00
repo-rule-detector: expand ruleset pull_request fields
This commit is contained in:
@@ -13,6 +13,15 @@
|
|||||||
* node scripts/repo-rule-detector.mjs owner/repo
|
* node scripts/repo-rule-detector.mjs owner/repo
|
||||||
* node scripts/repo-rule-detector.mjs owner/repo --branch main
|
* node scripts/repo-rule-detector.mjs owner/repo --branch main
|
||||||
*
|
*
|
||||||
|
* Example:
|
||||||
|
* node scripts/repo-rule-detector.mjs microsoft/vscode
|
||||||
|
*
|
||||||
|
* Output notes:
|
||||||
|
* - rulesets[].rules.pull_request prints fields like:
|
||||||
|
* required_review_thread_resolution, allowed_merge_methods,
|
||||||
|
* required_approving_review_count
|
||||||
|
* - rulesets[].rules.required_linear_history / non_fast_forward are booleans
|
||||||
|
*
|
||||||
* Requires:
|
* Requires:
|
||||||
* - gh auth
|
* - gh auth
|
||||||
*/
|
*/
|
||||||
@@ -72,6 +81,7 @@ function main() {
|
|||||||
'required_review_thread_resolution',
|
'required_review_thread_resolution',
|
||||||
'allowed_merge_methods',
|
'allowed_merge_methods',
|
||||||
'required_approving_review_count',
|
'required_approving_review_count',
|
||||||
|
// extras (kept for convenience / debugging)
|
||||||
'require_code_owner_review',
|
'require_code_owner_review',
|
||||||
'dismiss_stale_reviews_on_push',
|
'dismiss_stale_reviews_on_push',
|
||||||
'require_last_push_approval'
|
'require_last_push_approval'
|
||||||
@@ -94,32 +104,38 @@ function main() {
|
|||||||
const prParams = prRule?.parameters ? pick(prRule.parameters, PULL_REQUEST_PARAM_KEYS) : null;
|
const prParams = prRule?.parameters ? pick(prRule.parameters, PULL_REQUEST_PARAM_KEYS) : null;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
pull_request: prParams
|
pull_request: prParams,
|
||||||
? { present: true, parameters: prParams }
|
required_linear_history: hasRuleType(rules, 'required_linear_history'),
|
||||||
: { present: false, parameters: null },
|
non_fast_forward: hasRuleType(rules, 'non_fast_forward'),
|
||||||
required_linear_history: { present: hasRuleType(rules, 'required_linear_history') },
|
deletion: hasRuleType(rules, 'deletion')
|
||||||
non_fast_forward: { present: hasRuleType(rules, 'non_fast_forward') },
|
|
||||||
deletion: { present: hasRuleType(rules, 'deletion') }
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const relevantRulesets = rulesets
|
const relevantRulesets = [];
|
||||||
.filter(rs => rs?.enforcement && rs.enforcement !== 'disabled')
|
for (const rs of rulesets) {
|
||||||
.filter(rs => {
|
if (!rs?.enforcement || rs.enforcement === 'disabled') continue;
|
||||||
const targets = rs?.conditions?.ref_name?.include ?? [];
|
|
||||||
return targets.length === 0 || targets.includes('~DEFAULT_BRANCH') || targets.includes(branch) || targets.includes(`refs/heads/${branch}`);
|
const details = fetchRulesetDetails(rs.id);
|
||||||
})
|
const refCond = details?.conditions?.ref_name ?? null;
|
||||||
.map(rs => {
|
const targets = refCond?.include ?? [];
|
||||||
const details = fetchRulesetDetails(rs.id);
|
|
||||||
const rulesSummary = summarizeRulesetRules(details?.rules ?? []);
|
const isRelevant =
|
||||||
return {
|
targets.length === 0 ||
|
||||||
id: rs.id,
|
targets.includes('~ALL') ||
|
||||||
name: rs.name,
|
targets.includes('~DEFAULT_BRANCH') ||
|
||||||
enforcement: rs.enforcement,
|
targets.includes(branch) ||
|
||||||
target: rs?.conditions?.ref_name ?? null,
|
targets.includes(`refs/heads/${branch}`);
|
||||||
rules: rulesSummary
|
|
||||||
};
|
if (!isRelevant) continue;
|
||||||
|
|
||||||
|
relevantRulesets.push({
|
||||||
|
id: rs.id,
|
||||||
|
name: rs.name,
|
||||||
|
enforcement: rs.enforcement,
|
||||||
|
target: refCond,
|
||||||
|
rules: summarizeRulesetRules(details?.rules ?? [])
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const allowedMergeMethods = {
|
const allowedMergeMethods = {
|
||||||
mergeCommit: !!repoInfo.allow_merge_commit,
|
mergeCommit: !!repoInfo.allow_merge_commit,
|
||||||
@@ -128,9 +144,9 @@ function main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const rulesetsRulePresence = {
|
const rulesetsRulePresence = {
|
||||||
required_linear_history: relevantRulesets.some(rs => rs?.rules?.required_linear_history?.present),
|
required_linear_history: relevantRulesets.some(rs => !!rs?.rules?.required_linear_history),
|
||||||
non_fast_forward: relevantRulesets.some(rs => rs?.rules?.non_fast_forward?.present),
|
non_fast_forward: relevantRulesets.some(rs => !!rs?.rules?.non_fast_forward),
|
||||||
deletion: relevantRulesets.some(rs => rs?.rules?.deletion?.present)
|
deletion: relevantRulesets.some(rs => !!rs?.rules?.deletion)
|
||||||
};
|
};
|
||||||
|
|
||||||
const out = {
|
const out = {
|
||||||
|
|||||||
Reference in New Issue
Block a user