refactor(ApplicationDeploymentJob): streamline environment variable handling by introducing generate_coolify_env_variables method and consolidating logic for pull request and main branch scenarios
This commit is contained in:
@@ -899,100 +899,12 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
$sorted_environment_variables_preview = $this->application->environment_variables_preview->sortBy('id');
|
$sorted_environment_variables_preview = $this->application->environment_variables_preview->sortBy('id');
|
||||||
}
|
}
|
||||||
$ports = $this->application->main_port();
|
$ports = $this->application->main_port();
|
||||||
if ($this->pull_request_id !== 0) {
|
$coolify_envs = $this->generate_coolify_env_variables();
|
||||||
$this->env_filename = ".env-pr-$this->pull_request_id";
|
$coolify_envs->each(function ($item, $key) use ($envs) {
|
||||||
// Add SOURCE_COMMIT if not exists
|
$envs->push($key.'='.$item);
|
||||||
if ($this->application->environment_variables_preview->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
});
|
||||||
if (! is_null($this->commit)) {
|
if ($this->pull_request_id === 0) {
|
||||||
$envs->push("SOURCE_COMMIT={$this->commit}");
|
|
||||||
} else {
|
|
||||||
$envs->push('SOURCE_COMMIT=unknown');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_FQDN={$this->preview->fqdn}");
|
|
||||||
$envs->push("COOLIFY_DOMAIN_URL={$this->preview->fqdn}");
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_URL')->isEmpty()) {
|
|
||||||
$url = str($this->preview->fqdn)->replace('http://', '')->replace('https://', '');
|
|
||||||
$envs->push("COOLIFY_URL={$url}");
|
|
||||||
$envs->push("COOLIFY_DOMAIN_FQDN={$url}");
|
|
||||||
}
|
|
||||||
if ($this->application->build_pack !== 'dockercompose' || $this->application->compose_parsing_version === '1' || $this->application->compose_parsing_version === '2') {
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_BRANCH=\"{$local_branch}\"");
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_RESOURCE_UUID')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_RESOURCE_UUID={$this->application->uuid}");
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_CONTAINER_NAME')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_CONTAINER_NAME={$this->container_name}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
add_coolify_default_environment_variables($this->application, $envs, $this->application->environment_variables_preview);
|
|
||||||
|
|
||||||
foreach ($sorted_environment_variables_preview as $env) {
|
|
||||||
$real_value = $env->real_value;
|
|
||||||
if ($env->version === '4.0.0-beta.239') {
|
|
||||||
$real_value = $env->real_value;
|
|
||||||
} else {
|
|
||||||
if ($env->is_literal || $env->is_multiline) {
|
|
||||||
$real_value = '\''.$real_value.'\'';
|
|
||||||
} else {
|
|
||||||
$real_value = escapeEnvVariables($env->real_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$envs->push($env->key.'='.$real_value);
|
|
||||||
}
|
|
||||||
// Add PORT if not exists, use the first port as default
|
|
||||||
if ($this->build_pack !== 'dockercompose') {
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'PORT')->isEmpty()) {
|
|
||||||
$envs->push("PORT={$ports[0]}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Add HOST if not exists
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'HOST')->isEmpty()) {
|
|
||||||
$envs->push('HOST=0.0.0.0');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$this->env_filename = '.env';
|
$this->env_filename = '.env';
|
||||||
// Add SOURCE_COMMIT if not exists
|
|
||||||
if ($this->application->environment_variables->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
|
||||||
if (! is_null($this->commit)) {
|
|
||||||
$envs->push("SOURCE_COMMIT={$this->commit}");
|
|
||||||
} else {
|
|
||||||
$envs->push('SOURCE_COMMIT=unknown');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
|
||||||
if ((int) $this->application->compose_parsing_version >= 3) {
|
|
||||||
$envs->push("COOLIFY_URL={$this->application->fqdn}");
|
|
||||||
} else {
|
|
||||||
$envs->push("COOLIFY_FQDN={$this->application->fqdn}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables->where('key', 'COOLIFY_URL')->isEmpty()) {
|
|
||||||
$url = str($this->application->fqdn)->replace('http://', '')->replace('https://', '');
|
|
||||||
if ((int) $this->application->compose_parsing_version >= 3) {
|
|
||||||
$envs->push("COOLIFY_FQDN={$url}");
|
|
||||||
} else {
|
|
||||||
$envs->push("COOLIFY_URL={$url}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($this->application->build_pack !== 'dockercompose' || $this->application->compose_parsing_version === '1' || $this->application->compose_parsing_version === '2') {
|
|
||||||
if ($this->application->environment_variables->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_BRANCH=\"{$local_branch}\"");
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables->where('key', 'COOLIFY_RESOURCE_UUID')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_RESOURCE_UUID={$this->application->uuid}");
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables->where('key', 'COOLIFY_CONTAINER_NAME')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_CONTAINER_NAME={$this->container_name}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
add_coolify_default_environment_variables($this->application, $envs, $this->application->environment_variables);
|
|
||||||
|
|
||||||
foreach ($sorted_environment_variables as $env) {
|
foreach ($sorted_environment_variables as $env) {
|
||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
@@ -1017,6 +929,32 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
if ($this->application->environment_variables->where('key', 'HOST')->isEmpty()) {
|
if ($this->application->environment_variables->where('key', 'HOST')->isEmpty()) {
|
||||||
$envs->push('HOST=0.0.0.0');
|
$envs->push('HOST=0.0.0.0');
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$this->env_filename = ".env-pr-$this->pull_request_id";
|
||||||
|
foreach ($sorted_environment_variables_preview as $env) {
|
||||||
|
$real_value = $env->real_value;
|
||||||
|
if ($env->version === '4.0.0-beta.239') {
|
||||||
|
$real_value = $env->real_value;
|
||||||
|
} else {
|
||||||
|
if ($env->is_literal || $env->is_multiline) {
|
||||||
|
$real_value = '\''.$real_value.'\'';
|
||||||
|
} else {
|
||||||
|
$real_value = escapeEnvVariables($env->real_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$envs->push($env->key.'='.$real_value);
|
||||||
|
}
|
||||||
|
// Add PORT if not exists, use the first port as default
|
||||||
|
if ($this->build_pack !== 'dockercompose') {
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'PORT')->isEmpty()) {
|
||||||
|
$envs->push("PORT={$ports[0]}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Add HOST if not exists
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'HOST')->isEmpty()) {
|
||||||
|
$envs->push('HOST=0.0.0.0');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ($envs->isEmpty()) {
|
if ($envs->isEmpty()) {
|
||||||
$this->env_filename = null;
|
$this->env_filename = null;
|
||||||
@@ -1625,20 +1563,128 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
$this->env_nixpacks_args = $this->env_nixpacks_args->implode(' ');
|
$this->env_nixpacks_args = $this->env_nixpacks_args->implode(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function generate_coolify_env_variables(): Collection
|
||||||
|
{
|
||||||
|
$coolify_envs = collect([]);
|
||||||
|
$local_branch = $this->branch;
|
||||||
|
if ($this->pull_request_id !== 0) {
|
||||||
|
// Add SOURCE_COMMIT if not exists
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
||||||
|
if (! is_null($this->commit)) {
|
||||||
|
$coolify_envs->put('SOURCE_COMMIT', $this->commit);
|
||||||
|
} else {
|
||||||
|
$coolify_envs->put('SOURCE_COMMIT', 'unknown');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_FQDN', $this->preview->fqdn);
|
||||||
|
$coolify_envs->put('COOLIFY_DOMAIN_URL', $this->preview->fqdn);
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_URL')->isEmpty()) {
|
||||||
|
$url = str($this->preview->fqdn)->replace('http://', '')->replace('https://', '');
|
||||||
|
$coolify_envs->put('COOLIFY_URL', $url);
|
||||||
|
$coolify_envs->put('COOLIFY_DOMAIN_FQDN', $url);
|
||||||
|
}
|
||||||
|
if ($this->application->build_pack !== 'dockercompose' || $this->application->compose_parsing_version === '1' || $this->application->compose_parsing_version === '2') {
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_BRANCH', $local_branch);
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_RESOURCE_UUID')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_RESOURCE_UUID', $this->application->uuid);
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_CONTAINER_NAME')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_CONTAINER_NAME', $this->container_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_coolify_default_environment_variables($this->application, $coolify_envs, $this->application->environment_variables_preview);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Add SOURCE_COMMIT if not exists
|
||||||
|
if ($this->application->environment_variables->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
||||||
|
if (! is_null($this->commit)) {
|
||||||
|
$coolify_envs->put('SOURCE_COMMIT', $this->commit);
|
||||||
|
} else {
|
||||||
|
$coolify_envs->put('SOURCE_COMMIT', 'unknown');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
||||||
|
if ((int) $this->application->compose_parsing_version >= 3) {
|
||||||
|
$coolify_envs->put('COOLIFY_URL', $this->application->fqdn);
|
||||||
|
} else {
|
||||||
|
$coolify_envs->put('COOLIFY_FQDN', $this->application->fqdn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables->where('key', 'COOLIFY_URL')->isEmpty()) {
|
||||||
|
$url = str($this->application->fqdn)->replace('http://', '')->replace('https://', '');
|
||||||
|
if ((int) $this->application->compose_parsing_version >= 3) {
|
||||||
|
$coolify_envs->put('COOLIFY_FQDN', $url);
|
||||||
|
} else {
|
||||||
|
$coolify_envs->put('COOLIFY_URL', $url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($this->application->build_pack !== 'dockercompose' || $this->application->compose_parsing_version === '1' || $this->application->compose_parsing_version === '2') {
|
||||||
|
if ($this->application->environment_variables->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_BRANCH', $local_branch);
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables->where('key', 'COOLIFY_RESOURCE_UUID')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_RESOURCE_UUID', $this->application->uuid);
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables->where('key', 'COOLIFY_CONTAINER_NAME')->isEmpty()) {
|
||||||
|
$coolify_envs->put('COOLIFY_CONTAINER_NAME', $this->container_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_coolify_default_environment_variables($this->application, $coolify_envs, $this->application->environment_variables);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $coolify_envs;
|
||||||
|
}
|
||||||
|
|
||||||
private function generate_env_variables()
|
private function generate_env_variables()
|
||||||
{
|
{
|
||||||
$this->env_args = collect([]);
|
$this->env_args = collect([]);
|
||||||
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
||||||
|
$coolify_envs = $this->generate_coolify_env_variables();
|
||||||
if ($this->pull_request_id === 0) {
|
if ($this->pull_request_id === 0) {
|
||||||
foreach ($this->application->build_environment_variables as $env) {
|
foreach ($this->application->build_environment_variables as $env) {
|
||||||
if (! is_null($env->real_value)) {
|
if (! is_null($env->real_value)) {
|
||||||
$this->env_args->put($env->key, $env->real_value);
|
$this->env_args->put($env->key, $env->real_value);
|
||||||
|
if (str($env->real_value)->startsWith('$')) {
|
||||||
|
$variable_key = str($env->real_value)->after('$');
|
||||||
|
if ($variable_key->startsWith('COOLIFY_')) {
|
||||||
|
$variable = $coolify_envs->get($variable_key->value());
|
||||||
|
if (filled($variable)) {
|
||||||
|
$this->env_args->prepend($variable, $variable_key->value());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$variable = $this->application->environment_variables()->where('key', $variable_key)->first();
|
||||||
|
if ($variable) {
|
||||||
|
$this->env_args->prepend($variable->real_value, $env->key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($this->application->build_environment_variables_preview as $env) {
|
foreach ($this->application->build_environment_variables_preview as $env) {
|
||||||
if (! is_null($env->real_value)) {
|
if (! is_null($env->real_value)) {
|
||||||
$this->env_args->put($env->key, $env->real_value);
|
$this->env_args->put($env->key, $env->real_value);
|
||||||
|
if (str($env->real_value)->startsWith('$')) {
|
||||||
|
$variable_key = str($env->real_value)->after('$');
|
||||||
|
if ($variable_key->startsWith('COOLIFY_')) {
|
||||||
|
$variable = $coolify_envs->get($variable_key->value());
|
||||||
|
if (filled($variable)) {
|
||||||
|
$this->env_args->prepend($variable, $variable_key->value());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$variable = $this->application->environment_variables_preview()->where('key', $variable_key)->first();
|
||||||
|
if ($variable) {
|
||||||
|
$this->env_args->prepend($variable->real_value, $env->key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user