diff --git a/CHANGELOG.md b/CHANGELOG.md index fa6ecea..d544879 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org). +## [3.2.1] - 2024-10-17 +### Added +* *Nothing* + +### Changed +* *Nothing* + +### Deprecated +* *Nothing* + +### Removed +* *Nothing* + +### Fixed +* Fix regression where `loadEnvVarsFromConfig` defines env vars with null value as empty instead of skipping them entirely. + + ## [3.2.0] - 2024-10-14 ### Added * Expose new `loadEnvVarsFromConfig` function to use instead of `EnvVarLoaderProvider`. diff --git a/functions/functions.php b/functions/functions.php index c853561..3214754 100644 --- a/functions/functions.php +++ b/functions/functions.php @@ -48,11 +48,11 @@ function parseEnvVar(string $value): string|int|bool|null /** * @param string|string[]|int|int[]|bool|null $value */ -function formatEnvVarValue(string|int|bool|array|null $value): string +function formatEnvVarValueOrNull(string|int|bool|array|null $value): string|null { $isArray = is_array($value); if (! $isArray && ! is_scalar($value)) { - return ''; + return null; } return $isArray ? implode(',', $value) : match ($value) { @@ -62,6 +62,14 @@ function formatEnvVarValue(string|int|bool|array|null $value): string }; } +/** + * @param string|string[]|int|int[]|bool|null $value + */ +function formatEnvVarValue(string|int|bool|array|null $value): string +{ + return formatEnvVarValueOrNull($value) ?? ''; +} + /** * Loads config from $configPath, then puts all its values as env vars if they are not yet defined */ @@ -83,7 +91,11 @@ function putNotYetDefinedEnv(string $key, mixed $value): void return; } - $formattedValue = formatEnvVarValue($value); + $formattedValue = formatEnvVarValueOrNull($value); + if ($formattedValue === null) { + return; + } + putenv(sprintf('%s=%s', $key, $formattedValue)); } diff --git a/test/Functions/FormatEnvVarValueTest.php b/test/Functions/FormatEnvVarValueTest.php index 8fe74cc..fe435f3 100644 --- a/test/Functions/FormatEnvVarValueTest.php +++ b/test/Functions/FormatEnvVarValueTest.php @@ -9,6 +9,7 @@ use PHPUnit\Framework\TestCase; use function Shlinkio\Shlink\Config\formatEnvVarValue; +use function Shlinkio\Shlink\Config\formatEnvVarValueOrNull; class FormatEnvVarValueTest extends TestCase { @@ -23,5 +24,6 @@ class FormatEnvVarValueTest extends TestCase public function valuesAreFormattedAsExpected(string|int|bool|array|null $value, string $expectedResult): void { self::assertEquals($expectedResult, formatEnvVarValue($value)); + self::assertEquals($value === null ? null : $expectedResult, formatEnvVarValueOrNull($value)); } } diff --git a/test/Functions/LoadEnvVarsFromConfigTest.php b/test/Functions/LoadEnvVarsFromConfigTest.php index 94ac357..1eb9e77 100644 --- a/test/Functions/LoadEnvVarsFromConfigTest.php +++ b/test/Functions/LoadEnvVarsFromConfigTest.php @@ -53,6 +53,6 @@ public function putsExpectedEnvVars(): void self::assertFalse(getenv('foo2')); self::assertEquals('3', getenv('NUMBER')); self::assertEquals(3, env('NUMBER')); - self::assertEquals('', env('NULL')); + self::assertNull(env('NULL')); } }