diff --git a/src/context/AppContext.jsx b/src/context/AppContext.jsx index 19f4adb..2471f51 100644 --- a/src/context/AppContext.jsx +++ b/src/context/AppContext.jsx @@ -77,13 +77,13 @@ export function AppProvider({ children }) { setLoadMsg('Fetching repositories...') const reposPerOrg = {} await Promise.allSettled(validOrgs.map(async org => { - reposPerOrg[org.login] = await fetchRepos(org.login, pat) + reposPerOrg[org.login] = await fetchRepos(org.login, org.public_repos, pat) })) setLoadMsg('Fetching contributor data for top repositories...') const contribsPerRepo = {} for (const org of validOrgs) { - const top = (reposPerOrg[org.login] || []) + const top = pat ? (reposPerOrg[org.login] || []) : (reposPerOrg[org.login] || []) .sort((a, b) => b.stargazers_count - a.stargazers_count) .slice(0, 10) await Promise.allSettled(top.map(async repo => { @@ -114,8 +114,8 @@ export function AppProvider({ children }) { const runAudit = useCallback(async () => { if (!model || govLoading) return setGovLoading(true) - const map = {} - const repos = model.allRepos.slice(0, 15) + const map = {} + const repos = pat? model.allRepos : model.allRepos.slice(0, 15) // Batches of 5 using Promise.allSettled for (let i = 0; i < repos.length; i += 5) { diff --git a/src/services/github.js b/src/services/github.js index d471146..e2bda91 100644 --- a/src/services/github.js +++ b/src/services/github.js @@ -86,9 +86,10 @@ async function fetchWithCache(url, pat) { export const fetchOrg = (org, pat) => fetchWithCache(`https://api.github.com/orgs/${org}`, pat) -export async function fetchRepos(org, pat) { +export async function fetchRepos(org, repoCount, pat) { const all = [] - for (let page = 1; page <= 5; page++) { + const maxPages = pat ? Math.ceil(repoCount / 100) : 5 + for (let page = 1; page <= maxPages; page++) { const url = `https://api.github.com/orgs/${org}/repos?per_page=100&page=${page}&sort=updated` const data = await fetchWithCache(url, pat) all.push(...data) @@ -98,19 +99,25 @@ export async function fetchRepos(org, pat) { } export async function fetchContributors(org, repo, pat) { - try { - return await fetchWithCache( - `https://api.github.com/repos/${org}/${repo}/contributors?per_page=30`, pat - ) - } catch { return [] } + const all = [] + for(let page = 1; ; page++) { + const url = `https://api.github.com/repos/${org}/${repo}/contributors?per_page=100&page=${page}` + const data = await fetchWithCache(url, pat) + all.push(...data) + if(data.length < 100) break + } + return all } export async function fetchIssues(org, repo, pat) { - try { - return await fetchWithCache( - `https://api.github.com/repos/${org}/${repo}/issues?state=all&per_page=100`, pat - ) - } catch { return [] } + const all = [] + for(let page = 1; ; page++) { + const url = `https://api.github.com/repos/${org}/${repo}/issues?state=all&per_page=100&page=${page}` + const data = await fetchWithCache(url, pat) + all.push(...data) + if(data.length < 100) break + } + return all } export async function fetchRateLimit(pat) {