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:
parent
0c33dfff49
commit
22f2f6033d
2 changed files with 66 additions and 5 deletions
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue