From 4c77504b5ef80ca8f955ceffb006031d94f3310f Mon Sep 17 00:00:00 2001 From: vuguul <88252044+vuguul@users.noreply.github.com> Date: Fri, 5 Jun 2026 14:29:29 -0600 Subject: [PATCH 1/8] fix(service): limit Grafana extra fields to Grafana images --- app/Models/Service.php | 11 +++++- tests/Feature/ServiceExtraFieldsTest.php | 47 ++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 tests/Feature/ServiceExtraFieldsTest.php diff --git a/app/Models/Service.php b/app/Models/Service.php index cc8074b74..aba4c6e56 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -626,7 +626,7 @@ public function extraFields() } $fields->put('Unleash', $data->toArray()); break; - case $image->contains('grafana'): + case $this->isGrafanaImage($image->toString()): $data = collect([]); $admin_password = $this->environment_variables()->where('key', 'SERVICE_PASSWORD_GRAFANA')->first(); $data = $data->merge([ @@ -1380,6 +1380,15 @@ public function extraFields() return $fields; } + private function isGrafanaImage(string $image): bool + { + return in_array($image, [ + 'grafana/grafana', + 'grafana/grafana-oss', + 'grafana/grafana-enterprise', + ], true); + } + public function saveExtraFields($fields) { foreach ($fields as $field) { diff --git a/tests/Feature/ServiceExtraFieldsTest.php b/tests/Feature/ServiceExtraFieldsTest.php new file mode 100644 index 000000000..c90a76bc6 --- /dev/null +++ b/tests/Feature/ServiceExtraFieldsTest.php @@ -0,0 +1,47 @@ +create(); + $project = Project::factory()->create(['team_id' => $team->id]); + $environment = Environment::factory()->create(['project_id' => $project->id]); + $server = Server::factory()->create(); + $destination = StandaloneDocker::factory()->create(['server_id' => $server->id]); + + $service = Service::factory()->create([ + 'environment_id' => $environment->id, + 'server_id' => $server->id, + 'destination_id' => $destination->id, + 'destination_type' => StandaloneDocker::class, + ]); + + $service->applications()->create([ + 'name' => 'app', + 'image' => $image, + ]); + + return $service; +} + +it('only adds Grafana extra fields for Grafana server images', function (string $image, bool $shouldHaveGrafanaFields) { + $fields = serviceExtraFieldsTestServiceWithApplicationImage($image)->extraFields(); + + expect($fields->has('Grafana'))->toBe($shouldHaveGrafanaFields); +})->with([ + 'grafana oss' => ['grafana/grafana-oss:latest', true], + 'grafana enterprise' => ['grafana/grafana-enterprise:latest', true], + 'grafana default' => ['grafana/grafana:latest', true], + 'loki' => ['grafana/loki:latest', false], + 'promtail' => ['grafana/promtail:latest', false], + 'tempo' => ['grafana/tempo:latest', false], +]); From ee74889f190aee43e66c9def76a475b9ba073f64 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:45:06 +0200 Subject: [PATCH 2/8] feat(resources): show mobile action buttons --- .../project/application/heading.blade.php | 73 ++++++++++------ .../project/database/heading.blade.php | 29 ++++--- .../project/service/heading.blade.php | 83 ++++++++++++++----- tests/Feature/MobileResourceMenuTest.php | 17 +++- 4 files changed, 141 insertions(+), 61 deletions(-) diff --git a/resources/views/livewire/project/application/heading.blade.php b/resources/views/livewire/project/application/heading.blade.php index 17f077c57..fd37d869a 100644 --- a/resources/views/livewire/project/application/heading.blade.php +++ b/resources/views/livewire/project/application/heading.blade.php @@ -282,33 +282,54 @@ @endif - @if (!($application->build_pack === 'dockercompose' && is_null($application->docker_compose_raw))) - - @if (!str($application->status)->startsWith('exited')) - @if (!$application->destination->server->isSwarm()) - - @endif - @if ($application->build_pack !== 'dockercompose') - @if ($application->destination->server->isSwarm()) - - @else - - @endif - @endif - - @else - - @endif - @if (!$application->destination->server->isSwarm()) - @if ($application->status === 'running') - - @else - - @endif - @endif - - @endif + @if (!($application->build_pack === 'dockercompose' && is_null($application->docker_compose_raw))) +
+ @if (!str($application->status)->startsWith('exited')) + @if (!$application->destination->server->isSwarm()) + + @endif + @if ($application->build_pack !== 'dockercompose') + @if ($application->destination->server->isSwarm()) + + @else + + @endif + @endif + + @else + + @endif + @if (!$application->destination->server->isSwarm()) + @if ($application->status === 'running') + + @else + + @endif + @endif +
+ @endif - @if (!str($database->status)->startsWith('exited')) - - - @else - - @endif - - @endif + @if ($database->destination->server->isFunctional()) +
+ @if (!str($database->status)->startsWith('exited')) + + + @else + + @endif +
+ @endif