Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a1de4ad
Fix ccache in pecl job
iluuu1994 Feb 18, 2026
cb4ea1d
Fix nightly job selection
iluuu1994 Feb 18, 2026
ae7e211
Merge branch 'PHP-8.2' into PHP-8.3
iluuu1994 Feb 18, 2026
626fc78
Merge branch 'PHP-8.3' into PHP-8.4
iluuu1994 Feb 18, 2026
fd08a17
Merge branch 'PHP-8.4' into PHP-8.5
iluuu1994 Feb 18, 2026
4889691
Merge branch 'PHP-8.5'
iluuu1994 Feb 18, 2026
220dcf9
[skip ci] Limit "Update clang" step to 10 minutes
iluuu1994 Feb 18, 2026
1e6b1d6
Merge branch 'PHP-8.2' into PHP-8.3
iluuu1994 Feb 18, 2026
31f35ea
Merge branch 'PHP-8.3' into PHP-8.4
iluuu1994 Feb 18, 2026
543fec0
Merge branch 'PHP-8.4' into PHP-8.5
iluuu1994 Feb 18, 2026
c19e10d
Merge branch 'PHP-8.5'
iluuu1994 Feb 18, 2026
27b41d3
[skip ci] Mark curl_persistent_share_002.phpt as not repeatable
iluuu1994 Feb 18, 2026
5728a37
Merge branch 'PHP-8.5'
iluuu1994 Feb 18, 2026
431dbab
[skip ci] Re-enabled xdebug in nightly job
jorgsowa Feb 8, 2026
39afa46
[skip ci] Disable redis in pecl build
iluuu1994 Feb 18, 2026
7643094
Merge branch 'PHP-8.2' into PHP-8.3
iluuu1994 Feb 18, 2026
4a396e6
Merge branch 'PHP-8.3' into PHP-8.4
iluuu1994 Feb 18, 2026
0c34f6b
Merge branch 'PHP-8.4' into PHP-8.5
iluuu1994 Feb 18, 2026
643a4b2
Merge branch 'PHP-8.5'
iluuu1994 Feb 18, 2026
4360007
Move benchmarking job to nightly
iluuu1994 Feb 18, 2026
43e2c01
Merge branch 'PHP-8.2' into PHP-8.3
iluuu1994 Feb 18, 2026
1317a17
Merge branch 'PHP-8.3' into PHP-8.4
iluuu1994 Feb 18, 2026
14be9c4
Merge branch 'PHP-8.4' into PHP-8.5
iluuu1994 Feb 18, 2026
e4e35cf
Merge branch 'PHP-8.5'
iluuu1994 Feb 18, 2026
9c8780d
[skip ci] Add missing benchmarking checkout ref
iluuu1994 Feb 18, 2026
c990df8
Merge branch 'PHP-8.2' into PHP-8.3
iluuu1994 Feb 18, 2026
59cb3ab
Merge branch 'PHP-8.3' into PHP-8.4
iluuu1994 Feb 18, 2026
e3d04bb
Merge branch 'PHP-8.4' into PHP-8.5
iluuu1994 Feb 18, 2026
a4cfa69
Merge branch 'PHP-8.5'
iluuu1994 Feb 18, 2026
73b15c5
ext/sqlite3: Remove redundant test (#21199)
petk Feb 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions .github/nightly_matrix.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,13 @@ function get_current_version(): array {
return [$major, $minor];
}

function select_jobs($trigger, $labels, $php_version, $ref, $all_variations) {
function select_jobs($repository, $trigger, $nightly, $labels, $php_version, $ref, $all_variations) {
$no_jobs = in_array('CI: No jobs', $labels, true);
$all_jobs = in_array('CI: All jobs', $labels, true);
$all_jobs = in_array('CI: All jobs', $labels, true) || $nightly;
$test_alpine = in_array('CI: Alpine', $labels, true);
$test_benchmarking = in_array('CI: Benchmarking', $labels, true);
$test_community = in_array('CI: Community', $labels, true);
$test_coverage = in_array('CI: COVERAGE', $labels, true);
$test_freebsd = in_array('CI: FreeBSD', $labels, true);
$test_libmysqlclient = in_array('CI: libmysqlclient', $labels, true);
$test_linux_ppc64 = in_array('CI: Linux PPC64', $labels, true);
Expand All @@ -59,19 +61,27 @@ function select_jobs($trigger, $labels, $php_version, $ref, $all_variations) {
$test_macos = in_array('CI: macOS', $labels, true);
$test_msan = in_array('CI: MSAN', $labels, true);
$test_opcache_variation = in_array('CI: Opcache Variation', $labels, true);
$test_pecl = in_array('CI: PECL', $labels, true);
$test_windows = in_array('CI: Windows', $labels, true);

$jobs = [];
if (version_compare($php_version, '8.4', '>=') && ($all_jobs || !$no_jobs || $test_alpine)) {
$jobs['ALPINE'] = true;
}
if (version_compare($php_version, '8.4', '>=')
&& !$nightly
&& ($all_jobs || !$no_jobs || $test_benchmarking)
// push trigger is restricted to official repository.
&& ($repository === 'php/php-src' || $trigger === 'pull_request')) {
$jobs['BENCHMARKING'] = true;
}
if ($all_jobs || $test_community) {
$jobs['COMMUNITY']['matrix'] = version_compare($php_version, '8.4', '>=')
? ['type' => ['asan', 'verify_type_inference']]
: ['type' => ['asan']];
$jobs['COMMUNITY']['config']['symfony_version'] = version_compare($php_version, '8.4', '>=') ? '8.1' : '7.4';
}
if ($trigger === 'schedule' && $ref === 'master') {
if (($all_jobs && $ref === 'master') || $test_coverage) {
$jobs['COVERAGE'] = true;
}
if ($all_jobs || $test_libmysqlclient) {
Expand Down Expand Up @@ -119,7 +129,7 @@ function select_jobs($trigger, $labels, $php_version, $ref, $all_variations) {
if ($all_jobs || $test_opcache_variation) {
$jobs['OPCACHE_VARIATION'] = true;
}
if ($trigger === 'schedule' && $ref === 'master') {
if (($all_jobs && $ref === 'master') || $test_pecl) {
$jobs['PECL'] = true;
}
if ($all_jobs || !$no_jobs || $test_windows) {
Expand Down Expand Up @@ -157,11 +167,14 @@ function select_jobs($trigger, $labels, $php_version, $ref, $all_variations) {

$labels = json_decode($argv[4] ?? '[]', true) ?? [];
$labels = array_column($labels, 'name');
$all_variations = $trigger === 'schedule' || $trigger === 'workflow_dispatch' || in_array('CI: All variations', $labels, true);
$nightly = $trigger === 'schedule' || $trigger === 'workflow_dispatch';
$all_variations = $nightly || in_array('CI: All variations', $labels, true);

$repository = $argv[5] ?? null;

foreach ($branches as &$branch) {
$php_version = $branch['version'][0] . '.' . $branch['version'][1];
$branch['jobs'] = select_jobs($trigger, $labels, $php_version, $branch['ref'], $all_variations);
$branch['jobs'] = select_jobs($repository, $trigger, $nightly, $labels, $php_version, $branch['ref'], $all_variations);
$branch['config']['ubuntu_version'] = version_compare($php_version, '8.5', '>=') ? '24.04' : '22.04';
}

Expand Down
112 changes: 110 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,7 @@ jobs:
with:
ref: ${{ fromJson(inputs.branch).ref }}
- name: Update clang
timeout-minutes: 10
uses: ./.github/actions/macos-update-clang
- name: brew
timeout-minutes: 10
Expand Down Expand Up @@ -814,6 +815,9 @@ jobs:
with:
path: php
ref: ${{ fromJson(inputs.branch).ref }}
# Used for ccache action
- name: Move .github
run: mv php/.github .
- name: git checkout apcu
uses: actions/checkout@v6
with:
Expand All @@ -830,12 +834,12 @@ jobs:
repository: php-memcached-dev/php-memcached
path: memcached
- name: git checkout redis
if: ${{ false }}
uses: actions/checkout@v6
with:
repository: phpredis/phpredis
path: redis
- name: git checkout xdebug
if: false
uses: actions/checkout@v6
with:
repository: xdebug/xdebug
Expand Down Expand Up @@ -891,13 +895,13 @@ jobs:
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
make -j$(/usr/bin/nproc)
- name: build redis
if: ${{ false }}
run: |
cd redis
/opt/php/bin/phpize
./configure --prefix=/opt/php --with-php-config=/opt/php/bin/php-config
make -j$(/usr/bin/nproc)
- name: build xdebug
if: false
run: |
cd xdebug
/opt/php/bin/phpize
Expand Down Expand Up @@ -960,3 +964,107 @@ jobs:
configurationParameters: >-
--${{ matrix.zts && 'enable' || 'disable' }}-zts
runExtraTests: true
BENCHMARKING:
name: BENCHMARKING
if: ${{ fromJson(inputs.branch).jobs.BENCHMARKING }}
runs-on: ubuntu-${{ fromJson(inputs.branch).config.ubuntu_version }}
timeout-minutes: 50
steps:
- name: git checkout
uses: actions/checkout@v6
with:
ref: ${{ fromJson(inputs.branch).ref }}
fetch-depth: 0
# ASLR can cause a lot of noise due to missed sse opportunities for memcpy
# and other operations, so we disable it during benchmarking.
- name: Disable ASLR
run: echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
- name: apt
run: |
set -x
sudo apt-get update
sudo apt-get install \
bison \
libgmp-dev \
libonig-dev \
libsqlite3-dev \
openssl \
re2c \
valgrind
- name: ccache
uses: ./.github/actions/ccache
with:
name: "${{ github.job }}"
- name: ./configure
run: |
set -x
./buildconf --force
./configure \
--disable-debug \
--enable-mbstring \
--enable-option-checking=fatal \
--enable-sockets \
--enable-werror \
--prefix=/usr \
--with-config-file-scan-dir=/etc/php.d \
--with-gmp \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-sqlite \
--with-valgrind
- name: make
run: make -j$(/usr/bin/nproc) >/dev/null
- name: make install
run: |
set -x
sudo make install
sudo mkdir -p /etc/php.d
sudo chmod 777 /etc/php.d
echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini
echo opcache.enable=1 >> /etc/php.d/opcache.ini
echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini
- name: Setup
run: |
git config --global user.name "Benchmark"
git config --global user.email "benchmark@php.net"
sudo service mysql start
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS wordpress"
mysql -uroot -proot -e "CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress'; FLUSH PRIVILEGES;"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'wordpress'@'localhost' WITH GRANT OPTION;"
- name: git checkout benchmarking-data
uses: actions/checkout@v6
with:
repository: php/benchmarking-data
ssh-key: ${{ secrets.BENCHMARKING_DATA_DEPLOY_KEY }}
path: benchmark/repos/data
- name: Benchmark
run: php benchmark/benchmark.php true
- name: Store result
if: github.event_name == 'push'
run: |
set -x
cd benchmark/repos/data
git pull --autostash
if [ -e ".git/MERGE_HEAD" ]; then
echo "Merging, can't proceed"
exit 1
fi
git add .
if git diff --cached --quiet; then
exit 0
fi
git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
git push
- name: Show diff
if: github.event_name == 'pull_request'
run: |-
set -x
php benchmark/generate_diff.php \
${{ github.sha }} \
$(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.sha }}) \
> $GITHUB_STEP_SUMMARY
- uses: actions/upload-artifact@v6
with:
name: profiles
path: ${{ github.workspace }}/benchmark/profiles
retention-days: 30
105 changes: 1 addition & 104 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- uses: actions/checkout@v6
- name: Generate Matrix
id: set-matrix
run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.ref }}" '${{ toJSON(github.event.pull_request.labels) }}'
run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.ref }}" '${{ toJSON(github.event.pull_request.labels) }}' "${{ github.repository }}"
PUSH:
needs: GENERATE_MATRIX
name: ${{ matrix.branch.ref }}
Expand All @@ -55,106 +55,3 @@ jobs:
all_variations: ${{ needs.GENERATE_MATRIX.outputs.all_variations == 'true' }}
branch: ${{ toJSON(matrix.branch) }}
secrets: inherit
BENCHMARKING:
name: BENCHMARKING
if: github.repository == 'php/php-src' || github.event_name == 'pull_request'
runs-on: ubuntu-24.04
timeout-minutes: 50
steps:
- name: git checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
# ASLR can cause a lot of noise due to missed sse opportunities for memcpy
# and other operations, so we disable it during benchmarking.
- name: Disable ASLR
run: echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
- name: apt
run: |
set -x
sudo apt-get update
sudo apt-get install \
bison \
libgmp-dev \
libonig-dev \
libsqlite3-dev \
openssl \
re2c \
valgrind
- name: ccache
uses: ./.github/actions/ccache
with:
name: "${{ github.job }}"
- name: ./configure
run: |
set -x
./buildconf --force
./configure \
--disable-debug \
--enable-mbstring \
--enable-option-checking=fatal \
--enable-sockets \
--enable-werror \
--prefix=/usr \
--with-config-file-scan-dir=/etc/php.d \
--with-gmp \
--with-mysqli=mysqlnd \
--with-openssl \
--with-pdo-sqlite \
--with-valgrind
- name: make
run: make -j$(/usr/bin/nproc) >/dev/null
- name: make install
run: |
set -x
sudo make install
sudo mkdir -p /etc/php.d
sudo chmod 777 /etc/php.d
echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini
echo opcache.enable=1 >> /etc/php.d/opcache.ini
echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini
- name: Setup
run: |
git config --global user.name "Benchmark"
git config --global user.email "benchmark@php.net"
sudo service mysql start
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS wordpress"
mysql -uroot -proot -e "CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress'; FLUSH PRIVILEGES;"
mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'wordpress'@'localhost' WITH GRANT OPTION;"
- name: git checkout benchmarking-data
uses: actions/checkout@v6
with:
repository: php/benchmarking-data
ssh-key: ${{ secrets.BENCHMARKING_DATA_DEPLOY_KEY }}
path: benchmark/repos/data
- name: Benchmark
run: php benchmark/benchmark.php true
- name: Store result
if: github.event_name == 'push'
run: |
set -x
cd benchmark/repos/data
git pull --autostash
if [ -e ".git/MERGE_HEAD" ]; then
echo "Merging, can't proceed"
exit 1
fi
git add .
if git diff --cached --quiet; then
exit 0
fi
git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
git push
- name: Show diff
if: github.event_name == 'pull_request'
run: |-
set -x
php benchmark/generate_diff.php \
${{ github.sha }} \
$(git merge-base ${{ github.event.pull_request.base.sha }} ${{ github.sha }}) \
> $GITHUB_STEP_SUMMARY
- uses: actions/upload-artifact@v6
with:
name: profiles
path: ${{ github.workspace }}/benchmark/profiles
retention-days: 30
2 changes: 1 addition & 1 deletion .github/workflows/root.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
nightly-
- name: Generate Matrix
id: set-matrix
run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.head_ref || github.ref_name }}" '[]'
run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" "${{ github.head_ref || github.ref_name }}" '[]' "${{ github.repository }}"
NIGHTLY:
needs: GENERATE_MATRIX
name: ${{ matrix.branch.ref }}
Expand Down
1 change: 1 addition & 0 deletions ext/curl/tests/curl_persistent_share_002.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Curl persistent share handle test with different options
curl
--SKIPIF--
<?php
if (getenv('SKIP_REPEAT')) die("skip Not repeatable");
include 'skipif-nocaddy.inc';
?>
--FILE--
Expand Down
Loading
Loading