@@ -166,31 +166,41 @@ function (): iterable {
166
166
167
167
printMutex ("Done cloning repos! " );
168
168
169
- printMutex ("Running tests (max $ parallel processes)... " );
169
+ printMutex ("Preparing repos (max $ parallel processes)... " );
170
170
foreach ($ repos as $ dir => [$ repo , $ branch , $ prepare , $ command , $ repeat ]) {
171
+ chdir (sys_get_temp_dir ()."/ $ dir " );
172
+ $ rev = e ("git rev-parse HEAD " , $ dir );
173
+
171
174
$ pid = pcntl_fork ();
172
175
if ($ pid ) {
173
- $ parentPids [$ pid ] = "test $ dir " ;
176
+ $ parentPids [$ pid ] = "prepare $ dir ( $ rev ) " ;
174
177
if (count ($ parentPids ) >= $ parallel ) {
175
178
$ waitOne ();
176
179
}
177
180
continue ;
178
181
}
179
182
180
- chdir (sys_get_temp_dir ()."/ $ dir " );
181
- $ rev = e ("git rev-parse HEAD " );
182
183
e ("composer i --ignore-platform-reqs " , $ dir );
183
184
if ($ prepare ) {
184
185
$ prepare ();
185
186
}
187
+ }
188
+ $ waitAll ();
189
+
190
+ printMutex ("Done preparing repos! " );
191
+
192
+ printMutex ("Running tests (max $ parallel processes)... " );
193
+ foreach ($ repos as $ dir => [$ repo , $ branch , $ prepare , $ command , $ repeat ]) {
194
+ chdir (sys_get_temp_dir ()."/ $ dir " );
195
+ $ rev = e ("git rev-parse HEAD " , $ dir );
196
+
186
197
if ($ command instanceof Closure) {
187
- $ commands = $ command ();
198
+ $ commands = iterator_to_array ( $ command () );
188
199
} else {
189
200
$ commands = [$ command ];
190
201
}
191
- $ pids = [];
192
- $ idx = 0 ;
193
- foreach ($ commands as $ cmd ) {
202
+
203
+ foreach ($ commands as $ idx => $ cmd ) {
194
204
$ cmd = array_merge ([
195
205
'php ' ,
196
206
'--repeat ' ,
@@ -200,21 +210,30 @@ function (): iterable {
200
210
], $ cmd );
201
211
202
212
$ cmdStr = implode (" " , $ cmd );
213
+
214
+ $ pid = pcntl_fork ();
215
+ if ($ pid ) {
216
+ $ parentPids [$ pid ] = "test $ dir ( $ rev): $ cmdStr " ;
217
+ if (count ($ parentPids ) >= $ parallel ) {
218
+ $ waitOne ();
219
+ }
220
+ continue ;
221
+ }
222
+
223
+ $ output = sys_get_temp_dir ()."/out_ {$ dir }_ $ idx.txt " ;
224
+
203
225
$ p = proc_open ($ cmd , [
204
226
["pipe " , "r " ],
205
- ["file " , sys_get_temp_dir (). " /out_ { $ dir } _ $ idx .txt " , "a " ],
206
- ["file " , sys_get_temp_dir (). " /out_ { $ dir } _ $ idx .txt " , "a " ]
227
+ ["file " , $ output , "a " ],
228
+ ["file " , $ output , "a " ]
207
229
], $ pipes , sys_get_temp_dir ()."/ $ dir " );
230
+
208
231
if ($ p === false ) {
209
232
printMutex ("Failure starting $ cmdStr " );
210
233
exit (1 );
211
234
}
212
- $ pids [$ cmdStr ] = [$ p , sys_get_temp_dir ()."/out_ {$ dir }_ $ idx.txt " ];
213
- $ idx ++;
214
- }
215
-
216
- $ final = 0 ;
217
- foreach ($ pids as $ cmd => [$ p , $ result ]) {
235
+
236
+ $ final = 0 ;
218
237
$ status = proc_close ($ p );
219
238
if ($ status !== 0 ) {
220
239
if ($ status > 128 ) {
@@ -225,10 +244,9 @@ function (): iterable {
225
244
.file_get_contents ($ result ).PHP_EOL
226
245
);
227
246
}
228
- }
229
247
230
- printMutex ( " $ dir : exiting with status $ final" );
231
- exit ( $ final );
248
+ exit ( $ final );
249
+ }
232
250
}
233
251
234
252
$ waitAll ();
0 commit comments