From 76f7cd08ee8526025e08f84b48584a79a6780591 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Mon, 18 Mar 2024 11:36:36 +0100 Subject: [PATCH] fix: only escape envs after v239+ --- app/Jobs/ApplicationDeploymentJob.php | 31 +++++++---------- app/Models/EnvironmentVariable.php | 11 ++++-- .../2024_03_18_101440_add_version_of_envs.php | 34 +++++++++++++++++++ 3 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 database/migrations/2024_03_18_101440_add_version_of_envs.php diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index b31239393..a16d39893 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -1360,45 +1360,40 @@ private function generate_environment_variables($ports) if ($this->pull_request_id === 0) { foreach ($this->application->runtime_environment_variables as $env) { // This is necessary because we have to escape the value of the environment variable - // but only if the environment variable is created after the 15th of March 2024 + // but only if the environment variable is created after 4.0.0-beta.240 // when I implemented the escaping feature. // Old environment variables are not escaped, because it could break the application // as the application could expect the unescaped value. - - // Yes, I worked on March 15th, 2024, and I implemented this feature. - // It was a national holiday in Hungary. - - // Welcome to the life of a solopreneur. - if ($env->created_at > '2024-03-15T20:42:42.000000Z') { - $real_value = escapeEnvVariables($env->real_value); - } else { + if ($env->version === '4.0.0-beta.239') { $real_value = $env->value; + } else { + $real_value = escapeEnvVariables($env->real_value); } $environment_variables->push("$env->key=$real_value"); } foreach ($this->application->nixpacks_environment_variables as $env) { - if ($env->created_at > '2024-03-15T20:42:42.000000Z') { - $real_value = escapeEnvVariables($env->real_value); - } else { + if ($env->version === '4.0.0-beta.239') { $real_value = $env->value; + } else { + $real_value = escapeEnvVariables($env->real_value); } $environment_variables->push("$env->key=$real_value"); } } else { foreach ($this->application->runtime_environment_variables_preview as $env) { - if ($env->created_at > '2024-03-15T20:42:42.000000Z') { - $real_value = escapeEnvVariables($env->real_value); - } else { + if ($env->version === '4.0.0-beta.239') { $real_value = $env->value; + } else { + $real_value = escapeEnvVariables($env->real_value); } $environment_variables->push("$env->key=$real_value"); } foreach ($this->application->nixpacks_environment_variables_preview as $env) { - if ($env->created_at > '2024-03-15T20:42:42.000000Z') { - $real_value = escapeEnvVariables($env->real_value); - } else { + if ($env->version === '4.0.0-beta.239') { $real_value = $env->value; + } else { + $real_value = escapeEnvVariables($env->real_value); } $environment_variables->push("$env->key=$real_value"); } diff --git a/app/Models/EnvironmentVariable.php b/app/Models/EnvironmentVariable.php index 41fe40c58..532b2eba7 100644 --- a/app/Models/EnvironmentVariable.php +++ b/app/Models/EnvironmentVariable.php @@ -14,12 +14,15 @@ class EnvironmentVariable extends Model 'key' => 'string', 'value' => 'encrypted', 'is_build_time' => 'boolean', + 'is_multiline' => 'boolean', + 'is_preview' => 'boolean', + 'version' => 'string' ]; protected $appends = ['real_value', 'is_shared']; protected static function booted() { - static::created(function ($environment_variable) { + static::created(function (EnvironmentVariable $environment_variable) { if ($environment_variable->application_id && !$environment_variable->is_preview) { $found = ModelsEnvironmentVariable::where('key', $environment_variable->key)->where('application_id', $environment_variable->application_id)->where('is_preview', true)->first(); $application = Application::find($environment_variable->application_id); @@ -31,11 +34,15 @@ protected static function booted() 'key' => $environment_variable->key, 'value' => $environment_variable->value, 'is_build_time' => $environment_variable->is_build_time, + 'is_multiline' => $environment_variable->is_multiline, 'application_id' => $environment_variable->application_id, - 'is_preview' => true, + 'is_preview' => true ]); } } + $environment_variable->update([ + 'version' => config('version') + ]); }); } public function service() diff --git a/database/migrations/2024_03_18_101440_add_version_of_envs.php b/database/migrations/2024_03_18_101440_add_version_of_envs.php new file mode 100644 index 000000000..9973f88bd --- /dev/null +++ b/database/migrations/2024_03_18_101440_add_version_of_envs.php @@ -0,0 +1,34 @@ +string('version')->default('4.0.0-beta.239'); + }); + Schema::table('shared_environment_variables', function (Blueprint $table) { + $table->string('version')->default('4.0.0-beta.239'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('environment_variables', function (Blueprint $table) { + $table->dropColumn('version'); + }); + Schema::table('shared_environment_variables', function (Blueprint $table) { + $table->dropColumn('version'); + }); + } +};