4.2系をphp8.1 ~ 8.3へ対応#6736
Conversation
PHP 7.4 は 2022/11 に公式サポートが終了しており、ec-cube.co でも サポート外となっているため、4.2 メンテナンスブランチでも 7.4 サポートを廃止する。 - composer.json の require.php を ^8.1 に、config.platform.php を 8.1.0 に更新 - composer.lock を再生成 - laminas/laminas-code が 4.7.1 から 4.16.0 に更新され、PHP 8.3 環境でのプラグインインストールテストが composer の platform 制約に引っかからなくなる - doctrine/migrations は ~3.5.2 のまま維持しており、Symfony 5.4 の 土台には影響しない
PHP 8.2 で非推奨となった `${var}` 形式の文字列補間を `{$var}` に
置き換える。あわせて PHP 8.1 のイテレータ関連シグネチャ整合と
PHPStan 指摘の解消を行う。
- `${var}` → `{$var}` (Command/Controller/Service/Util/Doctrine Query)
- CsvImportService の iterator メソッドシグネチャを
PHP 8.1 互換に揃える
- StringUtil::isBlank の array チェックを empty() から
count() に置き換え (PHPStan 指摘)
- phpstan.neon.dist から、不要になった twig_include 用の
ignoreErrors エントリを削除
Twig 3.24 で返り値型や Sandbox の挙動が変化した点に追随する。 - `Eccube\Twig\Template` の戻り値型を Twig 3.24 の抽象クラスと整合 - `Eccube\Twig\Environment` を追加し、テンプレートキャッシュ周辺を PHP 8+ のクラス生成と整合させる - `Eccube\Twig\Sandbox\SecurityPolicyDecorator` を Twig 3 系の SecurityPolicyInterface に合わせて調整 - `TwigExtensionPass` でカスタム Environment を DI に差し替え - `IgnoreTwigSandboxErrorExtensionTest` を Twig 3 Sandbox の 新しい例外挙動に合わせて修正 - twig.yaml / twig_extensions.yaml / admin/index.twig の 付随する設定・テンプレート調整
同一プロセス内でエンティティクラスが複数回ロードされる状況 (テスト中の Kernel 再起動、サブプロセス経由の schema 更新等) で プロキシの二重定義 Fatal error が発生するのを防ぐ。 - `Kernel::loadEntityProxies()` で、既にロード済みのクラスは require をスキップするガードを追加。プロキシファイルパスから FQCN を逆引きして `class_exists($fqcn, false)` で判定する - `ReloadSafeAnnotationDriver` に同等の二重定義ガードを追加し、 `AnnotationDriver` 側は upstream のまま据え置く - `UpdateSchemaDoctrineCommandTest` で、console サブプロセス 実行後に Kernel を reboot してテスト間の状態を分離 - `EccubeExtension::prepend()` で DoctrineBundle の `default_connection` が未設定のケースをフォールバック解決 (新しい DoctrineBundle バージョンで補完タイミングが変わった ことへの対応)
PHP 8.3 環境を含めた CI の安定化と、Docker ビルド周辺の調整を行う。 - PHP 7.4 をワークフローと Dockerfile から除去 - `.github/workflows/main.yml` を追加し、`workflow_call` で 各種ワークフローをオーケストレーションする構成に変更 - テストアーティファクト名に php / db / method を含めて 並列ジョブ間のアップロード衝突を回避 - `dockerbuild.yml` を release published 時のみ実行に限定 - `plugin-test.yml` で apt-fast ではなく apt-get を使い postgresql-client を安定的にインストール - `chromedriver` の起動ポートを `--port=9515` に固定 - Dockerfile の Node.js インストール手順を新しい NodeSource セットアップスクリプトに更新
新しい PHP / Chrome / 依存パッケージ環境で Codeception の受け入れ テストが安定して走るように調整する。 - `chromeOptions` を `goog:chromeOptions` に変更し、ダウンロード 設定を有効化 (WebDriver の W3C 対応) - 受注 CSV / 会員 CSV / ファイルマネージャー等のダウンロード待機を CI 向けに延長 - カテゴリ登録テストでルートカテゴリの削除復元処理を追加 - 管理画面 Throttling テストから分単位の期待値を除去し、 login_throttling の時間ゆらぎに耐えるよう修正 - Bundle プラグイン用 composer 依存を修正し、 HttplugFactory 解決エラーを回避 - dockerbuild 向けアクセプタンススイートの安定化 (4.3 最小ポート) - `codeception-gherkin-i18n-path.patch` を追加。新しい `behat/gherkin` の PSR-4 レイアウトで Codeception 4 が `i18n.php` を解決できなくなる問題を composer-patches で補正 - `patches/README.md` にパッチの目的と適用方針を記述
新しい PHP / Symfony / Faker 依存下でユニットテストが壊れていた 箇所を個別に修正する。 - `CsrfTokenManagerMock` を `CsrfTokenManagerInterface` の 新シグネチャ (引数・戻り値型宣言) に合わせて更新 - `SameSiteNoneCompatSessionHandlerTest` で Set-Cookie ヘッダの expires 表記ゆれ (`01-Jan-1970` / `01 Jan 1970`) を吸収する 正規化ヘルパを導入 - `tests/Fixtures/session/common.php` で PHP バージョン差異を 吸収する調整 - `Fixture\Generator` から PHP 8.2 で deprecation 警告となる 動的プロパティ代入 (`$Product->extendedParameter`) を削除 - `RateLimiterListenerTest` に `@group rate-limiter-listener` を 付与し、並列実行時のアーティファクト分離を可能にする - `tests/Eccube/Tests/Web/Admin/Product/categories.csv` を追加 (カテゴリ登録テストの新フィクスチャ)
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## 4.2-php83 #6736 +/- ##
============================================
Coverage ? 82.73%
============================================
Files ? 477
Lines ? 26007
Branches ? 0
============================================
Hits ? 21518
Misses ? 4489
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
概要(Overview・Refs Issue)
EC-CUBE 4.2 ブランチにおいて、PHP 8.3 対応および PHP 7.4 サポート廃止を行う。
PHP 7.4 は 2022年11月に公式サポートが終了しており、ec-cube.co でもサポート外となっているため、4.2 メンテナンスブランチでも対応を廃止する。
方針(Policy)
^8.1に引き上げ、PHP 8.3 までの動作を保証する実装に関する補足(Appendix)
composer.jsonのrequire.phpを^8.1、config.platform.phpを8.1.0に更新。laminas/laminas-codeが 4.7.1 → 4.16.0 に更新され、PHP 8.3 環境でのプラグインインストールテストが composer の platform 制約に引っかからなくなる${var}形式の文字列補間を{$var}に一括置換(Command / Controller / Service / Util / Doctrine Query)Eccube\Twig\Environmentを追加し、Twig 3.24 の抽象クラスとの戻り値型整合・テンプレートキャッシュ周辺を修正。TwigExtensionPassでカスタム Environment を DI に差し替えKernel::loadEntityProxies()およびReloadSafeAnnotationDriverに、同一プロセス内でエンティティクラスが複数回ロードされた際のプロキシ二重定義 Fatal error を防ぐガードを追加EccubeExtension::prepend()で DoctrineBundle のdefault_connectionが未設定のケースへのフォールバック解決を追加(新しい DoctrineBundle バージョンで補完タイミングが変わったことへの対応)goog:chromeOptionsに変更behat/gherkinの PSR-4 レイアウト変更により Codeception 4 がi18n.phpを解決できなくなる問題をcodeception-gherkin-i18n-path.patchで補正テスト(Test)
ローカル / CI での動作確認
テストコードの変更内容
categories.csv)を追加UpdateSchemaDoctrineCommandTestにて Kernel reboot によるテスト間の状態分離を追加未確認・レビュワーに確認をお願いしたい範囲
相談(Discussion)
IgnoreTwigSandboxErrorExtensionTestの修正内容がプラグインの互換性に影響しないか確認をお願いしたいマイナーバージョン互換性保持のための制限事項チェックリスト
レビュワー確認項目