-
-
Notifications
You must be signed in to change notification settings - Fork 66
/
run.php
54 lines (39 loc) 路 1.43 KB
/
run.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
declare(strict_types=1);
namespace Psl\Example\IO;
use Psl\Async;
use Psl\DateTime;
use Psl\Filesystem;
use Psl\IO;
use Psl\Shell;
require __DIR__ . '/../vendor/autoload.php';
Async\main(static function (): int {
$awaitables = [];
$folders = Filesystem\read_directory(__DIR__);
foreach ($folders as $folder) {
if (!Filesystem\is_directory($folder)) {
continue;
}
$component = Filesystem\get_filename($folder);
$files = Filesystem\read_directory($folder);
foreach ($files as $file) {
$script = Filesystem\get_filename($file);
if ($script === 'basic-http-server') {
// long running process.
continue;
}
IO\write_error_line('- %s/%s -> started', $component, $script);
$awaitables[] = Async\run(static function() use($component, $script, $file): array {
$start = DateTime\Timestamp::monotonic();
Shell\execute(PHP_BINARY, [$file]);
$duration = DateTime\Timestamp::monotonic()->since($start);
return [$component, $script, $duration];
});
}
}
foreach (Async\Awaitable::iterate($awaitables) as $awaitable) {
[$component, $script, $duration] = $awaitable->await();
IO\write_error_line('+ %s/%s -> finished in %s', $component, $script, $duration->toString());
}
return 0;
});