diff --git a/.github/workflows/close-stale-wrong-branch.yml b/.github/workflows/close-stale-wrong-branch.yml index 0e907731..f0e133d6 100644 --- a/.github/workflows/close-stale-wrong-branch.yml +++ b/.github/workflows/close-stale-wrong-branch.yml @@ -32,6 +32,30 @@ jobs: const hasLabel = pull.labels.some(l => l.name === 'wrong-base-branch'); if (!hasLabel) continue; + // Wiki-only PRs are exempt — clear label and skip + const files = []; + for (let page = 1; ; page++) { + const { data } = await github.rest.pulls.listFiles({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: pull.number, + per_page: 100, + page, + }); + files.push(...data); + if (data.length < 100) break; + } + const allWiki = files.length > 0 && files.every(f => f.filename.startsWith('wiki/')); + if (allWiki) { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: pull.number, + name: 'wrong-base-branch', + }); + continue; + } + const createdAt = new Date(pull.created_at); if (createdAt > twentyFourHoursAgo) continue; // grace period not over yet diff --git a/.github/workflows/enforce-target-branch.yml b/.github/workflows/enforce-target-branch.yml index 150cb646..f549ad63 100644 --- a/.github/workflows/enforce-target-branch.yml +++ b/.github/workflows/enforce-target-branch.yml @@ -27,6 +27,33 @@ jobs: return; } + // Wiki-only PRs are exempt from branch enforcement + const files = []; + for (let page = 1; ; page++) { + const { data } = await github.rest.pulls.listFiles({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber, + per_page: 100, + page, + }); + files.push(...data); + if (data.length < 100) break; + } + const allWiki = files.length > 0 && files.every(f => f.filename.startsWith('wiki/')); + if (allWiki) { + console.log('All changed files are under wiki/ — skipping enforcement.'); + if (labels.includes('wrong-base-branch')) { + await github.rest.issues.removeLabel({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + name: 'wrong-base-branch', + }); + } + return; + } + // If the base was fixed, remove the label and let it through if (base !== 'main') { if (labels.includes('wrong-base-branch')) {