fix: handle previously defined compose previews

This commit is contained in:
Andras Bacsai
2024-06-05 15:29:00 +02:00
parent 7fd0deedb1
commit a68951541c
2 changed files with 37 additions and 9 deletions

View File

@@ -1708,12 +1708,30 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
if ($pull_request_id !== 0) { if ($pull_request_id !== 0) {
$preview = $resource->previews()->find($preview_id); $preview = $resource->previews()->find($preview_id);
$docker_compose_domains = collect(json_decode(data_get($preview, 'docker_compose_domains'))); $docker_compose_domains = collect(json_decode(data_get($preview, 'docker_compose_domains')));
if ($docker_compose_domains->count() > 0) {
$found_fqdn = data_get($docker_compose_domains, "$serviceName.domain"); $found_fqdn = data_get($docker_compose_domains, "$serviceName.domain");
if ($found_fqdn) { if ($found_fqdn) {
$fqdns = collect($found_fqdn); $fqdns = collect($found_fqdn);
} else { } else {
$fqdns = collect([]); $fqdns = collect([]);
} }
} else {
$fqdns = $fqdns->map(function ($fqdn) use ($pull_request_id, $resource) {
$preview = ApplicationPreview::findPreviewByApplicationAndPullId($resource->id, $pull_request_id);
$url = Url::fromString($fqdn);
$template = $resource->preview_url_template;
$host = $url->getHost();
$schema = $url->getScheme();
$random = new Cuid2(7);
$preview_fqdn = str_replace('{{random}}', $random, $template);
$preview_fqdn = str_replace('{{domain}}', $host, $preview_fqdn);
$preview_fqdn = str_replace('{{pr_id}}', $pull_request_id, $preview_fqdn);
$preview_fqdn = "$schema://$preview_fqdn";
$preview->fqdn = $preview_fqdn;
$preview->save();
return $preview_fqdn;
});
}
} }
$serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik( $serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik(
uuid: $resource->uuid, uuid: $resource->uuid,

View File

@@ -89,10 +89,21 @@
@if ($application->build_pack === 'dockercompose') @if ($application->build_pack === 'dockercompose')
<div class="flex flex-col gap-4 pt-4"> <div class="flex flex-col gap-4 pt-4">
@if (collect(json_decode($preview->docker_compose_domains))->count() === 0)
<form wire:submit="save_preview('{{ $preview->id }}')"
class="flex items-end gap-2 pt-4">
<x-forms.input label="Domain" helper="One domain per preview."
id="application.previews.{{ $previewName }}.fqdn"></x-forms.input>
<x-forms.button type="submit">Save</x-forms.button>
<x-forms.button wire:click="generate_preview('{{ $preview->id }}')">Generate
Domain</x-forms.button>
</form>
@else
@foreach (collect(json_decode($preview->docker_compose_domains)) as $serviceName => $service) @foreach (collect(json_decode($preview->docker_compose_domains)) as $serviceName => $service)
<livewire:project.application.previews-compose wire:key="{{ $preview->id }}" <livewire:project.application.previews-compose wire:key="{{ $preview->id }}"
:service="$service" :serviceName="$serviceName" :preview="$preview" /> :service="$service" :serviceName="$serviceName" :preview="$preview" />
@endforeach @endforeach
@endif
</div> </div>
@else @else
<form wire:submit="save_preview('{{ $preview->id }}')" class="flex items-end gap-2 pt-4"> <form wire:submit="save_preview('{{ $preview->id }}')" class="flex items-end gap-2 pt-4">
@@ -104,7 +115,6 @@
</form> </form>
@endif @endif
<div class="flex items-center gap-2 pt-6"> <div class="flex items-center gap-2 pt-6">
@if (count($parameters) > 0) @if (count($parameters) > 0)
<a <a
href="{{ route('project.application.deployment.index', [...$parameters, 'pull_request_id' => data_get($preview, 'pull_request_id')]) }}"> href="{{ route('project.application.deployment.index', [...$parameters, 'pull_request_id' => data_get($preview, 'pull_request_id')]) }}">