Skip to content

Commit cfabca0

Browse files
Merge branch 'main' into fix/contributor-repo-page
2 parents e019717 + f936776 commit cfabca0

2 files changed

Lines changed: 25 additions & 16 deletions

File tree

src/context/AppContext.jsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export function AppProvider({ children }) {
7777
setLoadMsg('Fetching repositories...')
7878
const reposPerOrg = {}
7979
await Promise.allSettled(validOrgs.map(async org => {
80-
reposPerOrg[org.login] = await fetchRepos(org.login, pat)
80+
reposPerOrg[org.login] = await fetchRepos(org.login, org.public_repos, pat)
8181
}))
8282

8383
const total = Object.values(reposPerOrg).reduce(
@@ -90,8 +90,10 @@ export function AppProvider({ children }) {
9090
setLoadMsg('Fetching contributor data for top repositories...')
9191
const contribsPerRepo = {}
9292
for (const org of validOrgs) {
93-
const top = getTopRepositories(reposPerOrg[org.login] || [], 10);
93+
94+
const top = pat ? (reposPerOrg[org.login] || []) : getTopRepositories(reposPerOrg[org.login] || [], 10);
9495
reposPerOrg[org.login] = top; // Update to only include top repos
96+
9597
await Promise.allSettled(top.map(async repo => {
9698
contribsPerRepo[`${org.login}/${repo.name}`] = await fetchContributors(org.login, repo.name, pat)
9799
}))
@@ -120,8 +122,8 @@ export function AppProvider({ children }) {
120122
const runAudit = useCallback(async () => {
121123
if (!model || govLoading) return
122124
setGovLoading(true)
123-
const map = {}
124-
const repos = model.allRepos.slice(0, 15)
125+
const map = {}
126+
const repos = pat? model.allRepos : model.allRepos.slice(0, 15)
125127

126128
// Batches of 5 using Promise.allSettled
127129
for (let i = 0; i < repos.length; i += 5) {

src/services/github.js

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,10 @@ async function fetchWithCache(url, pat) {
8686
export const fetchOrg = (org, pat) =>
8787
fetchWithCache(`https://api.github.com/orgs/${org}`, pat)
8888

89-
export async function fetchRepos(org, pat) {
89+
export async function fetchRepos(org, repoCount, pat) {
9090
const all = []
91-
for (let page = 1; page <= 5; page++) {
91+
const maxPages = pat ? Math.ceil(repoCount / 100) : 5
92+
for (let page = 1; page <= maxPages; page++) {
9293
const url = `https://api.github.com/orgs/${org}/repos?per_page=100&page=${page}&sort=updated`
9394
const data = await fetchWithCache(url, pat)
9495
all.push(...data)
@@ -98,19 +99,25 @@ export async function fetchRepos(org, pat) {
9899
}
99100

100101
export async function fetchContributors(org, repo, pat) {
101-
try {
102-
return await fetchWithCache(
103-
`https://api.github.com/repos/${org}/${repo}/contributors?per_page=30`, pat
104-
)
105-
} catch { return [] }
102+
const all = []
103+
for(let page = 1; ; page++) {
104+
const url = `https://api.github.com/repos/${org}/${repo}/contributors?per_page=100&page=${page}`
105+
const data = await fetchWithCache(url, pat)
106+
all.push(...data)
107+
if(data.length < 100) break
108+
}
109+
return all
106110
}
107111

108112
export async function fetchIssues(org, repo, pat) {
109-
try {
110-
return await fetchWithCache(
111-
`https://api.github.com/repos/${org}/${repo}/issues?state=all&per_page=100`, pat
112-
)
113-
} catch { return [] }
113+
const all = []
114+
for(let page = 1; ; page++) {
115+
const url = `https://api.github.com/repos/${org}/${repo}/issues?state=all&per_page=100&page=${page}`
116+
const data = await fetchWithCache(url, pat)
117+
all.push(...data)
118+
if(data.length < 100) break
119+
}
120+
return all
114121
}
115122

116123
export async function fetchRateLimit(pat) {

0 commit comments

Comments
 (0)