diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 679a4b71..65c55562 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,14 +13,14 @@ jobs: strategy: matrix: include: - - php-version: '8.0' - symfony-version: '5.4.*' - - php-version: '8.0' - symfony-version: '6.0.*' + - php-version: '8.1' + symfony-version: '6.4.*' + - php-version: '8.3' + symfony-version: '6.4.*' - php-version: '8.2' - symfony-version: '5.4.*' - - php-version: '8.2' - symfony-version: '6.2.*' + symfony-version: '7.0.*' + - php-version: '8.3' + symfony-version: '7.0.*' steps: - name: "Checkout" uses: actions/checkout@v2 @@ -41,8 +41,8 @@ jobs: - name: "Setup env & install dependencies" uses: ./.github/actions/install with: - php-version: '8.2' - symfony-version: '6.2.*' + php-version: '8.3' + symfony-version: '7.0.*' - name: "Run static analyzis with phpstan/phpstan" run: vendor/bin/phpstan analyze @@ -55,8 +55,8 @@ jobs: - name: "Setup env & install dependencies" uses: ./.github/actions/install with: - php-version: '8.2' - symfony-version: '6.2.*' + php-version: '8.3' + symfony-version: '7.0.*' - name: "Run checkstyle with symplify/easy-coding-standard" run: vendor/bin/ecs @@ -69,8 +69,8 @@ jobs: - name: "Setup env & install dependencies" uses: ./.github/actions/install with: - php-version: '8.2' - symfony-version: '6.2.*' + php-version: '8.3' + symfony-version: '7.0.*' - name: "Run tests with phpunit/phpunit" run: vendor/bin/phpunit --testsuite=Convention @@ -84,8 +84,8 @@ jobs: - name: "Setup env & install dependencies" uses: ./.github/actions/install with: - php-version: '8.2' - symfony-version: '6.2.*' + php-version: '8.3' + symfony-version: '7.0.*' coverage-mode: 'xdebug' - name: "Run tests with phpunit/phpunit" env: diff --git a/composer.json b/composer.json index 8732d617..6bba5f44 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": "^8.0", + "php": "^8.1", "ext-json": "*", "composer-runtime-api": "^2.0", "box/spout": "^3.0", @@ -23,15 +23,15 @@ "psr/container": "^1.0", "psr/event-dispatcher": "^1.0", "psr/log": "^1.0|^2.0|^3.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^5.0|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/form": "^5.0|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/framework-bundle": "^5.0|^6.0", - "symfony/messenger": "^5.0|^6.0", - "symfony/serializer": "^5.0|^6.0", - "symfony/validator": "^5.0|^6.0" + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0" }, "require-dev": { "doctrine/annotations": "^1.14", @@ -41,14 +41,14 @@ "phpstan/phpstan": "^1.4", "phpunit/phpunit": "^9.5", "sonata-project/admin-bundle": "^4.0", - "symfony/browser-kit": "^5.0|^6.0", - "symfony/css-selector": "^5.0|^6.0", - "symfony/filesystem": "^5.0|^6.0", - "symfony/finder": "^5.0|^6.0", - "symfony/process": "^5.0|^6.0", - "symfony/security-bundle": "^5.0|^6.0", - "symfony/translation": "^5.0|^6.0", - "symfony/twig-bundle": "^5.0|^6.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", "symplify/easy-coding-standard": "^11.3" }, "replace": { diff --git a/docker-compose.yml b/docker-compose.yml index eac02d4e..2c1f042a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,13 @@ services: - php82: - container_name: yokai-batch-php82 + php83: + container_name: yokai-batch-php83 environment: PHP_XDEBUG: 1 extends: file: ~/.led/docker-base.yaml service: localuser - hostname: php82 - image: ledup/php:8.2 + hostname: php83 + image: ledup/php:8.3 volumes: - .:/src working_dir: /src diff --git a/phpstan.neon b/phpstan.neon index 898616e1..fa3c85ba 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -19,5 +19,5 @@ parameters: ignoreErrors: # The DependencyInjection returns are complex to deal with - - message: '#.*NodeParentInterface\|null.*#' - path: ./src/batch-symfony-framework/src/DependencyInjection + - message: '#^Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface\:\:#' + path: ./src/batch-symfony-framework/src/DependencyInjection/Configuration.php diff --git a/scripts/tests b/scripts/tests index ce7a6daa..fadd29ab 100755 --- a/scripts/tests +++ b/scripts/tests @@ -15,16 +15,16 @@ install () { led in -s ${container} -- composer2 --no-interaction update --no-progress --with-all-dependencies } -install "php82" "6.2.*" -led in -s php82 -- vendor/bin/ecs -led in -s php82 -- vendor/bin/phpstan analyze -led in -s php82 -- vendor/bin/phpunit --testsuite=Convention +install "php83" "7.0.*" +led in -s php83 -- vendor/bin/ecs +led in -s php83 -- vendor/bin/phpstan analyze +led in -s php83 -- vendor/bin/phpunit --testsuite=Convention matrix=( - "php80/5.4.*" - "php80/6.0.*" - "php82/5.4.*" - "php82/6.2.*" + "php81/6.4.*" + "php83/6.4.*" + "php82/7.0.*" + "php83/7.0.*" ) for entry in "${matrix[@]}" do diff --git a/src/batch-box-spout/composer.json b/src/batch-box-spout/composer.json index 1489de0b..5ffc8131 100644 --- a/src/batch-box-spout/composer.json +++ b/src/batch-box-spout/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "box/spout": "^3.0", "yokai/batch": "^0.5.0" }, @@ -22,7 +22,7 @@ }, "require-dev": { "phpunit/phpunit": "^9.5", - "symfony/filesystem": "^5.0|^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "autoload-dev": { "psr-4": { diff --git a/src/batch-doctrine-dbal/composer.json b/src/batch-doctrine-dbal/composer.json index 8e8c0946..01dd7701 100644 --- a/src/batch-doctrine-dbal/composer.json +++ b/src/batch-doctrine-dbal/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "ext-json": "*", "doctrine/dbal": "^2.11|^3.0", "doctrine/persistence": "^2.0|^3.0", diff --git a/src/batch-doctrine-orm/composer.json b/src/batch-doctrine-orm/composer.json index 599c0069..5de95d5d 100644 --- a/src/batch-doctrine-orm/composer.json +++ b/src/batch-doctrine-orm/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "doctrine/orm": "^2.8", "doctrine/persistence": "^2.0|^3.0", "yokai/batch": "^0.5.0" diff --git a/src/batch-doctrine-persistence/composer.json b/src/batch-doctrine-persistence/composer.json index d276c5d0..47a78961 100644 --- a/src/batch-doctrine-persistence/composer.json +++ b/src/batch-doctrine-persistence/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "doctrine/persistence": "^2.0|^3.0", "yokai/batch": "^0.5.0" }, diff --git a/src/batch-league-flysystem/composer.json b/src/batch-league-flysystem/composer.json index 521336d3..a4982c00 100644 --- a/src/batch-league-flysystem/composer.json +++ b/src/batch-league-flysystem/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "league/flysystem": "^3.0", "yokai/batch": "^0.5.0" }, diff --git a/src/batch-openspout/composer.json b/src/batch-openspout/composer.json index 294860ff..29d966cf 100644 --- a/src/batch-openspout/composer.json +++ b/src/batch-openspout/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "openspout/openspout": "^4.0", "yokai/batch": "^0.5.0" }, @@ -22,7 +22,7 @@ }, "require-dev": { "phpunit/phpunit": "^9.5", - "symfony/filesystem": "^5.0|^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "autoload-dev": { "psr-4": { diff --git a/src/batch-symfony-console/composer.json b/src/batch-symfony-console/composer.json index 71828396..f36eaf8f 100644 --- a/src/batch-symfony-console/composer.json +++ b/src/batch-symfony-console/composer.json @@ -11,9 +11,9 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "ext-json": "*", - "symfony/console": "^5.0|^6.0", + "symfony/console": "^6.4|^7.0", "yokai/batch": "^0.5.0" }, "autoload": { @@ -24,7 +24,7 @@ "require-dev": { "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "symfony/process": "^5.0|^6.0" + "symfony/process": "^6.4|^7.0" }, "autoload-dev": { "psr-4": { diff --git a/src/batch-symfony-console/src/RunJobCommand.php b/src/batch-symfony-console/src/RunJobCommand.php index 87b3d2ac..69c5b3c0 100644 --- a/src/batch-symfony-console/src/RunJobCommand.php +++ b/src/batch-symfony-console/src/RunJobCommand.php @@ -4,6 +4,7 @@ namespace Yokai\Batch\Bridge\Symfony\Console; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Exception\InvalidArgumentException; use Symfony\Component\Console\Input\InputArgument; @@ -19,10 +20,9 @@ /** * Execute any {@see JobInterface} within your CLI. */ +#[AsCommand(name: 'yokai:batch:run', description: 'Execute any job.')] final class RunJobCommand extends Command { - protected static $defaultName = 'yokai:batch:run'; - public const EXIT_SUCCESS_CODE = 0; public const EXIT_ERROR_CODE = 1; public const EXIT_WARNING_CODE = 2; @@ -36,7 +36,6 @@ public function __construct( protected function configure(): void { - $this->setDescription('Execute any job.'); $this->addArgument('job', InputArgument::REQUIRED, 'The job name to run'); $this->addArgument('configuration', InputArgument::OPTIONAL, 'The job parameters as a JSON object'); $this->addUsage('import'); diff --git a/src/batch-symfony-framework/composer.json b/src/batch-symfony-framework/composer.json index 7241cc65..acb16110 100644 --- a/src/batch-symfony-framework/composer.json +++ b/src/batch-symfony-framework/composer.json @@ -11,13 +11,13 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "composer-runtime-api": "^2.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^5.0|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/framework-bundle": "^5.0|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", "yokai/batch": "^0.5.0" }, "autoload": { @@ -27,11 +27,11 @@ }, "require-dev": { "sonata-project/admin-bundle": "^4.0", - "symfony/filesystem": "^5.0|^6.0", - "symfony/form": "^5.0|^6.0", - "symfony/security-bundle": "^5.0|^6.0", - "symfony/translation": "^5.0|^6.0", - "symfony/twig-bundle": "^5.0|^6.0", + "symfony/filesystem": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/security-bundle": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", "phpunit/phpunit": "^9.5" }, "suggest": { diff --git a/src/batch-symfony-messenger/composer.json b/src/batch-symfony-messenger/composer.json index dc50496c..7e045f92 100644 --- a/src/batch-symfony-messenger/composer.json +++ b/src/batch-symfony-messenger/composer.json @@ -11,8 +11,8 @@ } ], "require": { - "php": "^8.0", - "symfony/messenger": "^5.0|^6.0", + "php": "^8.1", + "symfony/messenger": "^6.4|^7.0", "yokai/batch": "^0.5.0" }, "autoload": { diff --git a/src/batch-symfony-messenger/src/LaunchJobMessageHandler.php b/src/batch-symfony-messenger/src/LaunchJobMessageHandler.php index 774a392b..187e1e5a 100644 --- a/src/batch-symfony-messenger/src/LaunchJobMessageHandler.php +++ b/src/batch-symfony-messenger/src/LaunchJobMessageHandler.php @@ -4,14 +4,13 @@ namespace Yokai\Batch\Bridge\Symfony\Messenger; -use Symfony\Component\Messenger\Handler\MessageHandlerInterface; use Yokai\Batch\Job\JobExecutionAccessor; use Yokai\Batch\Job\JobExecutor; /** * Answer to {@see LaunchJobMessage} and launch requested job. */ -final class LaunchJobMessageHandler implements MessageHandlerInterface +final class LaunchJobMessageHandler { public function __construct( private JobExecutionAccessor $jobExecutionAccessor, diff --git a/src/batch-symfony-serializer/composer.json b/src/batch-symfony-serializer/composer.json index 3a16c072..ac5b060c 100644 --- a/src/batch-symfony-serializer/composer.json +++ b/src/batch-symfony-serializer/composer.json @@ -11,8 +11,8 @@ } ], "require": { - "php": "^8.0", - "symfony/serializer": "^5.0|^6.0", + "php": "^8.1", + "symfony/serializer": "^6.4|^7.0", "yokai/batch": "^0.5.0" }, "autoload": { diff --git a/src/batch-symfony-serializer/tests/Dummy/DummyNormalizer.php b/src/batch-symfony-serializer/tests/Dummy/DummyNormalizer.php index 6324538c..2594bb69 100644 --- a/src/batch-symfony-serializer/tests/Dummy/DummyNormalizer.php +++ b/src/batch-symfony-serializer/tests/Dummy/DummyNormalizer.php @@ -15,23 +15,28 @@ public function __construct( ) { } - public function supportsNormalization(mixed $data, string $format = null) + public function supportsNormalization(mixed $data, string $format = null, array $context = []): bool { return $this->supports; } - public function normalize(mixed $object, string $format = null, array $context = []) + public function normalize(mixed $object, string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null { return $this->value; } - public function supportsDenormalization(mixed $data, string $type, string $format = null) + public function supportsDenormalization(mixed $data, string $type, string $format = null, array $context = []): bool { return $this->supports; } - public function denormalize(mixed $data, string $type, string $format = null, array $context = []) + public function denormalize(mixed $data, string $type, string $format = null, array $context = []): mixed { return $this->value; } + + public function getSupportedTypes(?string $format): array + { + return ['*' => true]; + } } diff --git a/src/batch-symfony-serializer/tests/Dummy/FailingNormalizer.php b/src/batch-symfony-serializer/tests/Dummy/FailingNormalizer.php index 3f89767e..a589f292 100644 --- a/src/batch-symfony-serializer/tests/Dummy/FailingNormalizer.php +++ b/src/batch-symfony-serializer/tests/Dummy/FailingNormalizer.php @@ -15,23 +15,28 @@ public function __construct( ) { } - public function supportsNormalization(mixed $data, string $format = null) + public function supportsNormalization(mixed $data, string $format = null, array $context = []): bool { return true; } - public function normalize(mixed $object, string $format = null, array $context = []) + public function normalize(mixed $object, string $format = null, array $context = []): array|string|int|float|bool|\ArrayObject|null { throw $this->exception; } - public function supportsDenormalization(mixed $data, string $type, string $format = null) + public function supportsDenormalization(mixed $data, string $type, string $format = null, array $context = []): bool { return true; } - public function denormalize(mixed $data, string $type, string $format = null, array $context = []) + public function denormalize(mixed $data, string $type, string $format = null, array $context = []): mixed { throw $this->exception; } + + public function getSupportedTypes(?string $format): array + { + return ['*' => true]; + } } diff --git a/src/batch-symfony-validator/composer.json b/src/batch-symfony-validator/composer.json index ae0672b1..c8ff4734 100644 --- a/src/batch-symfony-validator/composer.json +++ b/src/batch-symfony-validator/composer.json @@ -11,8 +11,8 @@ } ], "require": { - "php": "^8.0", - "symfony/validator": "^5.0|^6.0", + "php": "^8.1", + "symfony/validator": "^6.4|^7.0", "yokai/batch": "^0.5.0" }, "autoload": { diff --git a/src/batch/composer.json b/src/batch/composer.json index a1c9e228..6acced65 100644 --- a/src/batch/composer.json +++ b/src/batch/composer.json @@ -10,7 +10,7 @@ } ], "require": { - "php": "^8.0", + "php": "^8.1", "ext-json": "*", "psr/container": "^1.0|^2.0", "psr/log": "^1.0|^2.0|^3.0", @@ -24,7 +24,7 @@ "require-dev": { "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "symfony/filesystem": "^5.0|^6.0" + "symfony/filesystem": "^6.4|^7.0" }, "autoload-dev": { "psr-4": { diff --git a/tests/symfony/src/Kernel.php b/tests/symfony/src/Kernel.php index 2685c9eb..f795324c 100644 --- a/tests/symfony/src/Kernel.php +++ b/tests/symfony/src/Kernel.php @@ -51,6 +51,23 @@ protected function configureContainer(ContainerConfigurator $container): void 'storage_factory_id' => 'session.storage.factory.mock_file', ], ]); + $container->extension('security', [ + 'password_hashers' => [ + 'Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface' => 'auto', + ], + 'providers' => [ + 'users_in_memory' => ['memory' => null], + ], + 'firewalls' => [ + 'main' => [ + 'lazy' => true, + 'provider' => 'users_in_memory', + ], + ], + 'access_control' => [ + ['path' => '^/', 'roles' => 'PUBLIC_ACCESS'], + ], + ]); $container->extension('doctrine', [ 'dbal' => [ 'url' => 'sqlite:///%kernel.project_dir%/var/database.sqlite', @@ -80,6 +97,14 @@ protected function configureContainer(ContainerConfigurator $container): void ], 'ui' => [ 'enabled' => true, + 'security' => [ + 'attributes' => [ + 'list' => 'PUBLIC_ACCESS', + 'view' => 'PUBLIC_ACCESS', + 'traces' => 'PUBLIC_ACCESS', + 'logs' => 'PUBLIC_ACCESS', + ], + ], ], ]); diff --git a/tests/symfony/tests/JobTest.php b/tests/symfony/tests/JobTest.php index 3e27e0cb..0f2834b3 100644 --- a/tests/symfony/tests/JobTest.php +++ b/tests/symfony/tests/JobTest.php @@ -8,27 +8,11 @@ use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; use Symfony\Component\Console\Tester\CommandTester; -use Symfony\Component\DependencyInjection\ContainerInterface; use Yokai\Batch\Launcher\JobLauncherInterface; use Yokai\Batch\Storage\JobExecutionStorageInterface; final class JobTest extends KernelTestCase { - protected static $booted = false; - - protected static function getContainer(): ContainerInterface - { - if (\method_exists(KernelTestCase::class, __FUNCTION__)) { - return parent::getContainer(); - } - - if (!static::$booted) { - static::bootKernel(); - } - - return static::$container; - } - /** * @dataProvider configs */