Skip to content

Commit f4d6b72

Browse files
committed
Limit archived project data to public repositories
1 parent a8afb1e commit f4d6b72

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

‎web/scripts/sync-github.mjs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ const org=process.env.GITHUB_ORG || 'UFFeScience',file='data/projects.json';
66
let previous={repos:[],details:{}};try{previous=JSON.parse(await fs.readFile(file,'utf8'));}catch{}
77
async function api(endpoint){const r=await fetch(`https://api.github.com/${endpoint}`,{headers:{Accept:'application/vnd.github+json',...(process.env.GITHUB_TOKEN?{Authorization:`Bearer ${process.env.GITHUB_TOKEN}`}:{})},signal:AbortSignal.timeout(20000)});if(r.status===204)return [];if(!r.ok)throw new Error(`GitHub HTTP ${r.status}`);return r.json();}
88
try{
9-
let repos=[];for(let page=1;;page++){const batch=await api(`orgs/${org}/repos?per_page=100&sort=pushed&page=${page}`);if(!Array.isArray(batch))throw new Error('Invalid repository data');repos.push(...batch);if(batch.length<100)break;}
10-
repos=repos.filter(repo=>!repo.archived && repo.name.toLowerCase()!==`${org.toLowerCase()}.github.io`).map(({name,description,html_url,stargazers_count,pushed_at})=>({name,description,html_url,stargazers_count,pushed_at})).sort((a,b)=>new Date(b.pushed_at)-new Date(a.pushed_at));
9+
let repos=[];for(let page=1;;page++){const batch=await api(`orgs/${org}/repos?type=public&per_page=100&sort=pushed&page=${page}`);if(!Array.isArray(batch))throw new Error('Invalid repository data');repos.push(...batch);if(batch.length<100)break;}
10+
repos=repos.filter(repo=>!repo.private && !repo.archived && repo.name.toLowerCase()!==`${org.toLowerCase()}.github.io`).map(({name,description,html_url,stargazers_count,pushed_at})=>({name,description,html_url,stargazers_count,pushed_at})).sort((a,b)=>new Date(b.pushed_at)-new Date(a.pushed_at));
1111
if(!repos.length)throw new Error('Empty repository response; retaining saved data');
1212
const details={...previous.details};await fs.mkdir('data/media',{recursive:true});
1313
async function photo(url){try{const r=await fetch(url,{signal:AbortSignal.timeout(15000)});const type=r.headers.get('content-type')?.split(';')[0],ext={'image/png':'png','image/jpeg':'jpg','image/webp':'webp'}[type];if(!r.ok || !ext)return url;const bytes=Buffer.from(await r.arrayBuffer());if(bytes.length>8*1024*1024)return url;const name=createHash('sha256').update(bytes).digest('hex').slice(0,28)+'.'+ext;await fs.writeFile('data/media/'+name,bytes);return '/media/'+name;}catch{return url;}}

0 commit comments

Comments
 (0)