Alpine/Musl nightly job (#13925)

Co-authored-by: Michael Voříšek <mvorisek@mvorisek.cz>
This commit is contained in:
Arnaud Le Blanc 2024-08-28 17:28:07 +02:00 committed by GitHub
parent 4f6f4fb7d5
commit 5b482b706e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 258 additions and 1 deletions

61
.github/actions/apk/action.yml vendored Normal file
View File

@ -0,0 +1,61 @@
name: apk
runs:
using: composite
steps:
- shell: sh
run: |
set -x
apk update -q
apk add \
util-linux \
bash \
sudo \
build-base \
autoconf \
unzip \
tar \
bison \
re2c \
pkgconf \
mysql-client \
aspell-dev \
hunspell-dev \
hunspell-en \
bzip2-dev \
curl-dev \
freetype-dev \
gettext-dev \
gnu-libiconv-dev \
gmp-dev \
icu-dev \
icu-data-full \
jpeg-dev \
libffi-dev \
libpng-dev \
libsodium-dev \
libwebp-dev \
libxml2-dev \
libxpm-dev \
libxslt-dev \
libzip-dev \
oniguruma-dev \
openssl-dev \
readline-dev \
sqlite-dev \
tidyhtml-dev \
krb5-dev \
gdbm-dev \
lmdb-dev \
argon2-dev \
enchant2-dev \
enchant2-hunspell \
freetds-dev \
imap-dev \
net-snmp-dev \
openldap-dev \
unixodbc-dev \
postgresql14-dev \
tzdata \
musl-locales \
musl-locales-lang

View File

@ -0,0 +1,79 @@
name: ./configure
inputs:
configurationParameters:
default: ''
required: false
skipSlow:
default: false
required: false
runs:
using: composite
steps:
- shell: bash
run: |
set -x
./buildconf --force
./configure \
--enable-option-checking=fatal \
--prefix=/usr \
--enable-phpdbg \
--enable-fpm \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
${{ inputs.skipSlow == 'false' && '--with-pgsql' || '' }} \
${{ inputs.skipSlow == 'false' && '--with-pdo-pgsql' || '' }} \
${{ inputs.skipSlow == 'false' && '--with-pdo-sqlite' || '' }} \
--enable-intl \
--without-pear \
--enable-gd \
--with-jpeg \
--with-webp \
--with-freetype \
--with-xpm \
--enable-exif \
--with-zip \
--with-zlib \
--enable-soap \
--enable-xmlreader \
--with-xsl \
${{ inputs.skipSlow == 'false' && '--with-tidy' || '' }} \
--enable-sysvsem \
--enable-sysvshm \
--enable-shmop \
--enable-pcntl \
--with-readline \
--enable-mbstring \
--with-iconv=/usr \
--with-curl \
--with-gettext \
--enable-sockets \
--with-bz2 \
--with-openssl \
--with-gmp \
--enable-bcmath \
--enable-calendar \
--enable-ftp \
${{ inputs.skipSlow == 'false' && '--with-enchant=/usr' || '' }} \
--enable-sysvmsg \
--with-ffi \
--enable-zend-test \
${{ inputs.skipSlow == 'false' && '--enable-dl-test=shared' || '' }} \
${{ inputs.skipSlow == 'false' && '--with-ldap' || '' }} \
${{ inputs.skipSlow == 'false' && '--with-ldap-sasl' || '' }} \
--with-password-argon2 \
--with-mhash \
--with-sodium \
--enable-dba \
--with-cdb \
--enable-flatfile \
--enable-inifile \
--with-lmdb \
--with-gdbm \
${{ inputs.skipSlow == 'false' && '--with-snmp' || '' }} \
${{ inputs.skipSlow == 'false' && '--with-unixODBC' || '' }} \
${{ inputs.skipSlow == 'false' && '--with-pdo-odbc=unixODBC,/usr' || '' }} \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
${{ inputs.skipSlow == 'false' && '--with-pdo-dblib' || '' }} \
--enable-werror \
${{ inputs.configurationParameters }}

View File

@ -0,0 +1,10 @@
name: Install
runs:
using: composite
steps:
- shell: bash
run: |
set -x
sudo make install
sudo mkdir -p /etc/php.d
sudo chmod 777 /etc/php.d

25
.github/actions/test-alpine/action.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: Test
inputs:
runTestsParameters:
default: ''
required: false
jitType:
default: 'disable'
required: false
runs:
using: composite
steps:
- shell: bash
run: |
set -x
export SKIP_IO_CAPTURE_TESTS=1
export STACK_LIMIT_DEFAULTS_CHECK=1
sapi/cli/php run-tests.php -P -q ${{ inputs.runTestsParameters }} \
-d opcache.jit=${{ inputs.jitType }} \
-d opcache.jit_buffer_size=64M \
-j$(nproc) \
-g FAIL,BORK,LEAK,XLEAK \
--no-progress \
--show-diff \
--show-slow 1000 \
--set-timeout 120

View File

@ -121,6 +121,26 @@ function get_macos_matrix_include(array $branches) {
return $jobs; 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 { function get_current_version(): array {
$file = dirname(__DIR__) . '/main/php_version.h'; $file = dirname(__DIR__) . '/main/php_version.h';
$content = file_get_contents($file); $content = file_get_contents($file);
@ -145,10 +165,12 @@ $branches = $branch === 'master'
$matrix_include = get_matrix_include($branches); $matrix_include = get_matrix_include($branches);
$windows_matrix_include = get_windows_matrix_include($branches); $windows_matrix_include = get_windows_matrix_include($branches);
$macos_matrix_include = get_macos_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, '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, '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, '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

@ -15,6 +15,7 @@ jobs:
matrix-include: ${{ steps.set-matrix.outputs.matrix-include }} matrix-include: ${{ steps.set-matrix.outputs.matrix-include }}
windows-matrix-include: ${{ steps.set-matrix.outputs.windows-matrix-include }} windows-matrix-include: ${{ steps.set-matrix.outputs.windows-matrix-include }}
macos-matrix-include: ${{ steps.set-matrix.outputs.macos-matrix-include }} macos-matrix-include: ${{ steps.set-matrix.outputs.macos-matrix-include }}
alpine-matrix-include: ${{ steps.set-matrix.outputs.alpine-matrix-include }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@ -39,6 +40,65 @@ jobs:
uses: ./.github/actions/notify-slack uses: ./.github/actions/notify-slack
with: with:
token: ${{ secrets.ACTION_MONITORING_SLACK }} token: ${{ secrets.ACTION_MONITORING_SLACK }}
ALPINE:
needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}
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
container:
image: 'alpine:3.20.1'
steps:
- name: git checkout
uses: actions/checkout@v4
with:
ref: ${{ matrix.branch.ref }}
- name: apk
uses: ./.github/actions/apk
- name: LLVM 17 (ASAN-only)
if: ${{ matrix.asan }}
# 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
run: |
apk add clang17 compiler-rt
- name: System info
run: |
echo "::group::Show host CPU info"
lscpu
echo "::endgroup::"
echo "::group::Show installed package versions"
apk list
echo "::endgroup::"
- name: ./configure
uses: ./.github/actions/configure-alpine
with:
configurationParameters: >-
${{ matrix.configuration_parameters }}
--${{ matrix.debug && 'enable' || 'disable' }}-debug
--${{ matrix.zts && 'enable' || 'disable' }}-zts
skipSlow: ${{ matrix.asan }}
- name: make
run: make -j$(/usr/bin/nproc) >/dev/null
- name: make install
uses: ./.github/actions/install-alpine
- name: Test Tracing JIT
if: matrix.test_jit
uses: ./.github/actions/test-alpine
with:
jitType: tracing
runTestsParameters: >-
${{ matrix.run_tests_parameters }}
-d zend_extension=opcache.so
-d opcache.enable_cli=1
- name: Notify Slack
if: failure()
uses: ./.github/actions/notify-slack
with:
token: ${{ secrets.ACTION_MONITORING_SLACK }}
LINUX_X64: LINUX_X64:
needs: GENERATE_MATRIX needs: GENERATE_MATRIX
if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }}

View File

@ -1410,7 +1410,7 @@ ZEND_API ZEND_COLD void zend_error_zstr_at(
zval retval; zval retval;
zval orig_user_error_handler; zval orig_user_error_handler;
bool in_compilation; bool in_compilation;
zend_class_entry *saved_class_entry; zend_class_entry *saved_class_entry = NULL;
zend_stack loop_var_stack; zend_stack loop_var_stack;
zend_stack delayed_oplines_stack; zend_stack delayed_oplines_stack;
int type = orig_type & E_ALL; int type = orig_type & E_ALL;