Skip to content

Commit

Permalink
Add extension configure tests
Browse files Browse the repository at this point in the history
  • Loading branch information
crazywhalecc committed Dec 5, 2024
1 parent fe72b80 commit 2a69369
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 0 deletions.
137 changes: 137 additions & 0 deletions .github/workflows/ext-configure-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
name: "Extension configure tests"

on:
workflow_dispatch:
pull_request:
branches: [ "main" ]
paths:
- '.github/workflows/ext-matrix-tests.yml'

jobs:
test:
name: "${{ matrix.extension }} (PHP ${{ matrix.php-version }} on ${{ matrix.operating-system }})"
runs-on: ${{ matrix.operating-system }}
strategy:
fail-fast: false
matrix:
extension:
- apcu
- bcmath
- bz2
- calendar
- ctype
- curl
- dba
- dom
- exif
- fileinfo
- filter
- ftp
- gd
- gmp
- gettext
- iconv
- igbinary
- imagick
- intl
- ldap
- mbregex
- mbstring
- mysqli
- mysqlnd
- opcache
- openssl
- parallel
- pcntl
- pdo
- pdo_mysql
- pdo_pgsql
- pdo_sqlite
- pgsql
- phar
- posix
- protobuf
- readline
- redis
- session
- shmop
- simplexml
- soap
- sockets
- sodium
- sqlite3
- ssh2
- sysvmsg
- sysvsem
- sysvshm
- tidy
- tokenizer
- xlswriter
- xml
- xmlreader
- xmlwriter
- zip
- zlib
- yaml
- zstd
php-version:
- "8.4"
operating-system:
- "ubuntu-latest"

steps:
- name: "Checkout"
uses: "actions/checkout@v4"

- name: OS type
id: os-type
run: |
OS=""
if [ "${{ matrix.operating-system }}" = "ubuntu-latest" ]; then
OS="linux-x86_64"
elif [ "${{ matrix.operating-system }}" = "macos-13" ]; then
OS="macos-x86_64"
elif [ "${{ matrix.operating-system }}" = "debian-arm64-self-hosted" ]; then
OS="linux-aarch64"
elif [ "${{ matrix.operating-system }}" = "macos-14" ]; then
OS="macos-aarch64"
fi
echo "OS=$OS" >> $GITHUB_ENV
- name: "Setup PHP"
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
tools: pecl, composer
extensions: curl, openssl, mbstring
ini-values: memory_limit=-1
env:
phpts: nts

- name: "Install Dependencies"
run: composer update -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

- id: cache-download
uses: actions/cache@v4
with:
path: downloads
key: php-${{ matrix.php-version }}-dependencies-for-tests

# If there's no dependencies cache, fetch sources
- name: "Download sources"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./bin/spc download --with-php=${{ matrix.php-version }} --for-extensions=${{ matrix.extension }} --debug --ignore-cache-sources=php-src

- name: "Build library: ${{ matrix.library }}"
run: |
SPC_USE_SUDO=yes ./bin/spc doctor --auto-fix
if [ "${{ env.OS }}" = "linux-x86_64" ]; then
./bin/spc install-pkg upx
UPX=--with-upx-pack
elif [ "${{ env.OS }}" = "linux-aarch64" ]; then
./bin/spc install-pkg upx
UPX=--with-upx-pack
fi
./bin/spc build --build-cli --build-micro ${{ matrix.extension }} -P tests/configure.php
9 changes: 9 additions & 0 deletions src/SPC/builder/BuilderBase.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use SPC\exception\ExceptionHandler;
use SPC\exception\FileSystemException;
use SPC\exception\InterruptException;
use SPC\exception\RuntimeException;
use SPC\exception\WrongUsageException;
use SPC\store\Config;
Expand Down Expand Up @@ -407,13 +408,21 @@ public function emitPatchPoint(string $point_name): void
}
logger()->debug('Running additional patch script: ' . $patch);
require $patch;
} catch (InterruptException $e) {
if ($e->getCode() === 0) {
logger()->notice('Patch script ' . $patch . ' interrupted' . ($e->getMessage() ? (': ' . $e->getMessage()) : '.'));
} else {
logger()->error('Patch script ' . $patch . ' interrupted with error code [' . $e->getCode() . ']' . ($e->getMessage() ? (': ' . $e->getMessage()) : '.'));
}
exit($e->getCode());
} catch (\Throwable $e) {
logger()->critical('Patch script ' . $patch . ' failed to run.');
if ($this->getOption('debug')) {
ExceptionHandler::getInstance()->handle($e);
} else {
logger()->critical('Please check with --debug option to see more details.');
}
exit(1);
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions src/SPC/exception/InterruptException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

declare(strict_types=1);

namespace SPC\exception;

class InterruptException extends \Exception {}
6 changes: 6 additions & 0 deletions src/globals/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Psr\Log\LoggerInterface;
use SPC\builder\BuilderBase;
use SPC\builder\BuilderProvider;
use SPC\exception\InterruptException;
use SPC\exception\RuntimeException;
use SPC\exception\WrongUsageException;
use SPC\util\UnixShell;
Expand Down Expand Up @@ -125,6 +126,11 @@ function patch_point(): string
return BuilderProvider::getBuilder()->getPatchPoint();
}

function patch_point_interrupt(int $retcode, string $msg = ''): InterruptException
{
return new InterruptException(message: $msg, code: $retcode);
}

// ------- function f_* part -------
// f_ means standard function wrapper

Expand Down
13 changes: 13 additions & 0 deletions tests/configure.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

if (patch_point() === 'before-php-make') {
// get config.status file
$config_status = file_get_contents(SOURCE_PATH . '/php-src/config.status');
if ($config_status === false) {
throw patch_point_interrupt(1, 'Failed to read config.status');
}
if (str_contains($config_status, 'S["PHP_VERSION"]=""')) {
throw patch_point_interrupt(1, 'Cannot find valid PHP_VERSION in config.status');
}
throw patch_point_interrupt(0);
}

0 comments on commit 2a69369

Please sign in to comment.