diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml index 1b47d944..ac5b0278 100644 --- a/.github/workflows/php.yml +++ b/.github/workflows/php.yml @@ -888,13 +888,18 @@ jobs: resolve_service redis 6379 "$REDIS_PUBLISHED_PORT" REDIS } >> "$GITHUB_ENV" - - name: Run bounded locking and history regressions on MariaDB 10.5 - run: >- - vendor/bin/phpunit --testdox --testsuite feature - --filter - '/(testHistoryPayloadPaginatedUsesConfiguredSummaryCountersWithoutHydratingHistory|testHistoryPayloadPaginatedUsesBoundedAggregatesWhenSummaryIsMissingOrStale|testEmbeddedHeartbeatAndTimeoutEnforcementUseOneConcurrentLockOrder)/' - tests/Feature/V2/V2WorkflowTaskBridgeTest.php - tests/Feature/V2/V2ActivityTimeoutTest.php + - name: Run locking, readiness and replay regressions on MariaDB 10.5 + run: | + vendor/bin/phpunit --testdox --testsuite feature \ + --filter '/(testHistoryPayloadPaginatedUsesConfiguredSummaryCountersWithoutHydratingHistory|testHistoryPayloadPaginatedUsesBoundedAggregatesWhenSummaryIsMissingOrStale|testEmbeddedHeartbeatAndTimeoutEnforcementUseOneConcurrentLockOrder)/' \ + tests/Feature/V2/V2WorkflowTaskBridgeTest.php \ + tests/Feature/V2/V2ActivityTimeoutTest.php + DB_CONNECTION=mariadb vendor/bin/phpunit --testdox --testsuite feature \ + --filter '/(testSnapshotSummarizesDurableBacklogRepairCompatibilityAndWorkerFleet|testPublicReplayerCanReplayLiveRun|testPublicReplayerCanReplayHistoryExportBundle|testHistoryPayloadPaginatedUsesConfiguredSummaryCountersWithoutHydratingHistory|testHistoryPayloadPaginatedUsesBoundedAggregatesWhenSummaryIsMissingOrStale|testEmbeddedHeartbeatAndTimeoutEnforcementUseOneConcurrentLockOrder)/' \ + tests/Feature/V2/V2OperatorMetricsTest.php \ + tests/Feature/V2/V2WorkflowReplayerTest.php \ + tests/Feature/V2/V2WorkflowTaskBridgeTest.php \ + tests/Feature/V2/V2ActivityTimeoutTest.php env: APP_KEY: base64:i3g6f+dV8FfsIkcxqd7gbiPn2oXk5r00sTmdD6V5utI= DB_CONNECTION: mysql diff --git a/src/V2/Support/BackendCapabilities.php b/src/V2/Support/BackendCapabilities.php index 4cc56475..50d546f4 100644 --- a/src/V2/Support/BackendCapabilities.php +++ b/src/V2/Support/BackendCapabilities.php @@ -85,7 +85,11 @@ private static function database(?string $configuredConnection = null): array : self::normalize(config(sprintf('database.connections.%s.driver', $connection))); $issues = []; - $driverSupported = is_string($driver) && in_array($driver, ['mysql', 'pgsql', 'sqlite', 'sqlsrv'], true); + $driverSupported = is_string($driver) && in_array( + $driver, + ['mysql', 'mariadb', 'pgsql', 'sqlite', 'sqlsrv'], + true + ); if ($connection === null || $driver === null) { $issues[] = self::issue( diff --git a/src/V2/Support/ReadinessContract.php b/src/V2/Support/ReadinessContract.php index d2796e11..9c2a5a89 100644 --- a/src/V2/Support/ReadinessContract.php +++ b/src/V2/Support/ReadinessContract.php @@ -91,7 +91,7 @@ public static function definition(): array ], 'backend_capabilities' => [ 'database' => [ - 'supported_drivers' => ['mysql', 'pgsql', 'sqlite', 'sqlsrv'], + 'supported_drivers' => ['mysql', 'mariadb', 'pgsql', 'sqlite', 'sqlsrv'], 'required_capabilities' => ['transactions', 'after_commit_callbacks', 'durable_ordering'], 'sqlite_note' => 'SQLite is supported with limited concurrent write safety and no row-lock capability.', ], diff --git a/tests/Unit/V2/BackendCapabilitiesTest.php b/tests/Unit/V2/BackendCapabilitiesTest.php index 487eefbb..4f03ea7c 100644 --- a/tests/Unit/V2/BackendCapabilitiesTest.php +++ b/tests/Unit/V2/BackendCapabilitiesTest.php @@ -89,6 +89,7 @@ public function testSnapshotIncludesFrozenReadinessContractMatrix(): void $contract['surfaces']['claim']['authority'] ); $this->assertContains('mysql', $contract['backend_capabilities']['database']['supported_drivers']); + $this->assertContains('mariadb', $contract['backend_capabilities']['database']['supported_drivers']); $this->assertContains('pgsql', $contract['backend_capabilities']['database']['supported_drivers']); $this->assertSame( 'error', @@ -148,6 +149,24 @@ public function testSnapshotDoesNotAdvertiseDatabaseCapabilitiesForUnsupportedDr ], $snapshot['database']['capabilities']); } + public function testSnapshotSupportsTheMariaDbDriver(): void + { + config()->set('database.connections.mariadb.driver', 'mariadb'); + + $snapshot = BackendCapabilities::snapshot(databaseConnection: 'mariadb'); + + $this->assertSame('mariadb', $snapshot['database']['connection']); + $this->assertSame('mariadb', $snapshot['database']['driver']); + $this->assertTrue($snapshot['database']['supported']); + $this->assertNotContains('database_driver_unsupported', array_column($snapshot['issues'], 'code')); + $this->assertSame([ + 'transactions' => true, + 'after_commit_callbacks' => true, + 'durable_ordering' => true, + 'row_locks' => true, + ], $snapshot['database']['capabilities']); + } + // --------------------------------------------------------------- // Structural limits in backend contract // ---------------------------------------------------------------