diff --git a/config/pkg/ext/ext-amqp.yml b/config/pkg/ext/ext-amqp.yml index 6c73bf20..0dc9e45f 100644 --- a/config/pkg/ext/ext-amqp.yml +++ b/config/pkg/ext/ext-amqp.yml @@ -2,8 +2,9 @@ ext-amqp: type: php-extension artifact: source: - type: pecl - name: amqp + type: pie + repo: php-amqp/php-amqp + extract: php-src/ext/amqp metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-apcu.yml b/config/pkg/ext/ext-apcu.yml index 331b04f7..810a7423 100644 --- a/config/pkg/ext/ext-apcu.yml +++ b/config/pkg/ext/ext-apcu.yml @@ -2,8 +2,9 @@ ext-apcu: type: php-extension artifact: source: - type: pecl - name: APCu + type: pie + repo: apcu/apcu + extract: php-src/ext/apcu metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-ast.yml b/config/pkg/ext/ext-ast.yml index 776b82df..607da915 100644 --- a/config/pkg/ext/ext-ast.yml +++ b/config/pkg/ext/ext-ast.yml @@ -2,8 +2,9 @@ ext-ast: type: php-extension artifact: source: - type: pecl - name: ast + type: pie + repo: nikic/php-ast + extract: php-src/ext/ast metadata: license-files: [LICENSE] license: BSD-3-Clause diff --git a/config/pkg/ext/ext-dio.yml b/config/pkg/ext/ext-dio.yml index b445940c..0ffeaa08 100644 --- a/config/pkg/ext/ext-dio.yml +++ b/config/pkg/ext/ext-dio.yml @@ -2,8 +2,9 @@ ext-dio: type: php-extension artifact: source: - type: pecl - name: dio + type: pie + repo: pecl/dio + extract: php-src/ext/dio metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-ev.yml b/config/pkg/ext/ext-ev.yml index 174e5f84..4d77ff22 100644 --- a/config/pkg/ext/ext-ev.yml +++ b/config/pkg/ext/ext-ev.yml @@ -2,8 +2,9 @@ ext-ev: type: php-extension artifact: source: - type: pecl - name: ev + type: pie + repo: osmanov/pecl-ev + extract: php-src/ext/ev metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-excimer.yml b/config/pkg/ext/ext-excimer.yml index a896fe0b..81219610 100644 --- a/config/pkg/ext/ext-excimer.yml +++ b/config/pkg/ext/ext-excimer.yml @@ -2,8 +2,9 @@ ext-excimer: type: php-extension artifact: source: - type: pecl - name: excimer + type: ghtagtar + repo: wikimedia/mediawiki-php-excimer + extract: php-src/ext/excimer metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-gearman.yml b/config/pkg/ext/ext-gearman.yml index 7699a344..3a21204f 100644 --- a/config/pkg/ext/ext-gearman.yml +++ b/config/pkg/ext/ext-gearman.yml @@ -2,8 +2,9 @@ ext-gearman: type: php-extension artifact: source: - type: pecl - name: gearman + type: ghtar + repo: php/pecl-networking-gearman + extract: php-src/ext/gearman metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-grpc.yml b/config/pkg/ext/ext-grpc.yml index ae63cad2..5d0030a8 100644 --- a/config/pkg/ext/ext-grpc.yml +++ b/config/pkg/ext/ext-grpc.yml @@ -2,8 +2,9 @@ ext-grpc: type: php-extension artifact: source: - type: pecl - name: grpc + type: pie + repo: grpc/grpc-php-ext + extract: php-src/ext/grpc metadata: license-files: [LICENSE] license: Apache-2.0 diff --git a/config/pkg/ext/ext-igbinary.yml b/config/pkg/ext/ext-igbinary.yml index 1a80831b..c71a1f36 100644 --- a/config/pkg/ext/ext-igbinary.yml +++ b/config/pkg/ext/ext-igbinary.yml @@ -2,8 +2,10 @@ ext-igbinary: type: php-extension artifact: source: - type: pecl - name: igbinary + type: ghtagtar + repo: igbinary/igbinary + match: tags/\d+(\.\d+)+$ + extract: php-src/ext/igbinary metadata: license-files: [COPYING] license: BSD-3-Clause diff --git a/config/pkg/ext/ext-imagick.yml b/config/pkg/ext/ext-imagick.yml index 2a1c221c..16a56cf3 100644 --- a/config/pkg/ext/ext-imagick.yml +++ b/config/pkg/ext/ext-imagick.yml @@ -2,8 +2,9 @@ ext-imagick: type: php-extension artifact: source: - type: pecl - name: imagick + type: pie + repo: imagick/imagick + extract: php-src/ext/imagick metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-imap.yml b/config/pkg/ext/ext-imap.yml index 3abcebb8..52188ca7 100644 --- a/config/pkg/ext/ext-imap.yml +++ b/config/pkg/ext/ext-imap.yml @@ -2,8 +2,9 @@ ext-imap: type: php-extension artifact: source: - type: pecl - name: imap + type: ghtagtar + repo: php/pecl-mail-imap + extract: php-src/ext/imap metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-inotify.yml b/config/pkg/ext/ext-inotify.yml index d69847ee..ae684998 100644 --- a/config/pkg/ext/ext-inotify.yml +++ b/config/pkg/ext/ext-inotify.yml @@ -2,8 +2,9 @@ ext-inotify: type: php-extension artifact: source: - type: pecl - name: inotify + type: pie + repo: arnaud-lb/inotify + extract: php-src/ext/inotify metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-memcache.yml b/config/pkg/ext/ext-memcache.yml index 6e1f4385..11929968 100644 --- a/config/pkg/ext/ext-memcache.yml +++ b/config/pkg/ext/ext-memcache.yml @@ -2,8 +2,9 @@ ext-memcache: type: php-extension artifact: source: - type: pecl - name: memcache + type: ghtar + repo: websupport-sk/pecl-memcache + extract: php-src/ext/memcache metadata: license-files: [LICENSE] license: PHP-3.0 diff --git a/config/pkg/ext/ext-memcached.yml b/config/pkg/ext/ext-memcached.yml index b320c669..49d6c93d 100644 --- a/config/pkg/ext/ext-memcached.yml +++ b/config/pkg/ext/ext-memcached.yml @@ -2,8 +2,9 @@ ext-memcached: type: php-extension artifact: source: - type: pecl - name: memcached + type: pie + repo: php-memcached/php-memcached + extract: php-src/ext/memcached metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-msgpack.yml b/config/pkg/ext/ext-msgpack.yml index 8b230c31..e0ec6165 100644 --- a/config/pkg/ext/ext-msgpack.yml +++ b/config/pkg/ext/ext-msgpack.yml @@ -2,8 +2,9 @@ ext-msgpack: type: php-extension artifact: source: - type: pecl - name: msgpack + type: pie + repo: msgpack/msgpack-php + extract: php-src/ext/msgpack metadata: license-files: [LICENSE] license: BSD-3-Clause diff --git a/config/pkg/ext/ext-opentelemetry.yml b/config/pkg/ext/ext-opentelemetry.yml index 5caebef2..022dc011 100644 --- a/config/pkg/ext/ext-opentelemetry.yml +++ b/config/pkg/ext/ext-opentelemetry.yml @@ -2,8 +2,9 @@ ext-opentelemetry: type: php-extension artifact: source: - type: pecl - name: opentelemetry + type: pie + repo: open-telemetry/ext-opentelemetry + extract: php-src/ext/opentelemetry metadata: license-files: [LICENSE] license: Apache-2.0 diff --git a/config/pkg/ext/ext-parallel.yml b/config/pkg/ext/ext-parallel.yml index 94103f57..821d6038 100644 --- a/config/pkg/ext/ext-parallel.yml +++ b/config/pkg/ext/ext-parallel.yml @@ -2,8 +2,9 @@ ext-parallel: type: php-extension artifact: source: - type: pecl - name: parallel + type: pie + repo: pecl/parallel + extract: php-src/ext/parallel metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-pcov.yml b/config/pkg/ext/ext-pcov.yml index 3fac61d0..e4d7ff07 100644 --- a/config/pkg/ext/ext-pcov.yml +++ b/config/pkg/ext/ext-pcov.yml @@ -2,8 +2,9 @@ ext-pcov: type: php-extension artifact: source: - type: pecl - name: pcov + type: pie + repo: pecl/pcov + extract: php-src/ext/pcov metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-redis.yml b/config/pkg/ext/ext-redis.yml index c05b4ee2..42705c67 100644 --- a/config/pkg/ext/ext-redis.yml +++ b/config/pkg/ext/ext-redis.yml @@ -2,8 +2,9 @@ ext-redis: type: php-extension artifact: source: - type: pecl - name: redis + type: pie + repo: phpredis/phpredis + extract: php-src/ext/redis metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-ssh2.yml b/config/pkg/ext/ext-ssh2.yml index 14c9bf32..53b065be 100644 --- a/config/pkg/ext/ext-ssh2.yml +++ b/config/pkg/ext/ext-ssh2.yml @@ -2,8 +2,9 @@ ext-ssh2: type: php-extension artifact: source: - type: pecl - name: ssh2 + type: ghtar + repo: php/pecl-networking-ssh2 + extract: php-src/ext/ssh2 metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-trader.yml b/config/pkg/ext/ext-trader.yml index 03dcadc6..4ef8369f 100644 --- a/config/pkg/ext/ext-trader.yml +++ b/config/pkg/ext/ext-trader.yml @@ -2,8 +2,9 @@ ext-trader: type: php-extension artifact: source: - type: pecl - name: trader + type: ghtagtar + repo: php/pecl-math-trader + extract: php-src/ext/trader metadata: license-files: [LICENSE] license: BSD-2-Clause diff --git a/config/pkg/ext/ext-uuid.yml b/config/pkg/ext/ext-uuid.yml index 3d71aa8b..2c956504 100644 --- a/config/pkg/ext/ext-uuid.yml +++ b/config/pkg/ext/ext-uuid.yml @@ -2,8 +2,9 @@ ext-uuid: type: php-extension artifact: source: - type: pecl - name: uuid + type: pie + repo: pecl/uuid + extract: php-src/ext/uuid metadata: license-files: [LICENSE] license: LGPL-2.1-only diff --git a/config/pkg/ext/ext-uv.yml b/config/pkg/ext/ext-uv.yml index 59d4a8c9..a974ed05 100644 --- a/config/pkg/ext/ext-uv.yml +++ b/config/pkg/ext/ext-uv.yml @@ -2,9 +2,9 @@ ext-uv: type: php-extension artifact: source: - type: pecl - name: uv - prefer-stable: false + type: ghtagtar + repo: amphp/ext-uv + extract: php-src/ext/uv metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-xhprof.yml b/config/pkg/ext/ext-xhprof.yml index a554d837..f88baec8 100644 --- a/config/pkg/ext/ext-xhprof.yml +++ b/config/pkg/ext/ext-xhprof.yml @@ -2,8 +2,8 @@ ext-xhprof: type: php-extension artifact: source: - type: pecl - name: xhprof + type: ghtar + repo: longxinH/xhprof extract: php-src/ext/xhprof-src metadata: license-files: [LICENSE] diff --git a/config/pkg/ext/ext-xlswriter.yml b/config/pkg/ext/ext-xlswriter.yml index 01b99ed9..8e92489c 100644 --- a/config/pkg/ext/ext-xlswriter.yml +++ b/config/pkg/ext/ext-xlswriter.yml @@ -2,8 +2,9 @@ ext-xlswriter: type: php-extension artifact: source: - type: pecl - name: xlswriter + type: pie + repo: viest/xlswriter + extract: php-src/ext/xlswriter metadata: license-files: [LICENSE] license: BSD-2-Clause diff --git a/config/pkg/ext/ext-yac.yml b/config/pkg/ext/ext-yac.yml index e10bea06..9608cad6 100644 --- a/config/pkg/ext/ext-yac.yml +++ b/config/pkg/ext/ext-yac.yml @@ -2,8 +2,9 @@ ext-yac: type: php-extension artifact: source: - type: pecl - name: yac + type: ghtagtar + repo: laruence/yac + extract: php-src/ext/yac metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/config/pkg/ext/ext-zip.yml b/config/pkg/ext/ext-zip.yml index 9a4b0282..f4995300 100644 --- a/config/pkg/ext/ext-zip.yml +++ b/config/pkg/ext/ext-zip.yml @@ -2,9 +2,9 @@ ext-zip: type: php-extension artifact: source: - type: pecl - name: zip - extract: ext-zip + type: pie + repo: pecl/zip + extract: php-src/ext/zip metadata: license-files: [LICENSE] license: PHP-3.01 diff --git a/src/StaticPHP/Artifact/Downloader/Type/PIE.php b/src/StaticPHP/Artifact/Downloader/Type/PIE.php index 14996c5a..b2fba91a 100644 --- a/src/StaticPHP/Artifact/Downloader/Type/PIE.php +++ b/src/StaticPHP/Artifact/Downloader/Type/PIE.php @@ -56,7 +56,23 @@ class PIE implements DownloadTypeInterface, CheckUpdateInterface if (!isset($data['packages'][$config['repo']]) || !is_array($data['packages'][$config['repo']])) { throw new DownloaderException("failed to find {$name} repo info from packagist"); } - $first = $data['packages'][$config['repo']][0] ?? []; + // p2 metadata is minified: each entry only carries fields changed vs the previous one, '__unset' removes a field + $releases = []; + $current = []; + foreach ($data['packages'][$config['repo']] as $release) { + $current = array_merge($current, $release); + $current = array_filter($current, static fn ($v) => $v !== '__unset'); + $releases[] = $current; + } + // packagist lists newest first including RC/beta/alpha — pick the newest stable release + $first = null; + foreach ($releases as $release) { + if (!preg_match('/[._-]?(?:alpha|a|beta|b|rc)[._-]?\d*$/i', $release['version'] ?? '')) { + $first = $release; + break; + } + } + $first ??= $releases[0] ?? []; if (!isset($first['php-ext'])) { throw new DownloaderException("failed to find {$name} php-ext info from packagist, maybe not a php extension package"); }