@@ -12,6 +12,7 @@ type Run = {
1212 language : Language ;
1313 run ?: components [ 'schemas' ] [ 'workflow-run' ] ;
1414 finished : boolean ;
15+ retried : boolean ;
1516} ;
1617
1718async function fetchAllRuns ( runs : Run [ ] ) : Promise < void > {
@@ -34,8 +35,8 @@ async function fetchAllRuns(runs: Run[]): Promise<void> {
3435 return ;
3536 }
3637
37- // check that the run was created less than 10 minutes ago
38- if ( Date . now ( ) - Date . parse ( workflowRun . data . workflow_runs [ 0 ] . created_at ) > 15 * 60 * 1000 ) {
38+ // check that the run was created less than 20 minutes ago
39+ if ( Date . now ( ) - Date . parse ( workflowRun . data . workflow_runs [ 0 ] . created_at ) > 20 * 60 * 1000 ) {
3940 return ;
4041 }
4142
@@ -44,6 +45,12 @@ async function fetchAllRuns(runs: Run[]): Promise<void> {
4445 ) ;
4546}
4647
48+ function sleep ( ms : number ) : Promise < void > {
49+ return new Promise ( ( resolve ) => {
50+ setTimeout ( resolve , ms ) ;
51+ } ) ;
52+ }
53+
4754async function waitForAllReleases ( languagesReleased : Language [ ] ) : Promise < void > {
4855 const lastCommitMessage = await run ( 'git log -1 --format="%s"' ) ;
4956
@@ -62,7 +69,7 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
6269 )
6370 )
6471 . filter ( ( lang ) => lang . available )
65- . map ( ( lang ) => ( { language : lang . lang , run : undefined , finished : false } ) ) ;
72+ . map ( ( lang ) => ( { language : lang . lang , run : undefined , finished : false , retried : false } ) ) ;
6673
6774 console . log (
6875 `Waiting for all releases CI to finish for the following languages: ${ runs . map ( ( l ) => l . language ) . join ( ', ' ) } ` ,
@@ -72,7 +79,7 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
7279
7380 const start = Date . now ( ) ;
7481 // kotlin release can take a long time
75- while ( Date . now ( ) - start < 1000 * 60 * 12 ) {
82+ while ( Date . now ( ) - start < 1000 * 60 * 20 ) {
7683 await fetchAllRuns ( runs ) ;
7784 for ( const ciRun of runs ) {
7885 if ( ciRun . finished ) {
@@ -86,6 +93,22 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
8693
8794 if ( ciRun . run . status === 'completed' ) {
8895 const success = ciRun . run . conclusion === 'success' ;
96+ if ( ! success && ! ciRun . retried ) {
97+ // retry once
98+ console . log ( `❌ ${ ciRun . language } CI failed, retrying once` ) ;
99+ await getOctokit ( ) . actions . reRunWorkflowFailedJobs ( {
100+ owner : 'algolia' ,
101+ repo : getClientsConfigField ( ciRun . language , 'gitRepoId' ) ,
102+ run_id : ciRun . run . id ,
103+ } ) ;
104+
105+ // sleep for a bit to let the CI start
106+ await sleep ( 15000 ) ;
107+
108+ ciRun . retried = true ;
109+
110+ continue ;
111+ }
89112 console . log ( `${ success ? '✅' : '❌' } ${ ciRun . language } CI finished with conclusion: ${ ciRun . run . conclusion } ` ) ;
90113 if ( ! success ) {
91114 failures . push ( ciRun . language ) ;
@@ -99,9 +122,7 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
99122 break ;
100123 }
101124
102- await new Promise ( ( resolve ) => {
103- setTimeout ( resolve , 15000 ) ;
104- } ) ;
125+ await sleep ( 15000 ) ;
105126 }
106127
107128 if ( failures . length > 0 ) {
0 commit comments