@@ -54,42 +54,62 @@ export async function getContributors(repo: string, retries = 3) {
5454 }
5555}
5656
57+ // =================== FETCH REPOS WITH RETRY ===================
58+ export async function getRepos ( retries = 3 ) {
59+ const owner = process . env . GITHUB_OWNER ;
60+ console . log ( "getRepos" , owner ) ;
5761
58- // =================== FETCH REPOS ===================
59- export async function getRepos ( ) {
60- try {
61- const owner = process . env . GITHUB_OWNER ;
62- console . log ( "getRepos" , owner ) ;
62+ const allRepos : any [ ] = [ ] ;
63+ let page = 1 ;
64+ const perPage = 100 ;
6365
66+ while ( true ) {
67+ const url = `https://api.github.com/orgs/${ owner } /repos?per_page=${ perPage } &page=${ page } ` ;
6468
65- // Fetch semua repos dengan pagination
66- const allRepos : any [ ] = [ ] ;
67- let page = 1 ;
68- const perPage = 100 ; // maksimum 100 per page
69+ let success = false ;
70+ for ( let attempt = 1 ; attempt <= retries ; attempt ++ ) {
71+ try {
72+ const res = await axios . get ( url , { headers } ) ;
73+
74+ if ( Array . isArray ( res . data ) && res . data . length > 0 ) {
75+ allRepos . push ( ...res . data ) ;
76+ success = true ;
77+ break ; // keluar dari retry loop
78+ } else if ( res . data . length === 0 ) {
79+ success = true ; // tidak ada repo lagi
80+ break ;
81+ }
82+ } catch ( err ) {
83+ console . log ( `Error fetching page ${ page } , attempt ${ attempt } /${ retries } :` , err . message ) ;
84+ if ( attempt < retries ) {
85+ await new Promise ( ( r ) => setTimeout ( r , 3000 ) ) ; // tunggu 3 detik sebelum retry
86+ }
87+ }
88+ }
6989
70- while ( true ) {
71- const url = `https://api.github.com/orgs/${ owner } /repos?per_page=${ perPage } &page=${ page } ` ;
72- const res = await axios . get ( url , { headers } ) ;
90+ if ( ! success ) {
91+ console . log ( `Failed to fetch page ${ page } after ${ retries } retries. Stopping.` ) ;
92+ break ;
93+ }
7394
74- if ( res . data . length === 0 ) break ; // tidak ada repo lagi
75- allRepos . push ( ...res . data ) ;
76- page ++ ;
95+ if ( allRepos . length < page * perPage ) {
96+ break ; // tidak ada repos lagi
7797 }
7898
79- const repos = allRepos . map ( ( r : any ) => ( {
80- owner : owner ,
81- name : r . name ,
82- fullName : r . full_name ,
83- description : r . description ,
84- stars : r . stargazers_count ,
85- forks : r . forks_count ,
86- updatedAt : r . updated_at ,
87- } ) ) ;
88-
89- console . log ( `Fetched ${ repos . length } repos from GitHub` ) ;
90- return repos ;
91- } catch ( error ) {
92- logger . error ( "error fetching repo" , error )
93- return [ ] ;
99+ page ++ ;
94100 }
101+
102+ const repos = allRepos . map ( ( r : any ) => ( {
103+ owner : owner ,
104+ name : r . name ,
105+ fullName : r . full_name ,
106+ description : r . description ,
107+ stars : r . stargazers_count ,
108+ forks : r . forks_count ,
109+ updatedAt : r . updated_at ,
110+ } ) ) ;
111+
112+ console . log ( `Fetched ${ repos . length } repos from GitHub` ) ;
113+ return repos ;
95114}
115+
0 commit comments