Make sure to apply wasDefault and prefixed while fetching GL vars by comparing to temple and restitue these if needed

This commit is contained in:
Jérémy Munsch 2024-01-26 12:15:27 +01:00
parent 0c33dfff49
commit 22f2f6033d
No known key found for this signature in database
GPG key ID: 18361AF3BFEC0FEC
2 changed files with 66 additions and 5 deletions

View file

@ -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
*

View file

@ -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<string|boolean|\App\Enums\EnvironmentScope> $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;
}