From 0853323aa2754213bde606508f583b116a3f7038 Mon Sep 17 00:00:00 2001 From: Dawid Parafinski Date: Wed, 9 Sep 2026 11:13:12 +0200 Subject: [PATCH 1/4] IBX-12046: Adapted templated router to DefaultRouter decorator Ibexa\Bundle\Core\Routing\DefaultRouter is now a decorator in ibexa/core and no longer extends the FrameworkBundle Router, so the templated router service wraps an inner hautelook.router.template child instead of inheriting its definition. --- src/bundle/Resources/config/services.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/config/services.yml b/src/bundle/Resources/config/services.yml index 6176ebed..c726e512 100644 --- a/src/bundle/Resources/config/services.yml +++ b/src/bundle/Resources/config/services.yml @@ -401,12 +401,20 @@ services: tags: - { name: ibexa.rest.input.handler, format: xml } - Ibexa\Bundle\Core\Routing\DefaultRouter: - class: Ibexa\Bundle\Core\Routing\DefaultRouter + # Templated (RFC 6570) URI router. It is wrapped in the SiteAccess-aware router decorator, like router.default. + ibexa.rest.templated_router.inner: parent: hautelook.router.template calls: - [ setOption, [ strict_requirements, ~ ] ] + Ibexa\Bundle\Core\Routing\DefaultRouter: + class: Ibexa\Bundle\Core\Routing\DefaultRouter + arguments: + $innerRouter: '@ibexa.rest.templated_router.inner' + $siteAccessRouter: '@Ibexa\Core\MVC\Symfony\SiteAccess\Router' + $nonSiteAccessAwareRoutes: '%ibexa.default_router.non_site_access_aware_routes%' + $logger: '@?logger' + Ibexa\Bundle\Rest\Routing\ExpressionLanguage\ContentTypeHeaderMatcherExpressionFunction: arguments: $mediaTypeParser: '@Ibexa\Contracts\Rest\Input\MediaTypeParserInterface' From 7b542aee201e8dd28f8e0d7cdee3a28f2e341a0b Mon Sep 17 00:00:00 2001 From: Dawid Parafinski Date: Wed, 9 Sep 2026 12:32:33 +0200 Subject: [PATCH 2/4] [TMP] Pin Core dependency for cross-repository CI --- dependencies.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 dependencies.json diff --git a/dependencies.json b/dependencies.json new file mode 100644 index 00000000..75018be2 --- /dev/null +++ b/dependencies.json @@ -0,0 +1,11 @@ +{ + "recipesEndpoint": "", + "packages": [ + { + "requirement": "dev-ibx-12046-symfony-deprecations as 6.0.x-dev", + "repositoryUrl": "https://github.com/ibexa/core", + "package": "ibexa/core", + "shouldBeAddedAsVCS": false + } + ] +} From be901af6405c0fad1664f7be8c3dffe7abfdacbb Mon Sep 17 00:00:00 2001 From: Dawid Parafinski Date: Thu, 10 Sep 2026 12:02:46 +0200 Subject: [PATCH 3/4] IBX-12046: Renamed the templated router service to ibexa.rest.templated_router The REST-owned RFC 6570 router instance was registered under core's class name, which misrepresents what it is and captures autowiring of Ibexa\Bundle\Core\Routing\DefaultRouter for every bundle. The old id stays as a deprecated alias for one release; both in-repo consumers now inject ibexa.rest.templated_router explicitly. --- src/bundle/Resources/config/services.yml | 13 +++++++++++-- .../Resources/config/value_object_visitors.yml | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/config/services.yml b/src/bundle/Resources/config/services.yml index c726e512..7108d2f5 100644 --- a/src/bundle/Resources/config/services.yml +++ b/src/bundle/Resources/config/services.yml @@ -63,7 +63,7 @@ services: - [setRequestStack, ["@request_stack"]] Ibexa\Rest\Server\Service\ExpressionRouterRootResourceBuilder: - arguments: ["@router", '@Ibexa\Bundle\Core\Routing\DefaultRouter', '@ibexa.config.resolver'] + arguments: ["@router", '@ibexa.rest.templated_router', '@ibexa.config.resolver'] Ibexa\Rest\Server\Controller: autowire: true @@ -407,7 +407,7 @@ services: calls: - [ setOption, [ strict_requirements, ~ ] ] - Ibexa\Bundle\Core\Routing\DefaultRouter: + ibexa.rest.templated_router: class: Ibexa\Bundle\Core\Routing\DefaultRouter arguments: $innerRouter: '@ibexa.rest.templated_router.inner' @@ -415,6 +415,15 @@ services: $nonSiteAccessAwareRoutes: '%ibexa.default_router.non_site_access_aware_routes%' $logger: '@?logger' + # BC alias: the templated router used to be registered under core's class name, which also captured + # autowiring of Ibexa\Bundle\Core\Routing\DefaultRouter. Inject ibexa.rest.templated_router explicitly instead. + Ibexa\Bundle\Core\Routing\DefaultRouter: + alias: ibexa.rest.templated_router + deprecated: + package: ibexa/rest + version: '6.0' + message: 'The "%alias_id%" service alias is deprecated, use "ibexa.rest.templated_router" instead.' + Ibexa\Bundle\Rest\Routing\ExpressionLanguage\ContentTypeHeaderMatcherExpressionFunction: arguments: $mediaTypeParser: '@Ibexa\Contracts\Rest\Input\MediaTypeParserInterface' diff --git a/src/bundle/Resources/config/value_object_visitors.yml b/src/bundle/Resources/config/value_object_visitors.yml index 802bc84d..d36d3982 100644 --- a/src/bundle/Resources/config/value_object_visitors.yml +++ b/src/bundle/Resources/config/value_object_visitors.yml @@ -3,7 +3,7 @@ services: calls: - [ setUriParser, [ '@Ibexa\Contracts\Rest\UriParser\UriParserInterface' ] ] - [ setRouter, [ "@router" ] ] - - [ setTemplateRouter, [ '@Ibexa\Bundle\Core\Routing\DefaultRouter'] ] + - [ setTemplateRouter, [ '@ibexa.rest.templated_router' ] ] # Errors ibexa.rest.output.value_object_visitor.InvalidArgumentException: From 7caba4a110edafd6bd0f118a1e035b893cd79006 Mon Sep 17 00:00:00 2001 From: Dawid Parafinski Date: Thu, 10 Sep 2026 12:40:28 +0200 Subject: [PATCH 4/4] [TMP] Used the shared composer-install action for the unit and integration job Temporary, revert together with the dependencies.json pin before merging: the ibexa/gh-workflows composer-install action applies dependencies.json to the root composer.json before installing, which is the only way the core#822 branch reaches the unit and integration suites while core#822 is unmerged. CI workflow changes are owned by the workflow template, not by this PR. --- .github/workflows/backend-ci.yaml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/.github/workflows/backend-ci.yaml b/.github/workflows/backend-ci.yaml index 7e874ab1..e115e14e 100644 --- a/.github/workflows/backend-ci.yaml +++ b/.github/workflows/backend-ci.yaml @@ -44,17 +44,14 @@ jobs: steps: - uses: actions/checkout@v7 - - name: Setup PHP Action - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - coverage: none - extensions: pdo_sqlite, gd - tools: cs2pr - - - uses: ramsey/composer-install@v3 + - name: Install Composer dependencies + uses: ibexa/gh-workflows/actions/composer-install@main with: - dependency-versions: highest + gh-client-id: ${{ secrets.AUTOMATION_CLIENT_ID }} + gh-client-secret: ${{ secrets.AUTOMATION_CLIENT_SECRET }} + satis-network-key: ${{ secrets.SATIS_NETWORK_KEY }} + satis-network-token: ${{ secrets.SATIS_NETWORK_TOKEN }} + composer-options: "--prefer-dist --no-progress --no-suggest" - name: Run PHPStan analysis run: composer run-script phpstan