diff --git a/.github/workflows/backend-ci.yaml b/.github/workflows/backend-ci.yaml index e0c5b31..16ac8b1 100644 --- a/.github/workflows/backend-ci.yaml +++ b/.github/workflows/backend-ci.yaml @@ -16,22 +16,21 @@ jobs: php: - '8.1' steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - - name: Setup PHP Action - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - coverage: none - extensions: 'pdo_sqlite, gd' - tools: cs2pr + - uses: ibexa/gh-workflows/actions/composer-install@main + with: + 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 }} - - uses: ramsey/composer-install@v3 - with: - dependency-versions: "highest" + - uses: ramsey/composer-install@v3 + with: + dependency-versions: highest - - name: Run code style check - run: composer run-script check-cs -- --format=checkstyle | cs2pr + - name: Run code style check + run: composer run-script check-cs -- --format=checkstyle | cs2pr tests: name: Unit tests @@ -46,26 +45,20 @@ jobs: - '8.3' - '8.4' steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - - name: Setup PHP Action - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php }} - coverage: none - extensions: pdo_sqlite, gd - tools: cs2pr + - uses: ibexa/gh-workflows/actions/composer-install@main + with: + 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 }} - - uses: ramsey/composer-install@v3 - with: - dependency-versions: "highest" - composer-options: "${{ matrix.composer-options }}" + - name: Setup problem matchers for PHPUnit + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - - name: Setup problem matchers for PHPUnit - run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + - name: Run PHPStan analysis + run: composer run-script phpstan - - name: Run unit test suite - run: composer test - - - name: Run PHPStan analysis - run: composer run-script phpstan + - name: Run test suite + run: composer run-script --timeout=600 test diff --git a/composer.json b/composer.json index 7249c82..ce28297 100644 --- a/composer.json +++ b/composer.json @@ -66,6 +66,11 @@ }, "config": { "sort-packages": true, - "allow-plugins": false + "allow-plugins": false, + "audit": { + "ignore": { + "PKSA-7h5p-prw9-w5nr": "The affected version of 3rd party component is installed on PHP 7.4. There's no alternative supporting PHP 7.4. Consider upgrading to PHP 8" + } + } } } diff --git a/phpstan-baseline-7.4.neon b/phpstan-baseline-7.4.neon new file mode 100644 index 0000000..d8f2a81 --- /dev/null +++ b/phpstan-baseline-7.4.neon @@ -0,0 +1,7 @@ +parameters: + ignoreErrors: + - + message: '#^PHPDoc tag @return contains generic type Overblog\\GraphQLBundle\\Relay\\Connection\\Output\\Connection\ but class Overblog\\GraphQLBundle\\Relay\\Connection\\Output\\Connection is not generic\.$#' + identifier: generics.notGeneric + count: 1 + path: src/lib/GraphQL/QueryFieldResolver.php diff --git a/phpstan-baseline.neon.php b/phpstan-baseline.neon.php new file mode 100644 index 0000000..03cde8a --- /dev/null +++ b/phpstan-baseline.neon.php @@ -0,0 +1,17 @@ +mapToFieldValueResolver($fieldDefinition)->shouldNotBeCalled(); $this ->mapToFieldValueResolver($fieldDefinition) - ->shouldBe('@=resolver("QueryFieldValue", [field, content])'); + ->shouldBe('@=query("QueryFieldValue", field, content)'); } public function it_maps_the_field_value_when_pagination_is_enabled(FieldDefinitionMapper $innerMapper) @@ -97,7 +97,7 @@ public function it_maps_the_field_value_when_pagination_is_enabled(FieldDefiniti $innerMapper->mapToFieldValueResolver($fieldDefinition)->shouldNotBeCalled(); $this ->mapToFieldValueResolver($fieldDefinition) - ->shouldBe('@=resolver("QueryFieldValueConnection", [args, field, content])'); + ->shouldBe('@=query("QueryFieldValueConnection", args, field, content)'); } /** diff --git a/src/bundle/Resources/config/graphql/types/QueryFieldType.types.yaml b/src/bundle/Resources/config/graphql/types/QueryFieldType.types.yaml index 16a51fa..4420ccb 100644 --- a/src/bundle/Resources/config/graphql/types/QueryFieldType.types.yaml +++ b/src/bundle/Resources/config/graphql/types/QueryFieldType.types.yaml @@ -18,7 +18,7 @@ ContentQueryFieldSettings: parameters: type: "[ContentQueryFieldParameter]" description: "Parameters used to generate the Query from the Query type" - resolve: "@=resolver('QueryFieldDefinitionParameters', [value['Parameters']])" + resolve: "@=query('QueryFieldDefinitionParameters', value['Parameters'])" returnedType: type: ContentType description: "Content type returned by the field" diff --git a/src/bundle/Resources/config/services/graphql.yaml b/src/bundle/Resources/config/services/graphql.yaml index a6f540a..3102e68 100644 --- a/src/bundle/Resources/config/services/graphql.yaml +++ b/src/bundle/Resources/config/services/graphql.yaml @@ -6,9 +6,9 @@ services: Ibexa\FieldTypeQuery\GraphQL\QueryFieldResolver: tags: - - { name: overblog_graphql.resolver, alias: "QueryFieldValue", method: "resolveQueryField" } - - { name: overblog_graphql.resolver, alias: "QueryFieldValueConnection", method: "resolveQueryFieldConnection" } - - { name: overblog_graphql.resolver, alias: "QueryFieldDefinitionParameters", method: "resolveQueryFieldDefinitionParameters" } + - { name: overblog_graphql.query, alias: "QueryFieldValue", method: "resolveQueryField" } + - { name: overblog_graphql.query, alias: "QueryFieldValueConnection", method: "resolveQueryFieldConnection" } + - { name: overblog_graphql.query, alias: "QueryFieldDefinitionParameters", method: "resolveQueryFieldDefinitionParameters" } Ibexa\FieldTypeQuery\GraphQL\ContentQueryFieldDefinitionMapper: diff --git a/src/lib/GraphQL/ContentQueryFieldDefinitionMapper.php b/src/lib/GraphQL/ContentQueryFieldDefinitionMapper.php index 72e734b..287e9c4 100644 --- a/src/lib/GraphQL/ContentQueryFieldDefinitionMapper.php +++ b/src/lib/GraphQL/ContentQueryFieldDefinitionMapper.php @@ -60,9 +60,9 @@ public function mapToFieldValueResolver(FieldDefinition $fieldDefinition): ?stri $fieldSettings = $fieldDefinition->getFieldSettings(); if ($fieldSettings['EnablePagination']) { - return '@=resolver("QueryFieldValueConnection", [args, field, content])'; + return '@=query("QueryFieldValueConnection", args, field, content)'; } else { - return '@=resolver("QueryFieldValue", [field, content])'; + return '@=query("QueryFieldValue", field, content)'; } } diff --git a/src/lib/GraphQL/QueryFieldResolver.php b/src/lib/GraphQL/QueryFieldResolver.php index 1f4d915..3bbbb6f 100644 --- a/src/lib/GraphQL/QueryFieldResolver.php +++ b/src/lib/GraphQL/QueryFieldResolver.php @@ -32,7 +32,7 @@ public function resolveQueryField(Field $field, Content $content): iterable } /** - * @return \GraphQL\Executor\Promise\Promise|\Overblog\GraphQLBundle\Relay\Connection\Output\Connection|null + * @return \GraphQL\Executor\Promise\Promise|\Overblog\GraphQLBundle\Relay\Connection\Output\Connection<\Ibexa\Contracts\Core\Repository\Values\Content\Content>|null */ public function resolveQueryFieldConnection(Argument $args, ?Field $field, Content $content) {