1313 strategy :
1414 fail-fast : false
1515 matrix :
16- os : [ubuntu-24.04, macos-15]
16+ os : [ubuntu-24.04, macos-15, windows-2022 ]
1717 runs-on : ${{ matrix.os }}
18+ defaults :
19+ run :
20+ shell : bash
1821 steps :
1922 - uses : actions/checkout@v4
2023 - uses : shivammathur/setup-php@v2
@@ -25,32 +28,35 @@ jobs:
2528 - name : Environment
2629 run : |
2730 php -v
28- php -r 'foreach (["opcache.enable_cli", "opcache.file_cache", "opcache.jit"] as $k) echo $k, "=", var_export(ini_get($k), true), "\n";'
29- uname -a
30- - name : Build arms
31+ php -r 'foreach (["opcache.enable_cli", "opcache.file_cache", "opcache.jit", "disable_functions"] as $k) echo $k, "=", var_export(ini_get($k), true), "\n"; echo "pcntl_fork: ", var_export(function_exists("pcntl_fork"), true), "\n";'
32+ - name : Install and build arms
3133 run : |
3234 set -e
33- W=$RUNNER_TEMP/w; mkdir -p $W
34- cd bench/project && composer install -q --no-interaction && cd -
35- for arm in stock sha1 fc fc-sha1; do cp -R bench/project $W/$arm; done
36- mkdir -p $W/fcdir-fc $W/fcdir-fc-sha1
37- php -d phar.readonly=0 bench/make-arm.php $W/sha1/vendor/phpstan/phpstan/phpstan.phar sha1
38- php -d phar.readonly=0 bench/make-arm.php $W/fc/vendor/phpstan/phpstan/phpstan.phar sha512 $W/fcdir-fc
39- php -d phar.readonly=0 bench/make-arm.php $W/fc-sha1/vendor/phpstan/phpstan/phpstan.phar sha1 $W/fcdir-fc-sha1
40- for arm in stock sha1 fc fc-sha1; do
41- (cd $W/$arm && php vendor/bin/phpstan diagnose | grep -E 'Turbo extension|Mechanism' && php vendor/bin/phpstan analyse -c phpstan.neon --no-progress && php vendor/bin/phpstan analyse -c phpstan.neon --no-progress | tail -2)
42- done
43- find $W/fcdir-fc -type f | wc -l
44- - name : Per-file open cost
35+ W="$RUNNER_TEMP/w"
36+ (cd bench/project && composer install -q --no-interaction)
37+ git clone -q --depth 1 https://github.com/nikic/PHP-Parser "$RUNNER_TEMP/php-parser"
38+ php bench/setup.php "$W" bench/project/vendor/phpstan/phpstan stock fc0 fcv fcve conc
39+ if [ "$RUNNER_OS" = Linux ]; then
40+ git clone -q --depth 1 https://github.com/tempestphp/tempest-framework "$RUNNER_TEMP/tempest"
41+ (cd "$RUNNER_TEMP/tempest" && composer install -q --no-interaction --ignore-platform-reqs --no-scripts)
42+ php bench/prepare.php "$W" "$RUNNER_TEMP/php-parser/lib" "$RUNNER_TEMP/tempest"
43+ else
44+ php bench/prepare.php "$W" "$RUNNER_TEMP/php-parser/lib"
45+ fi
46+ php bench/setup.php "$W" bench/project/vendor/phpstan/phpstan --neon-only
47+ cd "$W/projects/tiny" && php "$W/arms/fcv/phpstan.phar" diagnose | grep -E 'Turbo extension|Mechanism|Reason'
48+ - name : Tiny project
49+ run : php bench/suite.php "$RUNNER_TEMP/w" tiny 15
50+ - name : php-parser lib (271 files)
51+ run : php bench/suite.php "$RUNNER_TEMP/w" parser 5
52+ - name : php-parser lib, spawned workers
53+ run : php bench/suite.php "$RUNNER_TEMP/w" spawn 5
54+ - name : Concurrent runs sharing one empty file cache
4555 run : |
46- for i in 1 2 3; do php bench/readmany.php bench/project/vendor 2000; done
47- for i in 1 2 3; do php bench/readmany.php $RUNNER_TEMP/w/fcdir-fc 2000; done
48- - name : Bench
49- run : |
50- W=$RUNNER_TEMP/w; A=()
51- for arm in stock sha1 fc fc-sha1; do
52- A+=("$arm-ver=$W/$arm|php vendor/bin/phpstan --version")
53- A+=("$arm-warm=$W/$arm|php vendor/bin/phpstan analyse -c phpstan.neon --no-progress")
54- A+=("$arm-cold=$W/$arm|prep:rm -rf tmp;;php vendor/bin/phpstan analyse -c phpstan.neon --no-progress")
55- done
56- php bench/bench.php 15 "${A[@]}" </dev/null
56+ if [ "$RUNNER_OS" != Windows ]; then php bench/conc.php "$RUNNER_TEMP/w" 3; fi
57+ php bench/conc.php "$RUNNER_TEMP/w" 3 spawn
58+ - name : Tempest (full)
59+ if : runner.os == 'Linux'
60+ run : php bench/suite.php "$RUNNER_TEMP/w" tempest 3
61+ - name : File cache size
62+ run : du -sh "$RUNNER_TEMP"/w/fcdir-* || true
0 commit comments