lasthourcloud/app/Http/Livewire/Project/Application/Previews.php

82 lines
2.9 KiB
PHP
Raw Normal View History

2023-05-16 11:11:05 +00:00
<?php
namespace App\Http\Livewire\Project\Application;
2023-05-30 13:52:17 +00:00
use App\Jobs\ContainerStatusJob;
2023-05-16 11:11:05 +00:00
use App\Models\Application;
2023-05-30 13:52:17 +00:00
use App\Models\ApplicationPreview;
use Illuminate\Support\Collection;
2023-05-16 11:11:05 +00:00
use Livewire\Component;
2023-05-30 13:52:17 +00:00
use Visus\Cuid2\Cuid2;
2023-05-16 11:11:05 +00:00
class Previews extends Component
{
public Application $application;
2023-05-30 13:52:17 +00:00
public string $deployment_uuid;
public array $parameters;
public Collection $pull_requests;
public int $rate_limit_remaining;
public function mount()
{
$this->pull_requests = collect();
$this->parameters = get_parameters();
}
public function loadStatus($pull_request_id)
{
dispatch(new ContainerStatusJob(
application: $this->application,
container_name: generate_container_name($this->application->uuid, $pull_request_id),
pull_request_id: $pull_request_id
));
}
protected function set_deployment_uuid()
{
$this->deployment_uuid = new Cuid2(7);
$this->parameters['deployment_uuid'] = $this->deployment_uuid;
}
public function load_prs()
{
['rate_limit_remaining' => $rate_limit_remaining, 'data' => $data] = get_from_git_api($this->application->source, "/repos/{$this->application->git_repository}/pulls");
$this->rate_limit_remaining = $rate_limit_remaining;
$this->pull_requests = $data;
}
public function deploy(int $pull_request_id)
{
try {
$this->set_deployment_uuid();
2023-05-30 15:00:11 +00:00
$found = ApplicationPreview::where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
if (!$found) {
ApplicationPreview::create([
'application_id' => $this->application->id,
'pull_request_id' => $pull_request_id,
]);
}
2023-05-30 13:52:17 +00:00
queue_application_deployment(
application_id: $this->application->id,
deployment_uuid: $this->deployment_uuid,
force_rebuild: true,
pull_request_id: $pull_request_id,
);
} catch (\Throwable $th) {
return general_error_handler($th, $this);
}
}
public function stop(int $pull_request_id)
{
try {
$container_name = generate_container_name($this->application->uuid, $pull_request_id);
ray('Stopping container: ' . $container_name);
instant_remote_process(["docker rm -f $container_name"], $this->application->destination->server, throwError: false);
2023-05-30 15:05:27 +00:00
$found = ApplicationPreview::where('application_id', $this->application->id)->where('pull_request_id', $pull_request_id)->first();
if ($found) {
$found->delete();
}
$this->application->refresh();
2023-05-30 13:52:17 +00:00
} catch (\Throwable $th) {
return general_error_handler($th, $this);
}
}
2023-05-16 11:11:05 +00:00
}