@@ -12,6 +12,7 @@ type Run = {
12
12
language : Language ;
13
13
run ?: components [ 'schemas' ] [ 'workflow-run' ] ;
14
14
finished : boolean ;
15
+ retried : boolean ;
15
16
} ;
16
17
17
18
async function fetchAllRuns ( runs : Run [ ] ) : Promise < void > {
@@ -34,8 +35,8 @@ async function fetchAllRuns(runs: Run[]): Promise<void> {
34
35
return ;
35
36
}
36
37
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 ) {
39
40
return ;
40
41
}
41
42
@@ -44,6 +45,12 @@ async function fetchAllRuns(runs: Run[]): Promise<void> {
44
45
) ;
45
46
}
46
47
48
+ function sleep ( ms : number ) : Promise < void > {
49
+ return new Promise ( ( resolve ) => {
50
+ setTimeout ( resolve , ms ) ;
51
+ } ) ;
52
+ }
53
+
47
54
async function waitForAllReleases ( languagesReleased : Language [ ] ) : Promise < void > {
48
55
const lastCommitMessage = await run ( 'git log -1 --format="%s"' ) ;
49
56
@@ -62,7 +69,7 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
62
69
)
63
70
)
64
71
. 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 } ) ) ;
66
73
67
74
console . log (
68
75
`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>
72
79
73
80
const start = Date . now ( ) ;
74
81
// kotlin release can take a long time
75
- while ( Date . now ( ) - start < 1000 * 60 * 12 ) {
82
+ while ( Date . now ( ) - start < 1000 * 60 * 20 ) {
76
83
await fetchAllRuns ( runs ) ;
77
84
for ( const ciRun of runs ) {
78
85
if ( ciRun . finished ) {
@@ -86,6 +93,22 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
86
93
87
94
if ( ciRun . run . status === 'completed' ) {
88
95
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
+ }
89
112
console . log ( `${ success ? '✅' : '❌' } ${ ciRun . language } CI finished with conclusion: ${ ciRun . run . conclusion } ` ) ;
90
113
if ( ! success ) {
91
114
failures . push ( ciRun . language ) ;
@@ -99,9 +122,7 @@ async function waitForAllReleases(languagesReleased: Language[]): Promise<void>
99
122
break ;
100
123
}
101
124
102
- await new Promise ( ( resolve ) => {
103
- setTimeout ( resolve , 15000 ) ;
104
- } ) ;
125
+ await sleep ( 15000 ) ;
105
126
}
106
127
107
128
if ( failures . length > 0 ) {
0 commit comments