Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 17 additions & 29 deletions .github/workflows/pre-release-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,39 +39,30 @@ jobs:
MEILI_NO_ANALYTICS: true
strategy:
matrix:
php-version: ['7.4', '8.1', '8.2', '8.3', '8.4']
sf-version: ['5.4', '6.4', '7.0', '7.1', '7.2', '7.3']
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
sf-version: ['6.4', '7.0', '7.1', '7.2', '7.3' ]
dependencies: [ 'default' ]
exclude:
- php-version: '7.4'
sf-version: '6.4'
- php-version: '7.4'
sf-version: '7.0'
- php-version: '7.4'
sf-version: '7.1'
- php-version: '7.4'
sf-version: '7.3'
- php-version: '8.1'
sf-version: '5.4'
- php-version: '8.1'
sf-version: '7.0'
- php-version: '8.1'
sf-version: '7.1'
- php-version: '8.1'
sf-version: '7.3'
- php-version: '8.2'
sf-version: '5.4'
- php-version: '8.3'
sf-version: '5.4'
- php-version: '8.4'
sf-version: '5.4'
- php-version: '7.4'
sf-version: '7.2'
- php-version: '8.0'
sf-version: '7.2'
- php-version: '8.1'
sf-version: '7.2'
sf-version: '7.3'
include:
- php-version: '8.4'
sf-version: '6.4'
dependencies: 'lowest'
- php-version: '8.4'
sf-version: '6.4'
dependencies: 'highest'
- php-version: '8.4'
sf-version: '7.3'
dependencies: 'highest'

name: integration-tests-against-rc (PHP ${{ matrix.php-version }}) (Symfony ${{ matrix.sf-version }}.*)
name: integration-tests-against-rc (PHP ${{ matrix.php-version }}) (Symfony ${{ matrix.sf-version }}.*)${{ matrix.dependencies != 'default' && format(' ({0})', matrix.dependencies) || '' }}
steps:
- name: Checkout code
uses: actions/checkout@v6
Expand All @@ -85,16 +76,13 @@ jobs:
- name: Validate composer.json and composer.lock
run: composer validate

- name: Remove doctrine/annotations
if: matrix.php-version != '7.4'
run: sed -i '/doctrine\/annotations/d' composer.json

- name: Install dependencies
uses: ramsey/composer-install@v3
env:
SYMFONY_REQUIRE: ${{ matrix.sf-version }}.*
with:
dependency-versions: 'highest'
composer-options: --no-interaction --no-progress --prefer-dist --no-security-blocking
dependency-versions: "${{ matrix.dependencies }}"

- name: Run test suite
run: composer test:unit -- --coverage-clover coverage.xml
34 changes: 3 additions & 31 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,10 @@ jobs:
MEILI_NO_ANALYTICS: true
strategy:
matrix:
php-version: [ '7.4', '8.1', '8.2', '8.3', '8.4' ]
sf-version: [ '5.4', '6.4', '7.0', '7.1', '7.2', '7.3' ]
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
sf-version: ['6.4', '7.0', '7.1', '7.2', '7.3' ]
dependencies: [ 'default' ]
exclude:
- php-version: '7.4'
sf-version: '6.4'
- php-version: '7.4'
sf-version: '7.0'
- php-version: '7.4'
sf-version: '7.1'
- php-version: '7.4'
sf-version: '7.2'
- php-version: '7.4'
sf-version: '7.3'
- php-version: '8.1'
sf-version: '5.4'
- php-version: '8.1'
sf-version: '7.0'
- php-version: '8.1'
Expand All @@ -51,19 +39,7 @@ jobs:
sf-version: '7.2'
- php-version: '8.1'
sf-version: '7.3'
- php-version: '8.2'
sf-version: '5.4'
- php-version: '8.3'
sf-version: '5.4'
- php-version: '8.4'
sf-version: '5.4'
include:
- php-version: '7.4'
sf-version: '5.4'
dependencies: 'lowest'
- php-version: '7.4'
sf-version: '5.4'
dependencies: 'highest'
- php-version: '8.4'
sf-version: '6.4'
dependencies: 'lowest'
Expand All @@ -88,10 +64,6 @@ jobs:
- name: Validate composer.json
run: composer validate

- name: Remove doctrine/annotations
if: matrix.php-version != '7.4'
run: sed -i '/doctrine\/annotations/d' composer.json

- name: Install dependencies
uses: ramsey/composer-install@v3
env:
Expand Down Expand Up @@ -126,7 +98,7 @@ jobs:
- name: Install dependencies
uses: ramsey/composer-install@v3
env:
SYMFONY_REQUIRE: 7.2.*
SYMFONY_REQUIRE: 7.4.*
with:
composer-options: '--no-progress --quiet'
dependency-versions: 'highest'
Expand Down
1 change: 1 addition & 0 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
->setUnsupportedPhpVersionAllowed(true)
->setRiskyAllowed(true)
->setFinder($finder)
->setUnsupportedPhpVersionAllowed(true)
->setRules([
'@Symfony' => true,
'@PHP8x0Migration:risky' => true,
Expand Down
38 changes: 18 additions & 20 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,40 +18,38 @@
}
],
"require": {
"php": "^7.4|^8.0",
"php": "^8.1",
"ext-json": "*",
"doctrine/doctrine-bundle": "^2.10 || ^3.0",
"meilisearch/meilisearch-php": "^1.16",
"symfony/config": "^5.4 || ^6.0 || ^7.0",
"symfony/dependency-injection": "^5.4.17 || ^6.0 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
"symfony/http-kernel": "^5.4 || ^6.0 || ^7.0",
"symfony/polyfill-php80": "^1.27",
"symfony/property-access": "^5.4 || ^6.0 || ^7.0",
"symfony/serializer": "^5.4 || ^6.0 || ^7.0"
"symfony/config": "^6.4 || ^7.0",
"symfony/dependency-injection": "^6.4 || ^7.0",
"symfony/event-dispatcher": "^6.4 || ^7.0",
"symfony/http-kernel": "^6.4 || ^7.0",
"symfony/property-access": "^6.4 || ^7.0",
"symfony/serializer": "^6.4 || ^7.0"
},
"require-dev": {
"doctrine/annotations": "^2.0.0",
"doctrine/doctrine-bundle": "^2.10 || ^3.0",
"doctrine/orm": "^2.12 || ^3.0",
"matthiasnoback/symfony-config-test": "^4.3 || ^5.2",
"matthiasnoback/symfony-dependency-injection-test": "^4.3 || ^5.1",
"nikic/php-parser": "^5.6.2",
"nyholm/psr7": "^1.8.2",
"php-cs-fixer/shim": "^3.88.2",
"php-cs-fixer/shim": "^3.90.0",
"phpmd/phpmd": "^2.15",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan": "^2.1.31",
"phpstan/phpstan-doctrine": "^2.0.10",
"phpstan/phpstan-phpunit": "^2.0.7",
"phpstan/phpstan": "^2.1.32",
"phpstan/phpstan-doctrine": "^2.0.11",
"phpstan/phpstan-phpunit": "^2.0.8",
"phpstan/phpstan-symfony": "^2.0.8",
"phpunit/php-code-coverage": "^9.2.32",
"symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
"symfony/framework-bundle": "^5.4.17 || ^6.0 || ^7.0",
"symfony/http-client": "^5.4.47 || ^6.4.15 || ^7.1.8",
"symfony/doctrine-bridge": "^6.4 || ^7.0",
"symfony/filesystem": "^6.4 || ^7.0",
"symfony/framework-bundle": "^6.4 || ^7.0",
"symfony/http-client": "^6.4.15 || ^7.1.8",
"symfony/phpunit-bridge": "^7.3",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0",
"symfony/var-exporter": "^5.4 || ^6.0 || ^7.0"
"symfony/yaml": "^6.4 || ^7.0",
"symfony/var-exporter": "^6.4 || ^7.0"
},
"autoload": {
"psr-4": {
Expand Down
40 changes: 31 additions & 9 deletions config/services.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@
use Meilisearch\Bundle\Command\MeilisearchDeleteCommand;
use Meilisearch\Bundle\Command\MeilisearchImportCommand;
use Meilisearch\Bundle\Command\MeilisearchUpdateSettingsCommand;
use Meilisearch\Bundle\DataProvider\DataProviderRegistry;
use Meilisearch\Bundle\DataProvider\DataProviderRegistryInterface;
use Meilisearch\Bundle\Engine;
use Meilisearch\Bundle\EventListener\DoctrineEventSubscriber;
use Meilisearch\Bundle\SearchManagerInterface;
use Meilisearch\Bundle\SearchService;
use Meilisearch\Bundle\Services\MeilisearchManager;
use Meilisearch\Bundle\Services\MeilisearchService;
use Meilisearch\Bundle\Services\SettingsUpdater;
use Meilisearch\Bundle\Services\UnixTimestampNormalizer;
Expand All @@ -30,15 +34,18 @@
service('meilisearch.engine'),
abstract_arg('configuration'),
service('property_accessor'),
service('meilisearch.manager'),
]);

$services->alias('search.service', 'meilisearch.service')
->public()
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.service" instead.');

$services->alias(SearchService::class, 'meilisearch.service');

$services->set('meilisearch.search_indexer_subscriber', DoctrineEventSubscriber::class)
->public()
->args([service('meilisearch.service')]);
->args([service('meilisearch.manager')]);

$services->alias('search.search_indexer_subscriber', 'meilisearch.search_indexer_subscriber')
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.search_indexer_subscriber" instead.');
Expand All @@ -62,52 +69,67 @@
$services->alias(Client::class, 'meilisearch.client')
->public();

$services->alias(SearchService::class, 'meilisearch.service');
$services->set('meilisearch.manager', MeilisearchManager::class)
->args([
abstract_arg('normalizer'),
service('meilisearch.engine'),
service('property_accessor'),
service('meilisearch.data_provider.registry'),
abstract_arg('configuration'),
]);
$services->alias(SearchManagerInterface::class, 'meilisearch.manager');

$services->set('meilisearch.settings_updater', SettingsUpdater::class)
->args([
service('meilisearch.service'),
service('meilisearch.manager'),
service('meilisearch.client'),
service('event_dispatcher'),
]);

$services->alias(SettingsUpdater::class, 'meilisearch.settings_updater');

$services->set(MeilisearchClearCommand::class)
->args([service('meilisearch.service')])
->args([service('meilisearch.manager')])
->tag('console.command', ['command' => 'meilisearch:clear|meili:clear', 'description' => 'Clear the index documents']);

$services->set(MeilisearchCreateCommand::class)
->args([
service('meilisearch.service'),
service('meilisearch.manager'),
service('meilisearch.client'),
service('meilisearch.settings_updater'),
service('event_dispatcher'),
])
->tag('console.command', ['command' => 'meilisearch:create|meili:create', 'description' => 'Create indexes']);

$services->set(MeilisearchDeleteCommand::class)
->args([service('meilisearch.service')])
->args([service('meilisearch.manager')])
->tag('console.command', ['command' => 'meilisearch:delete|meili:delete', 'description' => 'Delete the indexes']);

$services->set(MeilisearchImportCommand::class)
->args([
service('meilisearch.service'),
service('doctrine'),
service('meilisearch.manager'),
service('meilisearch.client'),
service('meilisearch.settings_updater'),
service('event_dispatcher'),
service('meilisearch.data_provider.registry'),
])
->tag('console.command', ['command' => 'meilisearch:import|meili:import', 'description' => 'Import given entity into search engine']);

$services->set(MeilisearchUpdateSettingsCommand::class)
->args([
service('meilisearch.service'),
service('meilisearch.manager'),
service('meilisearch.settings_updater'),
service('event_dispatcher'),
])
->tag('console.command', ['command' => 'meilisearch:update-settings', 'description' => 'Push settings to meilisearch']);

$services->set(UnixTimestampNormalizer::class)
->tag('serializer.normalizer');

$services->set('meilisearch.data_provider.registry', DataProviderRegistry::class)
->args([
abstract_arg('provider locator'),
abstract_arg('provider map'),
])
->alias(DataProviderRegistryInterface::class, 'meilisearch.data_provider.registry');
};
23 changes: 23 additions & 0 deletions phpstan-baseline.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php declare(strict_types = 1);

$ignoreErrors = [];
$ignoreErrors[] = [
'message' => '#^Call to static method getClass\\(\\) on an unknown class Doctrine\\\\Common\\\\Util\\\\ClassUtils\\.$#',
'identifier' => 'class.notFound',
'count' => 1,
'path' => __DIR__ . '/src/Services/MeilisearchManager.php',
];
$ignoreErrors[] = [
'message' => '#^Call to static method getClass\\(\\) on an unknown class Doctrine\\\\Common\\\\Util\\\\ClassUtils\\.$#',
'identifier' => 'class.notFound',
'count' => 1,
'path' => __DIR__ . '/src/Services/MeilisearchService.php',
];
$ignoreErrors[] = [
'message' => '#^Offset \'hits\' on array\\{hits\\: array\\<int, mixed\\>, query\\: string, processingTimeMs\\: int, limit\\: int, offset\\: int, estimatedTotalHits\\: int, requestUid\\: non\\-empty\\-string, nbHits\\: int\\} in isset\\(\\) always exists and is not nullable\\.$#',
'identifier' => 'isset.offset',
'count' => 1,
'path' => __DIR__ . '/src/Services/MeilisearchService.php',
];

return ['parameters' => ['ignoreErrors' => $ignoreErrors]];
6 changes: 3 additions & 3 deletions phpstan.dist.neon
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
includes:
- phpstan-baseline.php

parameters:
bootstrapFiles:
- vendor/bin/.phpunit/phpunit/vendor/autoload.php
level: 5
paths:
- src
- tests
ignoreErrors:
- '#Call to static method getClass\(\) on an unknown class Doctrine\\Common\\Util\\ClassUtils#'
- '#Parameter \#1 \$array of function array_unique expects an array of values castable to string, list<class-string<Meilisearch\\Bundle\\Entity\\Aggregator>\|Meilisearch\\Bundle\\Entity\\Aggregator> given#'
11 changes: 4 additions & 7 deletions src/Command/IndexCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Meilisearch\Bundle\Command;

use Meilisearch\Bundle\Collection;
use Meilisearch\Bundle\SearchService;
use Meilisearch\Bundle\SearchManagerInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
Expand All @@ -14,21 +14,18 @@ abstract class IndexCommand extends Command
{
protected const DEFAULT_RESPONSE_TIMEOUT = 5000;

protected SearchService $searchService;

private string $prefix;

public function __construct(SearchService $searchService)
public function __construct(protected SearchManagerInterface $searchManager)
{
$this->searchService = $searchService;
$this->prefix = $this->searchService->getConfiguration()->get('prefix');
$this->prefix = $this->searchManager->getConfiguration()->get('prefix');

parent::__construct();
}

protected function getEntitiesFromArgs(InputInterface $input, OutputInterface $output): Collection
{
$indices = new Collection($this->searchService->getConfiguration()->get('indices'));
$indices = new Collection($this->searchManager->getConfiguration()->get('indices'));
$indexNames = new Collection();

if ($indexList = $input->getOption('indices')) {
Expand Down
2 changes: 1 addition & 1 deletion src/Command/MeilisearchClearCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$indexName = $index['prefixed_name'];
$className = $index['class'];
$msg = "Cleared <info>$indexName</info> index of <comment>$className</comment>";
$array = $this->searchService->clear($className);
$array = $this->searchManager->clear($className);

if ('failed' === $array['status']) {
$msg = "<error>Index <info>$indexName</info> couldn\'t be cleared</error>";
Expand Down
Loading
Loading