From c6f16b055807057426089c2b015f26abb7230bf6 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sat, 15 Jan 2022 11:34:17 +0100 Subject: [PATCH] Updated to latest installer with support for env vars --- composer.json | 2 +- config/autoload/entity-manager.global.php | 2 +- config/autoload/installer.global.php | 6 ++---- config/config.php | 17 +++++++++++++++-- module/Core/functions/functions.php | 19 +++++++++++++++++++ module/Core/src/Options/TrackingOptions.php | 12 +++++++----- 6 files changed, 45 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index 3213403b..7901dde3 100644 --- a/composer.json +++ b/composer.json @@ -51,7 +51,7 @@ "shlinkio/shlink-config": "^1.5", "shlinkio/shlink-event-dispatcher": "^2.3", "shlinkio/shlink-importer": "^2.5", - "shlinkio/shlink-installer": "dev-develop#a008036 as 7.0", + "shlinkio/shlink-installer": "dev-develop#ba32503 as 7.0", "shlinkio/shlink-ip-geolocation": "^2.2", "symfony/console": "^6.0", "symfony/filesystem": "^6.0", diff --git a/config/autoload/entity-manager.global.php b/config/autoload/entity-manager.global.php index 19113c22..c83db2a8 100644 --- a/config/autoload/entity-manager.global.php +++ b/config/autoload/entity-manager.global.php @@ -38,7 +38,7 @@ return (static function (): array { 'dbname' => env('DB_NAME', 'shlink'), 'user' => env('DB_USER'), 'password' => env('DB_PASSWORD'), - 'host' => env('DB_HOST', $driver === 'postgres' ? env('DB_UNIX_SOCKET') : null), + 'host' => env('DB_HOST', env('DB_UNIX_SOCKET')), 'port' => env('DB_PORT', $resolveDefaultPort()), 'unix_socket' => $isMysqlCompatible ? env('DB_UNIX_SOCKET') : null, 'charset' => $resolveCharset(), diff --git a/config/autoload/installer.global.php b/config/autoload/installer.global.php index 9259b061..81f9941a 100644 --- a/config/autoload/installer.global.php +++ b/config/autoload/installer.global.php @@ -18,8 +18,6 @@ return [ Option\Database\DatabaseUserConfigOption::class, Option\Database\DatabasePasswordConfigOption::class, Option\Database\DatabaseUnixSocketConfigOption::class, - Option\Database\DatabaseSqlitePathConfigOption::class, - Option\Database\DatabaseMySqlOptionsConfigOption::class, Option\UrlShortener\ShortDomainHostConfigOption::class, Option\UrlShortener\ShortDomainSchemaConfigOption::class, Option\Visit\VisitsWebhooksConfigOption::class, @@ -27,12 +25,12 @@ return [ Option\Redirect\BaseUrlRedirectConfigOption::class, Option\Redirect\InvalidShortUrlRedirectConfigOption::class, Option\Redirect\Regular404RedirectConfigOption::class, - Option\Visit\CheckVisitsThresholdConfigOption::class, Option\Visit\VisitsThresholdConfigOption::class, Option\BasePathConfigOption::class, Option\Worker\TaskWorkerNumConfigOption::class, Option\Worker\WebWorkerNumConfigOption::class, - Option\RedisConfigOption::class, + Option\Redis\RedisServersConfigOption::class, + Option\Redis\RedisSentinelServiceConfigOption::class, Option\UrlShortener\ShortCodeLengthOption::class, Option\Mercure\EnableMercureConfigOption::class, Option\Mercure\MercurePublicUrlConfigOption::class, diff --git a/config/config.php b/config/config.php index 33c78896..33cf602b 100644 --- a/config/config.php +++ b/config/config.php @@ -12,12 +12,25 @@ use Mezzio\Swoole; use function class_exists; use function Shlinkio\Shlink\Config\env; +use function Shlinkio\Shlink\Core\putNotYetDefinedEnv; use const PHP_SAPI; $isCli = PHP_SAPI === 'cli'; +$isTestEnv = env('APP_ENV') === 'test'; return (new ConfigAggregator\ConfigAggregator([ + ! $isTestEnv + ? new ConfigAggregator\ArrayProvider((new ConfigAggregator\ConfigAggregator([ + new ConfigAggregator\PhpFileProvider('config/params/generated_config.php'), + ], null, [function (array $generatedConfig) { + foreach ($generatedConfig as $envVar => $value) { + putNotYetDefinedEnv($envVar, $value); + } + + return []; + }]))->getMergedConfig()) + : new ConfigAggregator\ArrayProvider([]), Mezzio\ConfigProvider::class, Mezzio\Router\ConfigProvider::class, Mezzio\Router\FastRouteRouter\ConfigProvider::class, @@ -35,9 +48,9 @@ return (new ConfigAggregator\ConfigAggregator([ CLI\ConfigProvider::class, Rest\ConfigProvider::class, new ConfigAggregator\PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'), - env('APP_ENV') === 'test' + $isTestEnv ? new ConfigAggregator\PhpFileProvider('config/test/*.global.php') - : new ConfigAggregator\PhpFileProvider('config/params/generated_config.php'), + : new ConfigAggregator\ArrayProvider([]), ], 'data/cache/app_config.php', [ Core\Config\BasePathPrefixer::class, ]))->getMergedConfig(); diff --git a/module/Core/functions/functions.php b/module/Core/functions/functions.php index 567fde47..870f84c4 100644 --- a/module/Core/functions/functions.php +++ b/module/Core/functions/functions.php @@ -13,9 +13,13 @@ use PUGX\Shortid\Factory as ShortIdFactory; use Shlinkio\Shlink\Common\Util\DateRange; use function Functional\reduce_left; +use function implode; use function is_array; +use function is_scalar; use function print_r; +use function putenv; use function Shlinkio\Shlink\Common\buildDateRange; +use function Shlinkio\Shlink\Config\env; use function sprintf; use function str_repeat; @@ -116,3 +120,18 @@ function fieldWithUtf8Charset(FieldBuilder $field, array $emConfig, string $coll default => $field, }; } + +function putNotYetDefinedEnv(string $key, mixed $value): void +{ + $isArray = is_array($value); + if (!($isArray || is_scalar($value)) || env($key) !== null) { + return; + } + + $normalizedValue = $isArray ? implode(',', $value) : match ($value) { + true => 'true', + false => 'false', + default => $value, + }; + putenv(sprintf('%s=%s', $key, $normalizedValue)); +} diff --git a/module/Core/src/Options/TrackingOptions.php b/module/Core/src/Options/TrackingOptions.php index db74b61b..ba51b8e9 100644 --- a/module/Core/src/Options/TrackingOptions.php +++ b/module/Core/src/Options/TrackingOptions.php @@ -8,7 +8,9 @@ use Laminas\Stdlib\AbstractOptions; use function array_key_exists; use function explode; +use function Functional\map; use function is_array; +use function trim; class TrackingOptions extends AbstractOptions { @@ -108,10 +110,10 @@ class TrackingOptions extends AbstractOptions protected function setDisableTrackingFrom(string|array|null $disableTrackingFrom): void { - if (is_array($disableTrackingFrom)) { - $this->disableTrackingFrom = $disableTrackingFrom; - } else { - $this->disableTrackingFrom = $disableTrackingFrom === null ? [] : explode(',', $disableTrackingFrom); - } + $this->disableTrackingFrom = match (true) { + is_array($disableTrackingFrom) => $disableTrackingFrom, + $disableTrackingFrom === null => [], + default => map(explode(',', $disableTrackingFrom), static fn (string $value) => trim($value)), + }; } }