diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9222224..a24a177 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,8 +8,7 @@ on: release: types: [created] schedule: - - - cron: "0 1 * * 6" # Run at 1am every Saturday + - cron: "0 1 * * 6" # Run at 1am every Saturday workflow_dispatch: ~ jobs: @@ -21,12 +20,19 @@ jobs: strategy: fail-fast: false matrix: - php: [ "8.1" ] - symfony: [ "5.4.*", "^6.0" ] - sylius: ["~1.12.0", "1.13.0"] - node: [ "14.x" ] + php: [ "8.0", "8.1", "8.2", "8.3" ] + symfony: [ "^5.4", "^6.4" ] + sylius: [ "^1.12", "^1.13" ] + node: [ "18.x", "20.x" ] mysql: [ "8.0" ] + exclude: + - sylius: ^1.13 + php: 8.0 + - sylius: ^1.12 + php: 8.0 + symfony: ^6.4 + env: APP_ENV: test DATABASE_URL: "mysql://root:root@127.0.0.1/sylius?serverVersion=${{ matrix.mysql }}" @@ -41,12 +47,12 @@ jobs: with: php-version: "${{ matrix.php }}" extensions: intl - tools: flex,symfony + tools: symfony coverage: none - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "${{ matrix.node }}" @@ -80,29 +86,23 @@ jobs: - name: Get Composer cache directory id: composer-cache - run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache Composer - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json **/composer.lock') }} restore-keys: | ${{ runner.os }}-php-${{ matrix.php }}-composer- - - - - name: Configure global composer - run: | - composer global config --no-plugins allow-plugins.symfony/flex true - composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^2.2.2" - - name: Restrict Symfony version if: matrix.symfony != '' run: | + composer global config --no-plugins allow-plugins.symfony/flex true + composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^1.10" composer config extra.symfony.require "${{ matrix.symfony }}" - - name: Restrict Sylius version if: matrix.sylius != '' @@ -117,17 +117,16 @@ jobs: - name: Get Yarn cache directory id: yarn-cache - run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + run: echo "::set-output name=dir::$(yarn cache dir)" - name: Cache Yarn - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ${{ steps.yarn-cache.outputs.dir }} key: ${{ runner.os }}-node-${{ matrix.node }}-yarn-${{ hashFiles('**/package.json **/yarn.lock') }} restore-keys: | ${{ runner.os }}-node-${{ matrix.node }}-yarn- - - name: Install JS dependencies run: (cd tests/Application && yarn install) @@ -137,13 +136,11 @@ jobs: run: | (cd tests/Application && bin/console doctrine:database:create -vvv) (cd tests/Application && bin/console doctrine:schema:create -vvv) - - name: Prepare test application assets run: | (cd tests/Application && bin/console assets:install public -vvv) - (cd tests/Application && yarn build:prod) - + (cd tests/Application && yarn encore dev) - name: Prepare test application cache run: (cd tests/Application && bin/console cache:warmup -vvv) @@ -154,26 +151,26 @@ jobs: - name: Validate composer.json - if: ${{ matrix.sylius != '1.13.0' }} run: composer validate --ansi --strict - name: Validate database schema run: (cd tests/Application && bin/console doctrine:schema:validate) - - name: Run PHPStan - run: vendor/bin/phpstan analyse -c phpstan.neon -l 8 src/ - - - name: Run ECS - run: vendor/bin/ecs check src - - - name: Run PHPSpec + - + name: Run PHPSpec run: vendor/bin/phpspec run --ansi -f progress --no-interaction - - name: Load fixtures in test application + - + name: Run PHPUnit + run: vendor/bin/phpunit --colors=always + + - + name: Load fixtures in test application run: (cd tests/Application && bin/console sylius:fixtures:load -n) - - - name: Failed build Slack notification + + - + name: Failed build Slack notification uses: rtCamp/action-slack-notify@v2 if: ${{ failure() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') }} env: diff --git a/.github/workflows/coding_standard.yml b/.github/workflows/coding_standard.yml new file mode 100644 index 0000000..97e34a4 --- /dev/null +++ b/.github/workflows/coding_standard.yml @@ -0,0 +1,88 @@ +name: Coding standard + +on: + push: + branches-ignore: + - 'dependabot/**' + pull_request: ~ + release: + types: [ created ] + workflow_dispatch: ~ + +jobs: + tests: + runs-on: ubuntu-latest + + name: "Sylius ${{ matrix.sylius }}, PHP ${{ matrix.php }}, Symfony ${{ matrix.symfony }}" + + strategy: + fail-fast: false + matrix: + php: [ "8.0", "8.1", "8.2", "8.3" ] + symfony: [ "^5.4", "^6.4" ] + sylius: [ "^1.12", "^1.13" ] + node: [ "18.x", "20.x" ] + + exclude: + - sylius: ^1.13 + php: 8.0 + - sylius: ^1.12 + php: 8.0 + symfony: ^6.4 + + steps: + - uses: actions/checkout@v3 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "${{ matrix.php }}" + extensions: intl + tools: symfony + coverage: none + + - name: Get Composer cache directory + id: composer-cache + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - name: Cache Composer + uses: actions/cache@v4 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json', '**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-php-${{ matrix.php }}-composer- + + - name: Restrict Symfony version + if: matrix.symfony != '' + run: | + composer global config --no-plugins allow-plugins.symfony/flex true + composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^1.10" + composer config extra.symfony.require "${{ matrix.symfony }}" + + - name: Restrict Sylius version + if: matrix.sylius != '' + run: composer require "sylius/sylius:${{ matrix.sylius }}" --no-update --no-scripts --no-interaction + + - name: Install PHP dependencies + run: composer install --no-interaction + env: + SYMFONY_REQUIRE: ${{ matrix.symfony }} + + - name: Run PHPStan + run: vendor/bin/phpstan analyse -c phpstan.neon -l 8 src/ + + - name: Run ECS + run: vendor/bin/ecs check src + + - name: Failed build Slack notification + uses: rtCamp/action-slack-notify@v2 + if: ${{ failure() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') }} + env: + SLACK_CHANNEL: ${{ secrets.FAILED_BUILD_SLACK_CHANNEL }} + SLACK_COLOR: ${{ job.status }} + SLACK_ICON: https://github.com/rtCamp.png?size=48 + SLACK_MESSAGE: ':x:' + SLACK_TITLE: Failed build on ${{ github.event.repository.name }} repository + SLACK_USERNAME: ${{ secrets.FAILED_BUILD_SLACK_USERNAME }} + SLACK_WEBHOOK: ${{ secrets.FAILED_BUILD_SLACK_WEBHOOK }} diff --git a/composer.json b/composer.json index 6ef64b8..18a58a7 100644 --- a/composer.json +++ b/composer.json @@ -8,9 +8,9 @@ ], "license": "MIT", "require": { - "php": "^8.1", + "php": "^8.0", "doctrine/annotations": "^1.14", - "sylius/sylius": ">=1.12.13 || ~1.13.0", + "sylius/sylius": "~1.12.0 || ~1.13.0", "sylius/mailer-bundle": "^1.8 || ^2.0@beta", "symfony/webpack-encore-bundle": "^1.15" }, @@ -43,9 +43,10 @@ "symfony/flex": "^2.2.2", "symfony/intl": "^5.4 || ^6.0", "symfony/web-profiler-bundle": "^5.4 || ^6.0", - "vimeo/psalm": "5.12.0" + "vimeo/psalm": "4.27.0" }, "conflict": { + "behat/mink-selenium2-driver": ">=1.7.0", "symfony/framework-bundle": "6.2.8", "symfony/validator": "6.4.7" }, diff --git a/src/Action/CaptureAction.php b/src/Action/CaptureAction.php index 70b1f4d..0022a53 100644 --- a/src/Action/CaptureAction.php +++ b/src/Action/CaptureAction.php @@ -28,7 +28,7 @@ final class CaptureAction implements ActionInterface, ApiAwareInterface { use ApiAwareTrait; - public function __construct(private readonly SignatureResolverInterface $signatureResolver) + public function __construct(private SignatureResolverInterface $signatureResolver) { $this->apiClass = ImojeApi::class; } diff --git a/src/Action/NotifyAction.php b/src/Action/NotifyAction.php index 294c81e..7a1be8b 100644 --- a/src/Action/NotifyAction.php +++ b/src/Action/NotifyAction.php @@ -28,8 +28,8 @@ final class NotifyAction implements ActionInterface, ApiAwareInterface private ?Request $request; public function __construct( - private readonly RequestStack $requestStack, - private readonly SignatureResolverInterface $signatureResolver, + private RequestStack $requestStack, + private SignatureResolverInterface $signatureResolver, ) { $this->request = $requestStack->getCurrentRequest(); $this->apiClass = ImojeApi::class; diff --git a/src/Api/ImojeApi.php b/src/Api/ImojeApi.php index 64395fe..49d96d7 100644 --- a/src/Api/ImojeApi.php +++ b/src/Api/ImojeApi.php @@ -13,11 +13,11 @@ class ImojeApi implements ImojeApiInterface { public function __construct( - private readonly string $environment, - private readonly string $merchantId, - private readonly string $serviceId, - private readonly string $serviceKey, - private readonly string $authorizationToken, + private string $environment, + private string $merchantId, + private string $serviceId, + private string $serviceKey, + private string $authorizationToken, ) { } diff --git a/src/Controller/NotifyController.php b/src/Controller/NotifyController.php index 128accb..59650cc 100644 --- a/src/Controller/NotifyController.php +++ b/src/Controller/NotifyController.php @@ -22,8 +22,8 @@ final class NotifyController { public function __construct( - private readonly Payum $payum, - private readonly PaymentTokenProviderInterface $paymentTokenProvider, + private Payum $payum, + private PaymentTokenProviderInterface $paymentTokenProvider, ) { } diff --git a/src/Provider/PaymentTokenProvider.php b/src/Provider/PaymentTokenProvider.php index bbdde64..f7c59a7 100644 --- a/src/Provider/PaymentTokenProvider.php +++ b/src/Provider/PaymentTokenProvider.php @@ -20,8 +20,8 @@ final class PaymentTokenProvider implements PaymentTokenProviderInterface { public function __construct( - private readonly RepositoryInterface $orderRepository, - private readonly RepositoryInterface $paymentTokenRepository, + private RepositoryInterface $orderRepository, + private RepositoryInterface $paymentTokenRepository, ) { }