From e08b594052385ab9891dd86047e52da8a953c827 Mon Sep 17 00:00:00 2001 From: Tom Coonen Date: Tue, 18 Jun 2024 19:36:56 +0200 Subject: [PATCH] MariaDB 11 support (#698) * Add support for MariaDB 11 * Health check update * Split up MariaDB 10/11 commands * Simplify split * Fix volume naming * Update stubs/mariadb10.stub Co-authored-by: Julius Kiekbusch * Update stubs/mariadb10.stub Co-authored-by: Julius Kiekbusch * Update stubs/mariadb11.stub Co-authored-by: Julius Kiekbusch * Update stubs/mariadb11.stub Co-authored-by: Julius Kiekbusch --------- Co-authored-by: Taylor Otwell Co-authored-by: Julius Kiekbusch --- database/mariadb/create-testing-database.sh | 6 ++++++ .../InteractsWithDockerComposeServices.php | 12 ++++++----- src/Console/InstallCommand.php | 3 ++- stubs/{mariadb.stub => mariadb10.stub} | 4 ++-- stubs/mariadb11.stub | 20 +++++++++++++++++++ 5 files changed, 37 insertions(+), 8 deletions(-) create mode 100755 database/mariadb/create-testing-database.sh rename stubs/{mariadb.stub => mariadb10.stub} (70%) create mode 100644 stubs/mariadb11.stub diff --git a/database/mariadb/create-testing-database.sh b/database/mariadb/create-testing-database.sh new file mode 100755 index 00000000..d3b19d90 --- /dev/null +++ b/database/mariadb/create-testing-database.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +/usr/bin/mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL + CREATE DATABASE IF NOT EXISTS testing; + GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%'; +EOSQL diff --git a/src/Console/Concerns/InteractsWithDockerComposeServices.php b/src/Console/Concerns/InteractsWithDockerComposeServices.php index a89056b9..d8118a71 100644 --- a/src/Console/Concerns/InteractsWithDockerComposeServices.php +++ b/src/Console/Concerns/InteractsWithDockerComposeServices.php @@ -15,7 +15,8 @@ trait InteractsWithDockerComposeServices protected $services = [ 'mysql', 'pgsql', - 'mariadb', + 'mariadb10', + 'mariadb11', 'redis', 'memcached', 'meilisearch', @@ -66,7 +67,7 @@ protected function buildDockerCompose(array $services) : Yaml::parse(file_get_contents(__DIR__ . '/../../../stubs/docker-compose.stub')); // Prepare the installation of the "mariadb-client" package if the MariaDB service is used... - if (in_array('mariadb', $services)) { + if (in_array('mariadb10', $services) || in_array('mariadb11', $services)) { $compose['services']['laravel.test']['build']['args']['MYSQL_CLIENT'] = 'mariadb-client'; } @@ -92,7 +93,7 @@ protected function buildDockerCompose(array $services) // Merge volumes... collect($services) ->filter(function ($service) { - return in_array($service, ['mysql', 'pgsql', 'mariadb', 'redis', 'meilisearch', 'typesense', 'minio']); + return in_array($service, ['mysql', 'pgsql', 'mariadb10', 'mariadb11', 'redis', 'meilisearch', 'typesense', 'minio']); })->filter(function ($service) use ($compose) { return ! array_key_exists($service, $compose['volumes'] ?? []); })->each(function ($service) use (&$compose) { @@ -123,7 +124,8 @@ protected function replaceEnvVariables(array $services) $environment = file_get_contents($this->laravel->basePath('.env')); if (in_array('mysql', $services) || - in_array('mariadb', $services) || + in_array('mariadb10', $services) || + in_array('mariadb11', $services) || in_array('pgsql', $services)) { $defaults = [ '# DB_HOST=127.0.0.1', @@ -145,7 +147,7 @@ protected function replaceEnvVariables(array $services) $environment = preg_replace('/DB_CONNECTION=.*/', 'DB_CONNECTION=pgsql', $environment); $environment = str_replace('DB_HOST=127.0.0.1', "DB_HOST=pgsql", $environment); $environment = str_replace('DB_PORT=3306', "DB_PORT=5432", $environment); - } elseif (in_array('mariadb', $services)) { + } elseif (in_array('mariadb10', $services) || in_array('mariadb11', $services)) { if ($this->laravel->config->has('database.connections.mariadb')) { $environment = preg_replace('/DB_CONNECTION=.*/', 'DB_CONNECTION=mariadb', $environment); } diff --git a/src/Console/InstallCommand.php b/src/Console/InstallCommand.php index 9b197ee7..2c4b805e 100644 --- a/src/Console/InstallCommand.php +++ b/src/Console/InstallCommand.php @@ -65,7 +65,8 @@ public function handle() $this->output->writeln('./vendor/bin/sail up'); if (in_array('mysql', $services) || - in_array('mariadb', $services) || + in_array('mariadb10', $services) || + in_array('mariadb11', $services) || in_array('pgsql', $services)) { $this->components->warn('A database service was installed. Run "artisan migrate" to prepare your database:'); diff --git a/stubs/mariadb.stub b/stubs/mariadb10.stub similarity index 70% rename from stubs/mariadb.stub rename to stubs/mariadb10.stub index 191cb9c8..4cd3aeba 100644 --- a/stubs/mariadb.stub +++ b/stubs/mariadb10.stub @@ -11,10 +11,10 @@ mariadb: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' volumes: - 'sail-mariadb:/var/lib/mysql' - - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' + - './vendor/laravel/sail/database/mariadb/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' networks: - sail healthcheck: - test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] + test: ["CMD", "mariadb-admin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s diff --git a/stubs/mariadb11.stub b/stubs/mariadb11.stub new file mode 100644 index 00000000..142115a4 --- /dev/null +++ b/stubs/mariadb11.stub @@ -0,0 +1,20 @@ +mariadb: + image: 'mariadb:11' + ports: + - '${FORWARD_DB_PORT:-3306}:3306' + environment: + MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' + MYSQL_ROOT_HOST: "%" + MYSQL_DATABASE: '${DB_DATABASE}' + MYSQL_USER: '${DB_USERNAME}' + MYSQL_PASSWORD: '${DB_PASSWORD}' + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + volumes: + - 'sail-mariadb:/var/lib/mysql' + - './vendor/laravel/sail/database/mariadb/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' + networks: + - sail + healthcheck: + test: ["CMD", "mariadb-admin", "ping", "-p${DB_PASSWORD}"] + retries: 3 + timeout: 5s