feat: sort envs alphabetically and creation date
This commit is contained in:
parent
e9d2dbcc92
commit
431cc796d8
@ -713,10 +713,36 @@ private function check_image_locally_or_remotely()
|
|||||||
private function save_environment_variables()
|
private function save_environment_variables()
|
||||||
{
|
{
|
||||||
$envs = collect([]);
|
$envs = collect([]);
|
||||||
|
$sort = $this->application->settings->is_env_sorting_enabled;
|
||||||
|
if ($sort) {
|
||||||
|
$sorted_environment_variables = $this->application->environment_variables->sortBy('key');
|
||||||
|
$sorted_environment_variables_preview = $this->application->environment_variables_preview->sortBy('key');
|
||||||
|
} else {
|
||||||
|
$sorted_environment_variables = $this->application->environment_variables->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) {
|
if ($this->pull_request_id !== 0) {
|
||||||
$this->env_filename = ".env-pr-$this->pull_request_id";
|
$this->env_filename = ".env-pr-$this->pull_request_id";
|
||||||
foreach ($this->application->environment_variables_preview as $env) {
|
// Add SOURCE_COMMIT if not exists
|
||||||
|
if ($this->application->environment_variables_preview->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_preview->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
||||||
|
$envs->push("COOLIFY_FQDN={$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}");
|
||||||
|
}
|
||||||
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
||||||
|
$envs->push("COOLIFY_BRANCH={$this->application->git_branch}");
|
||||||
|
}
|
||||||
|
foreach ($sorted_environment_variables_preview as $env) {
|
||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
if ($env->version === '4.0.0-beta.239') {
|
if ($env->version === '4.0.0-beta.239') {
|
||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
@ -737,30 +763,27 @@ private function save_environment_variables()
|
|||||||
if ($this->application->environment_variables_preview->where('key', 'HOST')->isEmpty()) {
|
if ($this->application->environment_variables_preview->where('key', 'HOST')->isEmpty()) {
|
||||||
$envs->push("HOST=0.0.0.0");
|
$envs->push("HOST=0.0.0.0");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
$this->env_filename = ".env";
|
||||||
// Add SOURCE_COMMIT if not exists
|
// Add SOURCE_COMMIT if not exists
|
||||||
if ($this->application->environment_variables_preview->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
if ($this->application->environment_variables->where('key', 'SOURCE_COMMIT')->isEmpty()) {
|
||||||
if (!is_null($this->commit)) {
|
if (!is_null($this->commit)) {
|
||||||
$envs->push("SOURCE_COMMIT={$this->commit}");
|
$envs->push("SOURCE_COMMIT={$this->commit}");
|
||||||
} else {
|
} else {
|
||||||
$envs->push("SOURCE_COMMIT=unknown");
|
$envs->push("SOURCE_COMMIT=unknown");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
if ($this->application->environment_variables->where('key', 'COOLIFY_FQDN')->isEmpty()) {
|
||||||
$envs->push("COOLIFY_FQDN={$this->preview->fqdn}");
|
$envs->push("COOLIFY_FQDN={$this->application->fqdn}");
|
||||||
}
|
}
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_URL')->isEmpty()) {
|
if ($this->application->environment_variables->where('key', 'COOLIFY_URL')->isEmpty()) {
|
||||||
$url = str($this->preview->fqdn)->replace('http://', '')->replace('https://', '');
|
$url = str($this->application->fqdn)->replace('http://', '')->replace('https://', '');
|
||||||
$envs->push("COOLIFY_URL={$url}");
|
$envs->push("COOLIFY_URL={$url}");
|
||||||
}
|
}
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
||||||
$envs->push("COOLIFY_BRANCH={$this->application->git_branch}");
|
$envs->push("COOLIFY_BRANCH={$this->application->git_branch}");
|
||||||
}
|
}
|
||||||
$envs = $envs->sort(function ($a, $b) {
|
foreach ($sorted_environment_variables as $env) {
|
||||||
return strpos($a, '$') === false ? -1 : 1;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
$this->env_filename = ".env";
|
|
||||||
foreach ($this->application->environment_variables as $env) {
|
|
||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
if ($env->version === '4.0.0-beta.239') {
|
if ($env->version === '4.0.0-beta.239') {
|
||||||
$real_value = $env->real_value;
|
$real_value = $env->real_value;
|
||||||
@ -781,27 +804,6 @@ private function save_environment_variables()
|
|||||||
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");
|
||||||
}
|
}
|
||||||
// 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()) {
|
|
||||||
$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://', '');
|
|
||||||
$envs->push("COOLIFY_URL={$url}");
|
|
||||||
}
|
|
||||||
if ($this->application->environment_variables_preview->where('key', 'COOLIFY_BRANCH')->isEmpty()) {
|
|
||||||
$envs->push("COOLIFY_BRANCH={$this->application->git_branch}");
|
|
||||||
}
|
|
||||||
$envs = $envs->sort(function ($a, $b) {
|
|
||||||
return strpos($a, '$') === false ? -1 : 1;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($envs->isEmpty()) {
|
if ($envs->isEmpty()) {
|
||||||
@ -1272,6 +1274,7 @@ private function generate_nixpacks_env_variables()
|
|||||||
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);
|
||||||
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)) {
|
||||||
@ -1285,7 +1288,6 @@ private function generate_env_variables()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->env_args->put('SOURCE_COMMIT', $this->commit);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function generate_compose_file()
|
private function generate_compose_file()
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
use App\Models\EnvironmentVariable;
|
use App\Models\EnvironmentVariable;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
use Visus\Cuid2\Cuid2;
|
use Visus\Cuid2\Cuid2;
|
||||||
use Illuminate\Support\Str;
|
|
||||||
|
|
||||||
class All extends Component
|
class All extends Component
|
||||||
{
|
{
|
||||||
public $resource;
|
public $resource;
|
||||||
|
public string $resourceClass;
|
||||||
public bool $showPreview = false;
|
public bool $showPreview = false;
|
||||||
public ?string $modalId = null;
|
public ?string $modalId = null;
|
||||||
public ?string $variables = null;
|
public ?string $variables = null;
|
||||||
@ -19,17 +19,42 @@ class All extends Component
|
|||||||
'refreshEnvs',
|
'refreshEnvs',
|
||||||
'saveKey' => 'submit',
|
'saveKey' => 'submit',
|
||||||
];
|
];
|
||||||
|
protected $rules = [
|
||||||
|
'resource.settings.is_env_sorting_enabled' => 'required|boolean',
|
||||||
|
];
|
||||||
|
|
||||||
public function mount()
|
public function mount()
|
||||||
{
|
{
|
||||||
$resourceClass = get_class($this->resource);
|
$this->resourceClass = get_class($this->resource);
|
||||||
$resourceWithPreviews = ['App\Models\Application'];
|
$resourceWithPreviews = ['App\Models\Application'];
|
||||||
$simpleDockerfile = !is_null(data_get($this->resource, 'dockerfile'));
|
$simpleDockerfile = !is_null(data_get($this->resource, 'dockerfile'));
|
||||||
if (Str::of($resourceClass)->contains($resourceWithPreviews) && !$simpleDockerfile) {
|
if (str($this->resourceClass)->contains($resourceWithPreviews) && !$simpleDockerfile) {
|
||||||
$this->showPreview = true;
|
$this->showPreview = true;
|
||||||
}
|
}
|
||||||
$this->modalId = new Cuid2(7);
|
$this->modalId = new Cuid2(7);
|
||||||
|
$this->sortMe();
|
||||||
$this->getDevView();
|
$this->getDevView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function sortMe()
|
||||||
|
{
|
||||||
|
if ($this->resourceClass === 'App\Models\Application' && $this->resource->settings->is_env_sorting_enabled) {
|
||||||
|
$this->resource->environment_variables = $this->resource->environment_variables->sortBy('key');
|
||||||
|
$this->resource->environment_variables_preview = $this->resource->environment_variables_preview->sortBy('key');
|
||||||
|
} else {
|
||||||
|
$this->resource->environment_variables = $this->resource->environment_variables->sortBy('id');
|
||||||
|
$this->resource->environment_variables_preview = $this->resource->environment_variables_preview->sortBy('id');
|
||||||
|
}
|
||||||
|
$this->getDevView();
|
||||||
|
}
|
||||||
|
public function instantSave()
|
||||||
|
{
|
||||||
|
if ($this->resourceClass === 'App\Models\Application') {
|
||||||
|
$this->resource->settings->save();
|
||||||
|
$this->dispatch('success', 'Environment variable settings updated.');
|
||||||
|
$this->sortMe();
|
||||||
|
}
|
||||||
|
}
|
||||||
public function getDevView()
|
public function getDevView()
|
||||||
{
|
{
|
||||||
$this->variables = $this->resource->environment_variables->map(function ($item) {
|
$this->variables = $this->resource->environment_variables->map(function ($item) {
|
||||||
@ -40,7 +65,7 @@ public function getDevView()
|
|||||||
return "$item->key=(multiline, edit in normal view)";
|
return "$item->key=(multiline, edit in normal view)";
|
||||||
}
|
}
|
||||||
return "$item->key=$item->value";
|
return "$item->key=$item->value";
|
||||||
})->sort()->join('
|
})->join('
|
||||||
');
|
');
|
||||||
if ($this->showPreview) {
|
if ($this->showPreview) {
|
||||||
$this->variablesPreview = $this->resource->environment_variables_preview->map(function ($item) {
|
$this->variablesPreview = $this->resource->environment_variables_preview->map(function ($item) {
|
||||||
@ -51,13 +76,18 @@ public function getDevView()
|
|||||||
return "$item->key=(multiline, edit in normal view)";
|
return "$item->key=(multiline, edit in normal view)";
|
||||||
}
|
}
|
||||||
return "$item->key=$item->value";
|
return "$item->key=$item->value";
|
||||||
})->sort()->join('
|
})->join('
|
||||||
');
|
');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public function switch()
|
public function switch()
|
||||||
{
|
{
|
||||||
$this->view = $this->view === 'normal' ? 'dev' : 'normal';
|
if ($this->view === 'normal') {
|
||||||
|
$this->view = 'dev';
|
||||||
|
} else {
|
||||||
|
$this->view = 'normal';
|
||||||
|
}
|
||||||
|
$this->sortMe();
|
||||||
}
|
}
|
||||||
public function saveVariables($isPreview)
|
public function saveVariables($isPreview)
|
||||||
{
|
{
|
||||||
@ -66,6 +96,7 @@ public function saveVariables($isPreview)
|
|||||||
$this->resource->environment_variables_preview()->whereNotIn('key', array_keys($variables))->delete();
|
$this->resource->environment_variables_preview()->whereNotIn('key', array_keys($variables))->delete();
|
||||||
} else {
|
} else {
|
||||||
$variables = parseEnvFormatToArray($this->variables);
|
$variables = parseEnvFormatToArray($this->variables);
|
||||||
|
ray($variables, $this->variables);
|
||||||
$this->resource->environment_variables()->whereNotIn('key', array_keys($variables))->delete();
|
$this->resource->environment_variables()->whereNotIn('key', array_keys($variables))->delete();
|
||||||
}
|
}
|
||||||
foreach ($variables as $key => $variable) {
|
foreach ($variables as $key => $variable) {
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('application_settings', function (Blueprint $table) {
|
||||||
|
$table->boolean('is_env_sorting_enabled')->default(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('application_settings', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('is_env_sorting_enabled');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -11,12 +11,18 @@
|
|||||||
wire:click='switch'>{{ $view === 'normal' ? 'Developer view' : 'Normal view' }}</x-forms.button>
|
wire:click='switch'>{{ $view === 'normal' ? 'Developer view' : 'Normal view' }}</x-forms.button>
|
||||||
</div>
|
</div>
|
||||||
<div>Environment variables (secrets) for this resource.</div>
|
<div>Environment variables (secrets) for this resource.</div>
|
||||||
|
@if ($this->resourceClass === 'App\Models\Application')
|
||||||
|
<div class="w-64 pt-2">
|
||||||
|
<x-forms.checkbox id="resource.settings.is_env_sorting_enabled" label="Sort alphabetically"
|
||||||
|
helper="Turn this off if one environment is dependent on an other. It will be sorted by creation order." instantSave></x-forms.checkbox>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
@if ($resource->type() === 'service' || $resource?->build_pack === 'dockercompose')
|
@if ($resource->type() === 'service' || $resource?->build_pack === 'dockercompose')
|
||||||
<div class="pt-4 dark:text-warning text-coollabs">Hardcoded variables are not shown here.</div>
|
<div class="pt-4 dark:text-warning text-coollabs">Hardcoded variables are not shown here.</div>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
@if ($view === 'normal')
|
@if ($view === 'normal')
|
||||||
@forelse ($resource->environment_variables->sort()->sortBy('key') as $env)
|
@forelse ($resource->environment_variables as $env)
|
||||||
<livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}"
|
<livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}"
|
||||||
:env="$env" :type="$resource->type()" />
|
:env="$env" :type="$resource->type()" />
|
||||||
@empty
|
@empty
|
||||||
@ -27,7 +33,7 @@
|
|||||||
<h3>Preview Deployments</h3>
|
<h3>Preview Deployments</h3>
|
||||||
<div>Environment (secrets) variables for Preview Deployments.</div>
|
<div>Environment (secrets) variables for Preview Deployments.</div>
|
||||||
</div>
|
</div>
|
||||||
@foreach ($resource->environment_variables_preview->sort()->sortBy('key') as $env)
|
@foreach ($resource->environment_variables_preview as $env)
|
||||||
<livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}"
|
<livewire:project.shared.environment-variable.show wire:key="environment-{{ $env->id }}"
|
||||||
:env="$env" :type="$resource->type()" />
|
:env="$env" :type="$resource->type()" />
|
||||||
@endforeach
|
@endforeach
|
||||||
|
Loading…
Reference in New Issue
Block a user