diff --git a/app/Console/Commands/SetGitlabCdVariables.php b/app/Console/Commands/SetGitlabCdVariables.php index 9662e8d..229211d 100644 --- a/app/Console/Commands/SetGitlabCdVariables.php +++ b/app/Console/Commands/SetGitlabCdVariables.php @@ -490,7 +490,11 @@ class SetGitlabCdVariables extends Command $envVar->put('environment_scope', $env_scope); return $envVar->all(); })->filter(fn (array $envVar) => Arr::get($envVar, 'variable_type') === 'env_var') - ->map(fn (array $envVar) => CdEnvVariable::make($envVar)) + ->map(fn (array $envVar) => CdEnvVariable::make( + $envVar, + $this->wasGlCdVarPrefixed($envVar), + $this->wasGlCdVarDefault($envVar) + )) ->groupBy(fn (CdEnvVariable $envVar) => $envVar->key, true) ->map(function (Collection $envVars) { if ( @@ -505,6 +509,54 @@ class SetGitlabCdVariables extends Command })->all()); } + /** + * Is the GL var default ? + * + * @param array $envVar + * @return boolean + */ + private function wasGlCdVarDefault(array $envVar): bool + { + $virtual_var = CdEnvVariable::make($envVar); + /** @var \App\Lib\CdEnvVariable|array<\App\Lib\CdEnvVariable>|null $var */ + $var = Arr::get(self::$defaultEnvVars, $virtual_var->key); + if (!$var) { + return false; + } + if (is_array($var)) { + /** @var \App\Lib\CdEnvVariable|null $var */ + $var = Arr::get($var, $virtual_var->environment_scope->value); + if (!$var) { + return false; + } + } + return $var->isDefault; + } + + /** + * Is the GL var prefixed ? + * + * @param array $envVar + * @return boolean + */ + private function wasGlCdVarPrefixed(array $envVar): bool + { + $virtual_var = CdEnvVariable::make($envVar); + /** @var \App\Lib\CdEnvVariable|array<\App\Lib\CdEnvVariable>|null $var */ + $var = Arr::get(self::$defaultEnvVars, $virtual_var->key); + if (!$var) { + return false; + } + if (is_array($var)) { + /** @var \App\Lib\CdEnvVariable|null $var */ + $var = Arr::get($var, $virtual_var->environment_scope->value); + if (!$var) { + return false; + } + } + return $var->wasPrefixed; + } + /** * Query Gitlab project vars * diff --git a/app/Lib/CdEnvVariable.php b/app/Lib/CdEnvVariable.php index e76c336..44d4426 100644 --- a/app/Lib/CdEnvVariable.php +++ b/app/Lib/CdEnvVariable.php @@ -18,6 +18,7 @@ use Illuminate\Support\Str; * @property-read boolean $raw Char '$' will be treated as the start of a reference * to another variable. * @property-read boolean $isDefault Variable is needed for all projects. + * @property-read boolean $wasPrefixed Variable was prefixed. * @package App\Lib */ class CdEnvVariable implements \Stringable @@ -34,7 +35,7 @@ class CdEnvVariable implements \Stringable * * @var string */ - private static string $prefix = 'LRVL'; + private static string $prefix = '1_LRVL'; /** * The variable is default @@ -57,7 +58,7 @@ class CdEnvVariable implements \Stringable */ private static array $readableProps = [ 'environment_scope', 'key', 'value', 'protected', - 'masked', 'raw', 'isDefault', + 'masked', 'raw', 'isDefault', 'wasPrefixed' ]; /** @@ -90,17 +91,25 @@ class CdEnvVariable implements \Stringable * Make a CdEnvVariable * * @param array $params + * @param boolean $wasPrefixed + * @param boolean $isDefault * @return self */ public static function make( - array $params + array $params, + bool $wasPrefixed = false, + bool $isDefault = false ): self { - $wasPrefixed = Str::startsWith(Arr::get($params, 'key'), self::$k8sPrefix); + $wasPrefixed = $wasPrefixed ?: Str::startsWith(Arr::get($params, 'key'), self::$k8sPrefix); + $isDefault = $isDefault ?: Str::startsWith(Arr::get($params, 'key'), self::$prefix); self::removeVarNamePrefixes($params); $var = new self(...$params); if ($wasPrefixed) { $var->wasPrefixed(); } + if ($isDefault) { + $var->isProjectDefault(); + } return $var; }