[skip ci] Move nightly to workflow_call

This PR removes most of the logic of nightly_matrix.php by converting
nightly.yml to a workflow_call, and invoking it multiple times for each branch
in a new root.yml workflow. The naming of the files is intentionally kept to
make the diff readable. They may still be renamed afterward.

Closes GH-16642
This commit is contained in:
Ilija Tovilo 2024-10-29 17:26:46 +01:00
parent 769947648e
commit 08bbd7d167
No known key found for this signature in database
GPG Key ID: 5050C66BFCD1015A
3 changed files with 230 additions and 261 deletions

View File

@ -1,12 +1,6 @@
<?php <?php
const BRANCHES = [ const BRANCHES = ['master', 'PHP-8.4', 'PHP-8.3', 'PHP-8.2', 'PHP-8.1'];
['name' => 'master', 'ref' => 'master', 'version' => ['major' => 8, 'minor' => 5]],
['name' => 'PHP-8.4', 'ref' => 'PHP-8.4', 'version' => ['major' => 8, 'minor' => 4]],
['name' => 'PHP-8.3', 'ref' => 'PHP-8.3', 'version' => ['major' => 8, 'minor' => 3]],
['name' => 'PHP-8.2', 'ref' => 'PHP-8.2', 'version' => ['major' => 8, 'minor' => 2]],
['name' => 'PHP-8.1', 'ref' => 'PHP-8.1', 'version' => ['major' => 8, 'minor' => 1]],
];
function get_branch_commit_cache_file_path(): string { function get_branch_commit_cache_file_path(): string {
return dirname(__DIR__) . '/branch-commit-cache.json'; return dirname(__DIR__) . '/branch-commit-cache.json';
@ -21,14 +15,14 @@ function get_branches() {
$changed_branches = []; $changed_branches = [];
foreach (BRANCHES as $branch) { foreach (BRANCHES as $branch) {
$previous_commit_hash = $branch_commit_map[$branch['ref']] ?? null; $previous_commit_hash = $branch_commit_map[$branch] ?? null;
$current_commit_hash = trim(shell_exec('git rev-parse origin/' . $branch['ref'])); $current_commit_hash = trim(shell_exec('git rev-parse origin/' . $branch));
if ($previous_commit_hash !== $current_commit_hash) { if ($previous_commit_hash !== $current_commit_hash) {
$changed_branches[] = $branch; $changed_branches[] = $branch;
} }
$branch_commit_map[$branch['ref']] = $current_commit_hash; $branch_commit_map[$branch] = $current_commit_hash;
} }
file_put_contents($branch_commit_cache_file, json_encode($branch_commit_map)); file_put_contents($branch_commit_cache_file, json_encode($branch_commit_map));
@ -36,122 +30,6 @@ function get_branches() {
return $changed_branches; return $changed_branches;
} }
function get_matrix_include(array $branches) {
$jobs = [];
foreach ($branches as $branch) {
$jobs[] = [
'name' => '_ASAN_UBSAN',
'branch' => $branch,
'debug' => true,
'zts' => true,
'configuration_parameters' => "CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC' LDFLAGS='-fsanitize=undefined,address'",
'run_tests_parameters' => '--asan',
'test_function_jit' => false,
'asan' => true,
];
$jobs[] = [
'name' => '_REPEAT',
'branch' => $branch,
'debug' => true,
'zts' => false,
'run_tests_parameters' => '--repeat 2',
'timeout_minutes' => 360,
'test_function_jit' => true,
'asan' => false,
];
$jobs[] = [
'name' => '_VARIATION',
'branch' => $branch,
'debug' => true,
'zts' => true,
'configuration_parameters' => "CFLAGS='-DZEND_RC_DEBUG=1 -DPROFITABILITY_CHECKS=0 -DZEND_VERIFY_FUNC_INFO=1 -DZEND_VERIFY_TYPE_INFERENCE'",
'run_tests_parameters' => '-d zend_test.observer.enabled=1 -d zend_test.observer.show_output=0',
'timeout_minutes' => 360,
'test_function_jit' => true,
'asan' => false,
];
}
return $jobs;
}
function get_windows_matrix_include(array $branches) {
$jobs = [];
foreach ($branches as $branch) {
$jobs[] = [
'branch' => $branch,
'x64' => true,
'zts' => true,
'opcache' => true,
];
$jobs[] = [
'branch' => $branch,
'x64' => false,
'zts' => false,
'opcache' => false,
];
}
return $jobs;
}
function get_macos_matrix_include(array $branches) {
$jobs = [];
foreach ($branches as $branch) {
foreach([true, false] as $debug) {
foreach([true, false] as $zts) {
$jobs[] = [
'branch' => $branch,
'debug' => $debug,
'zts' => $zts,
'os' => '13',
'arch' => 'X64',
'test_jit' => true,
];
if ($branch['version']['minor'] >= 4 || $branch['version']['major'] >= 9) {
$jobs[] = [
'branch' => $branch,
'debug' => $debug,
'zts' => $zts,
'os' => '14',
'arch' => 'ARM64',
'test_jit' => !$zts,
];
}
}
}
}
return $jobs;
}
function get_alpine_matrix_include(array $branches) {
$jobs = [];
foreach ($branches as $branch) {
if ([$branch['version']['major'], $branch['version']['minor']] < [8, 4]) {
continue;
}
$jobs[] = [
'name' => '_ASAN_UBSAN',
'branch' => $branch,
'debug' => true,
'zts' => true,
'asan' => true,
'test_jit' => true,
'configuration_parameters' => "CFLAGS='-fsanitize=undefined,address -fno-sanitize=function -DZEND_TRACK_ARENA_ALLOC' LDFLAGS='-fsanitize=undefined,address -fno-sanitize=function' CC=clang-17 CXX=clang++-17",
'run_tests_parameters' => '--asan -x',
];
}
return $jobs;
}
function get_current_version(): array {
$file = dirname(__DIR__) . '/main/php_version.h';
$content = file_get_contents($file);
preg_match('(^#define PHP_MAJOR_VERSION (?<num>\d+)$)m', $content, $matches);
$major = $matches['num'];
preg_match('(^#define PHP_MINOR_VERSION (?<num>\d+)$)m', $content, $matches);
$minor = $matches['num'];
return ['major' => $major, 'minor' => $minor];
}
$trigger = $argv[1] ?? 'schedule'; $trigger = $argv[1] ?? 'schedule';
$attempt = (int) ($argv[2] ?? 1); $attempt = (int) ($argv[2] ?? 1);
$monday = date('w', time()) === '1'; $monday = date('w', time()) === '1';
@ -162,19 +40,8 @@ if ($discard_cache) {
@unlink(get_branch_commit_cache_file_path()); @unlink(get_branch_commit_cache_file_path());
} }
$branch = $argv[3] ?? 'master'; $branch = $argv[3] ?? 'master';
$branches = $branch === 'master' ? get_branches() : [$branch];
$branches = $branch === 'master'
? get_branches()
: [['name' => strtoupper($branch), 'ref' => $branch, 'version' => get_current_version()]];
$matrix_include = get_matrix_include($branches);
$windows_matrix_include = get_windows_matrix_include($branches);
$macos_matrix_include = get_macos_matrix_include($branches);
$alpine_matrix_include = get_alpine_matrix_include($branches);
$f = fopen(getenv('GITHUB_OUTPUT'), 'a'); $f = fopen(getenv('GITHUB_OUTPUT'), 'a');
fwrite($f, 'branches=' . json_encode($branches, JSON_UNESCAPED_SLASHES) . "\n"); fwrite($f, 'branches=' . json_encode($branches, JSON_UNESCAPED_SLASHES) . "\n");
fwrite($f, 'matrix-include=' . json_encode($matrix_include, JSON_UNESCAPED_SLASHES) . "\n");
fwrite($f, 'windows-matrix-include=' . json_encode($windows_matrix_include, JSON_UNESCAPED_SLASHES) . "\n");
fwrite($f, 'macos-matrix-include=' . json_encode($macos_matrix_include, JSON_UNESCAPED_SLASHES) . "\n");
fwrite($f, 'alpine-matrix-include=' . json_encode($alpine_matrix_include, JSON_UNESCAPED_SLASHES) . "\n");
fclose($f); fclose($f);

View File

@ -1,53 +1,37 @@
name: Nightly name: Test suite
on: on:
schedule: workflow_call:
- cron: "0 1 * * *" inputs:
workflow_dispatch: ~ asan_ubuntu_version:
required: true
type: string
branch:
required: true
type: string
community_verify_type_inference:
required: true
type: boolean
libmysqlclient_with_mysqli:
required: true
type: boolean
run_alpine:
required: true
type: boolean
run_macos_arm64:
required: true
type: boolean
ubuntu_version:
required: true
type: string
windows_version:
required: true
type: string
permissions: permissions:
contents: read contents: read
jobs: jobs:
GENERATE_MATRIX:
name: Generate Matrix
if: github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
outputs:
branches: ${{ steps.set-matrix.outputs.branches }}
matrix-include: ${{ steps.set-matrix.outputs.matrix-include }}
windows-matrix-include: ${{ steps.set-matrix.outputs.windows-matrix-include }}
macos-matrix-include: ${{ steps.set-matrix.outputs.macos-matrix-include }}
alpine-matrix-include: ${{ steps.set-matrix.outputs.alpine-matrix-include }}
steps:
- uses: actions/checkout@v4
with:
# Set fetch-depth to 0 to clone the full repository
# including all branches. This is required to find
# the correct commit hashes.
fetch-depth: 0
- name: Grab the commit mapping
uses: actions/cache@v4
with:
path: branch-commit-cache.json
# The cache key needs to change every time for the
# cache to be updated after this job finishes.
key: nightly-${{ github.run_id }}-${{ github.run_attempt }}
restore-keys: |
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 }}"
- name: Notify Slack
if: failure()
uses: ./.github/actions/notify-slack
with:
token: ${{ secrets.ACTION_MONITORING_SLACK }}
ALPINE: ALPINE:
needs: GENERATE_MATRIX if: inputs.run_alpine
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} name: ALPINE_X64_ASAN_UBSAN_DEBUG_ZTS
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.GENERATE_MATRIX.outputs.alpine-matrix-include) }}
name: "${{ matrix.branch.name }}_ALPINE_X64${{ matrix.name }}_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}"
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
container: container:
image: 'alpine:3.20.1' image: 'alpine:3.20.1'
@ -55,11 +39,10 @@ jobs:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: apk - name: apk
uses: ./.github/actions/apk uses: ./.github/actions/apk
- name: LLVM 17 (ASAN-only) - name: LLVM 17 (ASAN-only)
if: ${{ matrix.asan }}
# libclang_rt.asan-x86_64.a is provided by compiler-rt, and only for clang17: # libclang_rt.asan-x86_64.a is provided by compiler-rt, and only for clang17:
# https://pkgs.alpinelinux.org/contents?file=libclang_rt.asan-x86_64.a&path=&name=&branch=v3.20 # https://pkgs.alpinelinux.org/contents?file=libclang_rt.asan-x86_64.a&path=&name=&branch=v3.20
run: | run: |
@ -76,21 +59,23 @@ jobs:
uses: ./.github/actions/configure-alpine uses: ./.github/actions/configure-alpine
with: with:
configurationParameters: >- configurationParameters: >-
${{ matrix.configuration_parameters }} CFLAGS="-fsanitize=undefined,address -fno-sanitize=function -DZEND_TRACK_ARENA_ALLOC"
--${{ matrix.debug && 'enable' || 'disable' }}-debug LDFLAGS="-fsanitize=undefined,address -fno-sanitize=function"
--${{ matrix.zts && 'enable' || 'disable' }}-zts CC=clang-17
skipSlow: ${{ matrix.asan }} CXX=clang++-17
--enable-debug
--enable-zts
skipSlow: true # FIXME: This should likely include slow extensions
- name: make - name: make
run: make -j$(/usr/bin/nproc) >/dev/null run: make -j$(/usr/bin/nproc) >/dev/null
- name: make install - name: make install
uses: ./.github/actions/install-alpine uses: ./.github/actions/install-alpine
- name: Test Tracing JIT - name: Test Tracing JIT
if: matrix.test_jit
uses: ./.github/actions/test-alpine uses: ./.github/actions/test-alpine
with: with:
jitType: tracing jitType: tracing
runTestsParameters: >- runTestsParameters: >-
${{ matrix.run_tests_parameters }} --asan -x
-d zend_extension=opcache.so -d zend_extension=opcache.so
-d opcache.enable_cli=1 -d opcache.enable_cli=1
- name: Notify Slack - name: Notify Slack
@ -100,8 +85,6 @@ jobs:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
LINUX_X64: LINUX_X64:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
services: services:
mysql: mysql:
image: mysql:8.3 image: mysql:8.3
@ -128,21 +111,45 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }}
configuration_parameters: [''] configuration_parameters: ['']
debug: [true, false] debug: [true, false]
name: [''] name: ['']
run_tests_parameters: [''] run_tests_parameters: ['']
test_function_jit: [true] test_function_jit: [true]
zts: [true, false] zts: [true, false]
include: ${{ fromJson(needs.GENERATE_MATRIX.outputs.matrix-include) }} include:
name: "${{ matrix.branch.name }}_LINUX_X64${{ matrix.name }}_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}" - name: _ASAN_UBSAN
runs-on: ubuntu-${{ (matrix.branch.version.minor >= 3 && !matrix.asan) && '22.04' || '20.04' }} debug: true
zts: true
configuration_parameters: >-
CFLAGS="-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC"
LDFLAGS="-fsanitize=undefined,address"
run_tests_parameters: '--asan'
test_function_jit: false
asan: true
- name: _REPEAT
debug: true
zts: false
run_tests_parameters: --repeat 2
timeout_minutes: 360
test_function_jit: true
asan: false
- name: _VARIATION
debug: true
zts: true
configuration_parameters: >-
CFLAGS="-DZEND_RC_DEBUG=1 -DPROFITABILITY_CHECKS=0 -DZEND_VERIFY_FUNC_INFO=1 -DZEND_VERIFY_TYPE_INFERENCE"
run_tests_parameters: -d zend_test.observer.enabled=1 -d zend_test.observer.show_output=0
timeout_minutes: 360
test_function_jit: true
asan: false
name: "LINUX_X64${{ matrix.name }}_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}"
runs-on: ubuntu-${{ matrix.asan && inputs.asan_ubuntu_version || inputs.ubuntu_version }}
steps: steps:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: Create MSSQL container - name: Create MSSQL container
uses: ./.github/actions/setup-mssql uses: ./.github/actions/setup-mssql
- name: apt - name: apt
@ -211,18 +218,15 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
LINUX_X32: LINUX_X32:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }}
debug: [true, false] debug: [true, false]
zts: [true, false] zts: [true, false]
name: "${{ matrix.branch.name }}_LINUX_X32_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}" name: "LINUX_X32_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}"
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: ubuntu:${{ matrix.branch.version.minor >= 3 && '22.04' || '20.04' }} image: ubuntu:${{ inputs.ubuntu_version }}
services: services:
mysql: mysql:
image: mysql:8.3 image: mysql:8.3
@ -235,7 +239,7 @@ jobs:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: apt - name: apt
uses: ./.github/actions/apt-x32 uses: ./.github/actions/apt-x32
- name: System info - name: System info
@ -290,19 +294,21 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
MACOS: MACOS:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: ${{ fromJson(needs.GENERATE_MATRIX.outputs.macos-matrix-include) }} debug: [true, false]
name: "${{ matrix.branch.name }}_MACOS_${{ matrix.arch }}_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}" zts: [true, false]
os: ['13', '14']
exclude:
- os: ${{ !inputs.run_macos_arm64 && '14' || '*never*' }}
name: "MACOS_${{ matrix.os == '13' && 'X64' || 'ARM64' }}_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}"
runs-on: macos-${{ matrix.os }} runs-on: macos-${{ matrix.os }}
steps: steps:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: brew - name: brew
uses: ./.github/actions/brew uses: ./.github/actions/brew
- name: ./configure - name: ./configure
@ -320,7 +326,7 @@ jobs:
- name: Test - name: Test
uses: ./.github/actions/test-macos uses: ./.github/actions/test-macos
- name: Test Tracing JIT - name: Test Tracing JIT
if: matrix.test_jit if: matrix.os != '14' || !matrix.zts
uses: ./.github/actions/test-macos uses: ./.github/actions/test-macos
with: with:
jitType: tracing jitType: tracing
@ -334,7 +340,7 @@ jobs:
-d zend_extension=opcache.so -d zend_extension=opcache.so
-d opcache.enable_cli=1 -d opcache.enable_cli=1
- name: Test Function JIT - name: Test Function JIT
if: matrix.test_jit if: matrix.os != '14' || !matrix.zts
uses: ./.github/actions/test-macos uses: ./.github/actions/test-macos
with: with:
jitType: function jitType: function
@ -349,7 +355,7 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
COVERAGE_DEBUG_NTS: COVERAGE_DEBUG_NTS:
if: github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch' if: inputs.branch == 'master'
services: services:
mysql: mysql:
image: mysql:8.3 image: mysql:8.3
@ -377,6 +383,8 @@ jobs:
steps: steps:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with:
ref: ${{ inputs.branch }}
- name: Create MSSQL container - name: Create MSSQL container
uses: ./.github/actions/setup-mssql uses: ./.github/actions/setup-mssql
- name: apt - name: apt
@ -413,20 +421,14 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
COMMUNITY: COMMUNITY:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }}
type: ['asan', 'verify_type_inference'] type: ['asan', 'verify_type_inference']
# These branches don't include type verification
exclude: exclude:
- { branch: { name: 'PHP-8.1', ref: 'PHP-8.1', major: 8, minor: 1 }, type: 'verify_type_inference' } - type: ${{ !inputs.community_verify_type_inference && 'verify_type_inference' || '*never*' }}
- { branch: { name: 'PHP-8.2', ref: 'PHP-8.2', major: 8, minor: 2 }, type: 'verify_type_inference' } name: "COMMUNITY_${{ matrix.type }}"
- { branch: { name: 'PHP-8.3', ref: 'PHP-8.3', major: 8, minor: 3 }, type: 'verify_type_inference' } runs-on: ubuntu-${{ inputs.ubuntu_version }}
name: "${{ matrix.branch.name }}_COMMUNITY_${{ matrix.type }}"
runs-on: ubuntu-${{ matrix.branch.version.minor >= 3 && '22.04' || '20.04' }}
env: env:
ASAN_OPTIONS: exitcode=139 ASAN_OPTIONS: exitcode=139
UBSAN_OPTIONS: print_stacktrace=1 UBSAN_OPTIONS: print_stacktrace=1
@ -436,7 +438,7 @@ jobs:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: apt - name: apt
uses: ./.github/actions/apt-x64 uses: ./.github/actions/apt-x64
- name: ./configure - name: ./configure
@ -601,8 +603,6 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
OPCACHE_VARIATION: OPCACHE_VARIATION:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
services: services:
mysql: mysql:
image: mysql:8.3 image: mysql:8.3
@ -626,17 +626,13 @@ jobs:
FIREBIRD_DATABASE: test.fdb FIREBIRD_DATABASE: test.fdb
FIREBIRD_USER: test FIREBIRD_USER: test
FIREBIRD_PASSWORD: test FIREBIRD_PASSWORD: test
strategy: name: OPCACHE_VARIATION
fail-fast: false runs-on: ubuntu-${{ inputs.ubuntu_version }}
matrix:
branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }}
name: "${{ matrix.branch.name }}_OPCACHE_VARIATION"
runs-on: ubuntu-${{ matrix.branch.version.minor >= 3 && '22.04' || '20.04' }}
steps: steps:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: Create MSSQL container - name: Create MSSQL container
uses: ./.github/actions/setup-mssql uses: ./.github/actions/setup-mssql
- name: apt - name: apt
@ -698,19 +694,13 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
MSAN: MSAN:
needs: GENERATE_MATRIX name: MSAN
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} runs-on: ubuntu-${{ inputs.ubuntu_version }}
strategy:
fail-fast: false
matrix:
branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }}
name: "${{ matrix.branch.name }}_MSAN"
runs-on: ubuntu-${{ matrix.branch.version.minor >= 3 && '22.04' || '20.04' }}
steps: steps:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: apt - name: apt
uses: ./.github/actions/apt-x64 uses: ./.github/actions/apt-x64
- name: ./configure - name: ./configure
@ -796,19 +786,13 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
LIBMYSQLCLIENT: LIBMYSQLCLIENT:
needs: GENERATE_MATRIX name: LIBMYSQLCLIENT
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} runs-on: ubuntu-${{ inputs.ubuntu_version }}
strategy:
fail-fast: false
matrix:
branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }}
name: "${{ matrix.branch.name }}_LIBMYSQLCLIENT"
runs-on: ubuntu-${{ matrix.branch.version.minor >= 3 && '22.04' || '20.04' }}
steps: steps:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: apt - name: apt
run: | run: |
sudo apt-get update -y | true sudo apt-get update -y | true
@ -823,20 +807,20 @@ jobs:
uses: ./.github/actions/build-libmysqlclient uses: ./.github/actions/build-libmysqlclient
with: with:
libmysql: mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz libmysql: mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz
withMysqli: ${{ matrix.branch.ref == 'PHP-8.1' }} withMysqli: ${{ inputs.libmysqlclient_with_mysqli }}
- name: Test mysql-8.0 - name: Test mysql-8.0
uses: ./.github/actions/test-libmysqlclient uses: ./.github/actions/test-libmysqlclient
with: with:
withMysqli: ${{ matrix.branch.ref == 'PHP-8.1' }} withMysqli: ${{ inputs.libmysqlclient_with_mysqli }}
- name: Build mysql-8.4 - name: Build mysql-8.4
uses: ./.github/actions/build-libmysqlclient uses: ./.github/actions/build-libmysqlclient
with: with:
libmysql: mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz libmysql: mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz
withMysqli: ${{ matrix.branch.ref == 'PHP-8.1' }} withMysqli: ${{ inputs.libmysqlclient_with_mysqli }}
- name: Test mysql-8.4 - name: Test mysql-8.4
uses: ./.github/actions/test-libmysqlclient uses: ./.github/actions/test-libmysqlclient
with: with:
withMysqli: ${{ matrix.branch.ref == 'PHP-8.1' }} withMysqli: ${{ inputs.libmysqlclient_with_mysqli }}
- name: Verify generated files are up to date - name: Verify generated files are up to date
uses: ./.github/actions/verify-generated-files uses: ./.github/actions/verify-generated-files
- name: Notify Slack - name: Notify Slack
@ -845,7 +829,7 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
PECL: PECL:
if: github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch' if: inputs.branch == 'master'
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
env: env:
CC: ccache gcc CC: ccache gcc
@ -855,6 +839,7 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
path: php path: php
ref: ${{ inputs.branch }}
- name: git checkout apcu - name: git checkout apcu
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
@ -956,20 +941,24 @@ jobs:
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
WINDOWS: WINDOWS:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: ${{ fromJson(needs.GENERATE_MATRIX.outputs.windows-matrix-include) }} include:
name: "${{ matrix.branch.name }}_WINDOWS_${{ matrix.x64 && 'X64' || 'X86' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}" - x64: true
runs-on: ${{ (matrix.branch.version.minor >= 4) && 'windows-2022' || 'windows-2019' }} zts: true
opcache: true
- x64: false
zts: false
opcache: false
name: "WINDOWS_${{ matrix.x64 && 'X64' || 'X86' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}"
runs-on: windows-${{ inputs.windows_version }}
env: env:
PHP_BUILD_CACHE_BASE_DIR: C:\build-cache PHP_BUILD_CACHE_BASE_DIR: C:\build-cache
PHP_BUILD_OBJ_DIR: C:\obj PHP_BUILD_OBJ_DIR: C:\obj
PHP_BUILD_CACHE_SDK_DIR: C:\build-cache\sdk PHP_BUILD_CACHE_SDK_DIR: C:\build-cache\sdk
PHP_BUILD_SDK_BRANCH: php-sdk-2.3.0 PHP_BUILD_SDK_BRANCH: php-sdk-2.3.0
PHP_BUILD_CRT: ${{ (matrix.branch.version.minor >= 4) && 'vs17' || 'vs16' }} PHP_BUILD_CRT: ${{ inputs.windows_version == '2022' && 'vs17' || 'vs16' }}
PLATFORM: ${{ matrix.x64 && 'x64' || 'x86' }} PLATFORM: ${{ matrix.x64 && 'x64' || 'x86' }}
THREAD_SAFE: "${{ matrix.zts && '1' || '0' }}" THREAD_SAFE: "${{ matrix.zts && '1' || '0' }}"
INTRINSICS: "${{ matrix.zts && 'AVX2' || '' }}" INTRINSICS: "${{ matrix.zts && 'AVX2' || '' }}"
@ -981,7 +970,7 @@ jobs:
- name: git checkout - name: git checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
ref: ${{ matrix.branch.ref }} ref: ${{ inputs.branch }}
- name: Setup - name: Setup
uses: ./.github/actions/setup-windows uses: ./.github/actions/setup-windows
- name: Build - name: Build

113
.github/workflows/root.yml vendored Normal file
View File

@ -0,0 +1,113 @@
name: Nightly
on:
schedule:
- cron: "0 1 * * *"
workflow_dispatch: ~
permissions:
contents: read
jobs:
GENERATE_MATRIX:
name: Generate Matrix
if: github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
outputs:
branches: ${{ steps.set-matrix.outputs.branches }}
steps:
- uses: actions/checkout@v4
with:
# Set fetch-depth to 0 to clone the full repository
# including all branches. This is required to find
# the correct commit hashes.
fetch-depth: 0
- name: Grab the commit mapping
uses: actions/cache@v4
with:
path: branch-commit-cache.json
# The cache key needs to change every time for the
# cache to be updated after this job finishes.
key: nightly-${{ github.run_id }}-${{ github.run_attempt }}
restore-keys: |
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 }}"
- name: Notify Slack
if: failure()
uses: ./.github/actions/notify-slack
with:
token: ${{ secrets.ACTION_MONITORING_SLACK }}
NIGHTLY_MASTER:
name: master
needs: GENERATE_MATRIX
if: contains(needs.GENERATE_MATRIX.outputs.branches, 'master')
uses: ./.github/workflows/nightly.yml
with:
asan_ubuntu_version: '20.04'
branch: master
community_verify_type_inference: true
libmysqlclient_with_mysqli: false
run_alpine: true
run_macos_arm64: true
ubuntu_version: '22.04'
windows_version: '2022'
secrets: inherit
NIGHTLY_84:
name: PHP-8.4
needs: GENERATE_MATRIX
if: contains(needs.GENERATE_MATRIX.outputs.branches, 'PHP-8.4')
uses: ./.github/workflows/nightly.yml
with:
asan_ubuntu_version: '20.04'
branch: PHP-8.4
community_verify_type_inference: true
libmysqlclient_with_mysqli: false
run_alpine: true
run_macos_arm64: true
ubuntu_version: '22.04'
windows_version: '2022'
secrets: inherit
NIGHTLY_83:
name: PHP-8.3
needs: GENERATE_MATRIX
if: contains(needs.GENERATE_MATRIX.outputs.branches, 'PHP-8.3')
uses: ./.github/workflows/nightly.yml
with:
asan_ubuntu_version: '20.04'
branch: PHP-8.3
community_verify_type_inference: false
libmysqlclient_with_mysqli: false
run_alpine: false
run_macos_arm64: false
ubuntu_version: '22.04'
windows_version: '2019'
secrets: inherit
NIGHTLY_82:
name: PHP-8.2
needs: GENERATE_MATRIX
if: contains(needs.GENERATE_MATRIX.outputs.branches, 'PHP-8.2')
uses: ./.github/workflows/nightly.yml
with:
asan_ubuntu_version: '20.04'
branch: PHP-8.2
community_verify_type_inference: false
libmysqlclient_with_mysqli: false
run_alpine: false
run_macos_arm64: false
ubuntu_version: '20.04'
windows_version: '2019'
secrets: inherit
NIGHTLY_81:
name: PHP-8.2
needs: GENERATE_MATRIX
if: contains(needs.GENERATE_MATRIX.outputs.branches, 'PHP-8.1')
uses: ./.github/workflows/nightly.yml
with:
asan_ubuntu_version: '20.04'
branch: PHP-8.1
community_verify_type_inference: false
libmysqlclient_with_mysqli: true
run_alpine: false
run_macos_arm64: false
ubuntu_version: '20.04'
windows_version: '2019'
secrets: inherit