From 5399e7ddae9c2e7f226a2e6bbe8752d176904e80 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:44:21 +0000 Subject: [PATCH 1/7] Initial plan From 2230ea04d76127963f4d080afd2848b79eff1f26 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:47:53 +0000 Subject: [PATCH 2/7] Add --ssl-verify-server-cert flag to MySQL commands with --no-defaults Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/Context/FeatureContext.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Context/FeatureContext.php b/src/Context/FeatureContext.php index 3c9dbb0e..023bfc06 100644 --- a/src/Context/FeatureContext.php +++ b/src/Context/FeatureContext.php @@ -1203,7 +1203,7 @@ public function create_db(): void { } $dbname = self::$db_settings['dbname']; - self::run_sql( self::$mysql_binary . ' --no-defaults', [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); + self::run_sql( self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); } /** @@ -1215,7 +1215,7 @@ public function test_connection(): void { } $sql_result = self::run_sql( - self::$mysql_binary . ' --no-defaults', + self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => 'SELECT 1', 'send_to_shell' => false, @@ -1242,7 +1242,7 @@ public function drop_db(): void { return; } $dbname = self::$db_settings['dbname']; - self::run_sql( self::$mysql_binary . ' --no-defaults', [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); + self::run_sql( self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); } /** @@ -1479,7 +1479,7 @@ public function install_wp( $subdir = '', $version = '' ): void { if ( 'sqlite' === self::$db_type ) { copy( "{$install_cache_path}.sqlite", "$run_dir/wp-content/database/.ht.sqlite" ); } else { - self::run_sql( self::$mysql_binary . ' --no-defaults', [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); + self::run_sql( self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); } } else { $this->proc( 'wp core install', $install_args, $subdir )->run_check(); @@ -1492,7 +1492,7 @@ public function install_wp( $subdir = '', $version = '' ): void { $mysqldump_binary = Utils\get_sql_dump_command(); $mysqldump_binary = Utils\force_env_on_nix_systems( $mysqldump_binary ); $support_column_statistics = exec( "{$mysqldump_binary} --help | grep 'column-statistics'" ); - $command = "{$mysqldump_binary} --no-defaults --no-tablespaces"; + $command = "{$mysqldump_binary} --no-defaults --ssl-verify-server-cert --no-tablespaces"; if ( $support_column_statistics ) { $command .= ' --skip-column-statistics'; } From 30a9efa3f6b3bf819f783938ad6a258363fc3e21 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Feb 2026 01:59:07 +0000 Subject: [PATCH 3/7] Add SSL flag only for MariaDB, not MySQL Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/Context/FeatureContext.php | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Context/FeatureContext.php b/src/Context/FeatureContext.php index 023bfc06..589dcd3d 100644 --- a/src/Context/FeatureContext.php +++ b/src/Context/FeatureContext.php @@ -1202,8 +1202,9 @@ public function create_db(): void { return; } - $dbname = self::$db_settings['dbname']; - self::run_sql( self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); + $dbname = self::$db_settings['dbname']; + $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); } /** @@ -1214,8 +1215,9 @@ public function test_connection(): void { return; } + $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; $sql_result = self::run_sql( - self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', + self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => 'SELECT 1', 'send_to_shell' => false, @@ -1241,8 +1243,9 @@ public function drop_db(): void { if ( 'sqlite' === self::$db_type ) { return; } - $dbname = self::$db_settings['dbname']; - self::run_sql( self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); + $dbname = self::$db_settings['dbname']; + $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); } /** @@ -1479,7 +1482,8 @@ public function install_wp( $subdir = '', $version = '' ): void { if ( 'sqlite' === self::$db_type ) { copy( "{$install_cache_path}.sqlite", "$run_dir/wp-content/database/.ht.sqlite" ); } else { - self::run_sql( self::$mysql_binary . ' --no-defaults --ssl-verify-server-cert', [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); + $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); } } else { $this->proc( 'wp core install', $install_args, $subdir )->run_check(); @@ -1492,7 +1496,8 @@ public function install_wp( $subdir = '', $version = '' ): void { $mysqldump_binary = Utils\get_sql_dump_command(); $mysqldump_binary = Utils\force_env_on_nix_systems( $mysqldump_binary ); $support_column_statistics = exec( "{$mysqldump_binary} --help | grep 'column-statistics'" ); - $command = "{$mysqldump_binary} --no-defaults --ssl-verify-server-cert --no-tablespaces"; + $ssl_flag = ( false !== strpos( $mysqldump_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + $command = "{$mysqldump_binary} --no-defaults{$ssl_flag} --no-tablespaces"; if ( $support_column_statistics ) { $command .= ' --skip-column-statistics'; } From aef1158730f60bf8f8f897d6803defc596538adb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Feb 2026 02:00:48 +0000 Subject: [PATCH 4/7] Extract MariaDB detection into helper method with basename check Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/Context/FeatureContext.php | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Context/FeatureContext.php b/src/Context/FeatureContext.php index 589dcd3d..e0a6c07e 100644 --- a/src/Context/FeatureContext.php +++ b/src/Context/FeatureContext.php @@ -1165,6 +1165,16 @@ private function set_cache_dir(): void { $this->variables['CACHE_DIR'] = $path; } + /** + * Check if the given binary path is for MariaDB. + * + * @param string $binary_path Path to the database binary. + * @return bool True if MariaDB, false otherwise. + */ + private static function is_mariadb( $binary_path ) { + return false !== strpos( basename( $binary_path ), 'mariadb' ); + } + /** * Run a MySQL command with `$db_settings`. * @@ -1203,7 +1213,7 @@ public function create_db(): void { } $dbname = self::$db_settings['dbname']; - $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); } @@ -1215,7 +1225,7 @@ public function test_connection(): void { return; } - $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; $sql_result = self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ @@ -1244,7 +1254,7 @@ public function drop_db(): void { return; } $dbname = self::$db_settings['dbname']; - $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); } @@ -1482,7 +1492,7 @@ public function install_wp( $subdir = '', $version = '' ): void { if ( 'sqlite' === self::$db_type ) { copy( "{$install_cache_path}.sqlite", "$run_dir/wp-content/database/.ht.sqlite" ); } else { - $ssl_flag = ( false !== strpos( self::$mysql_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); } } else { @@ -1496,7 +1506,7 @@ public function install_wp( $subdir = '', $version = '' ): void { $mysqldump_binary = Utils\get_sql_dump_command(); $mysqldump_binary = Utils\force_env_on_nix_systems( $mysqldump_binary ); $support_column_statistics = exec( "{$mysqldump_binary} --help | grep 'column-statistics'" ); - $ssl_flag = ( false !== strpos( $mysqldump_binary, 'mariadb' ) ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb( $mysqldump_binary ) ? ' --ssl-verify-server-cert' : ''; $command = "{$mysqldump_binary} --no-defaults{$ssl_flag} --no-tablespaces"; if ( $support_column_statistics ) { $command .= ' --skip-column-statistics'; From aa5f61b83547fb62678488c9854337666edf8d8b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Feb 2026 02:02:03 +0000 Subject: [PATCH 5/7] Improve documentation for is_mariadb() helper method Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/Context/FeatureContext.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Context/FeatureContext.php b/src/Context/FeatureContext.php index e0a6c07e..5de0cd70 100644 --- a/src/Context/FeatureContext.php +++ b/src/Context/FeatureContext.php @@ -1168,6 +1168,11 @@ private function set_cache_dir(): void { /** * Check if the given binary path is for MariaDB. * + * Checks if the binary name contains 'mariadb' to distinguish MariaDB from MySQL. + * This is a simple heuristic that works for standard installations where the + * binary is named 'mariadb' or 'mariadb-dump'. Custom builds with non-standard + * naming may not be detected correctly. + * * @param string $binary_path Path to the database binary. * @return bool True if MariaDB, false otherwise. */ From 3be0a6e1a2b986c7af9e502e88fcc736f26bf9a3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Feb 2026 13:58:52 +0000 Subject: [PATCH 6/7] Use db_type variable instead of binary path to detect MariaDB Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/Context/FeatureContext.php | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/Context/FeatureContext.php b/src/Context/FeatureContext.php index 5de0cd70..3707d5da 100644 --- a/src/Context/FeatureContext.php +++ b/src/Context/FeatureContext.php @@ -834,7 +834,8 @@ public function __construct() { if ( getenv( 'WP_CLI_TEST_DBTYPE' ) ) { $this->variables['DB_TYPE'] = getenv( 'WP_CLI_TEST_DBTYPE' ); } else { - $this->variables['DB_TYPE'] = 'mysql'; + // Auto-detect database type if not explicitly set + $this->variables['DB_TYPE'] = Utils\get_db_type(); } if ( getenv( 'MYSQL_TCP_PORT' ) ) { @@ -1166,18 +1167,12 @@ private function set_cache_dir(): void { } /** - * Check if the given binary path is for MariaDB. + * Check if the current database type is MariaDB. * - * Checks if the binary name contains 'mariadb' to distinguish MariaDB from MySQL. - * This is a simple heuristic that works for standard installations where the - * binary is named 'mariadb' or 'mariadb-dump'. Custom builds with non-standard - * naming may not be detected correctly. - * - * @param string $binary_path Path to the database binary. * @return bool True if MariaDB, false otherwise. */ - private static function is_mariadb( $binary_path ) { - return false !== strpos( basename( $binary_path ), 'mariadb' ); + private static function is_mariadb() { + return 'mariadb' === self::$db_type; } /** @@ -1218,7 +1213,7 @@ public function create_db(): void { } $dbname = self::$db_settings['dbname']; - $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); } @@ -1230,7 +1225,7 @@ public function test_connection(): void { return; } - $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; $sql_result = self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ @@ -1259,7 +1254,7 @@ public function drop_db(): void { return; } $dbname = self::$db_settings['dbname']; - $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); } @@ -1497,7 +1492,7 @@ public function install_wp( $subdir = '', $version = '' ): void { if ( 'sqlite' === self::$db_type ) { copy( "{$install_cache_path}.sqlite", "$run_dir/wp-content/database/.ht.sqlite" ); } else { - $ssl_flag = self::is_mariadb( self::$mysql_binary ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); } } else { @@ -1511,7 +1506,7 @@ public function install_wp( $subdir = '', $version = '' ): void { $mysqldump_binary = Utils\get_sql_dump_command(); $mysqldump_binary = Utils\force_env_on_nix_systems( $mysqldump_binary ); $support_column_statistics = exec( "{$mysqldump_binary} --help | grep 'column-statistics'" ); - $ssl_flag = self::is_mariadb( $mysqldump_binary ) ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; $command = "{$mysqldump_binary} --no-defaults{$ssl_flag} --no-tablespaces"; if ( $support_column_statistics ) { $command .= ' --skip-column-statistics'; From df5dbba92426e4b0350ffad1a1c76f3c8cabf44b Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Mon, 2 Feb 2026 20:33:39 -0500 Subject: [PATCH 7/7] inline --- src/Context/FeatureContext.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/Context/FeatureContext.php b/src/Context/FeatureContext.php index 3707d5da..be6aa458 100644 --- a/src/Context/FeatureContext.php +++ b/src/Context/FeatureContext.php @@ -1166,15 +1166,6 @@ private function set_cache_dir(): void { $this->variables['CACHE_DIR'] = $path; } - /** - * Check if the current database type is MariaDB. - * - * @return bool True if MariaDB, false otherwise. - */ - private static function is_mariadb() { - return 'mariadb' === self::$db_type; - } - /** * Run a MySQL command with `$db_settings`. * @@ -1213,7 +1204,7 @@ public function create_db(): void { } $dbname = self::$db_settings['dbname']; - $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = 'mariadb' === self::$db_type ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "CREATE DATABASE IF NOT EXISTS $dbname" ] ); } @@ -1225,7 +1216,7 @@ public function test_connection(): void { return; } - $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = 'mariadb' === self::$db_type ? ' --ssl-verify-server-cert' : ''; $sql_result = self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ @@ -1254,7 +1245,7 @@ public function drop_db(): void { return; } $dbname = self::$db_settings['dbname']; - $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = 'mariadb' === self::$db_type ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "DROP DATABASE IF EXISTS $dbname" ] ); } @@ -1492,7 +1483,7 @@ public function install_wp( $subdir = '', $version = '' ): void { if ( 'sqlite' === self::$db_type ) { copy( "{$install_cache_path}.sqlite", "$run_dir/wp-content/database/.ht.sqlite" ); } else { - $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = 'mariadb' === self::$db_type ? ' --ssl-verify-server-cert' : ''; self::run_sql( self::$mysql_binary . ' --no-defaults' . $ssl_flag, [ 'execute' => "source {$install_cache_path}.sql" ], true /*add_database*/ ); } } else { @@ -1506,7 +1497,7 @@ public function install_wp( $subdir = '', $version = '' ): void { $mysqldump_binary = Utils\get_sql_dump_command(); $mysqldump_binary = Utils\force_env_on_nix_systems( $mysqldump_binary ); $support_column_statistics = exec( "{$mysqldump_binary} --help | grep 'column-statistics'" ); - $ssl_flag = self::is_mariadb() ? ' --ssl-verify-server-cert' : ''; + $ssl_flag = 'mariadb' === self::$db_type ? ' --ssl-verify-server-cert' : ''; $command = "{$mysqldump_binary} --no-defaults{$ssl_flag} --no-tablespaces"; if ( $support_column_statistics ) { $command .= ' --skip-column-statistics';