diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 38fea89..e3bfb68 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -59,6 +59,59 @@ jobs: - name: Default Storefront should be available run: curl -q --fail http://localhost:8000 + installation-with-retry: + name: Install a Shopware Shop with Retry + runs-on: ubuntu-latest + env: + SHOPWARE_DEPLOYMENT_FORCE_REINSTALLATION: 1 + steps: + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + tools: symfony-cli + + - name: Start Default MySQL + run: | + sudo mv /var/lib/mysql /var/lib/mysql-old + sudo mkdir /var/lib/mysql + sudo mount -t tmpfs tmpfs /var/lib/mysql -o size=1G + sudo -u mysql mysqld --datadir=/var/lib/mysql --default-time-zone=SYSTEM --initialize-insecure + sudo systemctl start mysql + + - name: Create new Shopware Project + run: composer create-project shopware/production . --no-interaction + + - name: Checkout + uses: actions/checkout@v4 + with: + path: ./custom/plugins/deployment-helper + + - name: Set fake version into deployment helper + run: composer -d custom/plugins/deployment-helper config version 999.9.9 + + - name: Install Deployment Helper + run: composer require --dev 'shopware/deployment-helper:*' + + - name: Install PayPal + run: composer require 'swag/paypal:*' + + - name: Install Shopware and kill it after some seconds + run: timeout 10 ./vendor/bin/shopware-deployment-helper run + + - name: Retry the Installation + if: always() + run: ./vendor/bin/shopware-deployment-helper run + + - name: Start Webserver + run: symfony server:start -d + + - name: PayPal plugin should be installed + run: ./bin/console plugin:list | grep SwagPayPal + + - name: Default Storefront should be available + run: curl -q --fail http://localhost:8000 + update: name: Update from 6.5 runs-on: ubuntu-latest diff --git a/src/Command/RunCommand.php b/src/Command/RunCommand.php index a53c2f7..8467b56 100644 --- a/src/Command/RunCommand.php +++ b/src/Command/RunCommand.php @@ -5,6 +5,7 @@ namespace Shopware\Deployment\Command; use Shopware\Deployment\Event\PostDeploy; +use Shopware\Deployment\Helper\EnvironmentHelper; use Shopware\Deployment\Services\HookExecutor; use Shopware\Deployment\Services\InstallationManager; use Shopware\Deployment\Services\ShopwareState; @@ -46,10 +47,15 @@ protected function execute(InputInterface $input, OutputInterface $output): int skipThemeCompile: (bool) $input->getOption('skip-theme-compile'), skipAssetsInstall: ((bool) $input->getOption('skip-asset-install') || (bool) $input->getOption('skip-assets-install')), timeout: is_numeric($timeout) ? (float) $timeout : null, + forceReinstallation: filter_var(EnvironmentHelper::getVariable('SHOPWARE_DEPLOYMENT_FORCE_REINSTALLATION', 'false'), FILTER_VALIDATE_BOOLEAN), ); $installed = $this->state->isInstalled(); + if ($config->forceReinstallation && $this->state->getCurrentVersion() === 'unknown') { + $installed = false; + } + $this->hookExecutor->execute(HookExecutor::HOOK_PRE); if ($installed) { diff --git a/src/Services/InstallationManager.php b/src/Services/InstallationManager.php index 1e82caf..8524e47 100644 --- a/src/Services/InstallationManager.php +++ b/src/Services/InstallationManager.php @@ -52,6 +52,10 @@ public function run(RunConfiguration $configuration, OutputInterface $output): v $additionalInstallParameters[] = '--skip-assets-install'; } + if ($configuration->forceReinstallation) { + $additionalInstallParameters[] = '--drop-database'; + } + $this->processHelper->console(['system:install', '--create-database', '--shop-locale=' . $shopLocale, '--shop-currency=' . $shopCurrency, '--force', ...$additionalInstallParameters]); $this->processHelper->console(['user:create', $adminUser, '--password=' . $adminPassword]); diff --git a/src/Struct/RunConfiguration.php b/src/Struct/RunConfiguration.php index 10b3318..9c53a31 100644 --- a/src/Struct/RunConfiguration.php +++ b/src/Struct/RunConfiguration.php @@ -10,6 +10,7 @@ public function __construct( public bool $skipThemeCompile = false, public bool $skipAssetsInstall = false, public ?float $timeout = 60, + public bool $forceReinstallation = false ) { } }