This commit is contained in:
Andras Bacsai
2023-05-30 15:52:17 +02:00
parent 6e72889294
commit 0f50d1accd
36 changed files with 715 additions and 273 deletions

View File

@@ -37,12 +37,9 @@ class Deploy extends Component
$this->set_deployment_uuid();
queue_application_deployment(
application: $this->application,
extra_attributes: [
'deployment_uuid' => $this->deployment_uuid,
'application_uuid' => $this->application->uuid,
'force_rebuild' => $force,
]
application_id: $this->application->id,
deployment_uuid: $this->deployment_uuid,
force_rebuild: $force,
);
return redirect()->route('project.application.deployments', [
'project_uuid' => $this->parameters['project_uuid'],

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Http\Livewire\Project\Application;
use App\Enums\ProcessStatus;
use App\Models\Application;
use App\Models\ApplicationDeploymentQueue;
use Livewire\Component;
use Spatie\Activitylog\Contracts\Activity;
class DeploymentCancel extends Component
{
public Application $application;
public $activity;
public string $deployment_uuid;
public function cancel()
{
try {
ray('Cancelling deployment: ' . $this->deployment_uuid . 'of application: ' . $this->application->uuid);
$deployment = ApplicationDeploymentQueue::where('deployment_uuid', $this->deployment_uuid)->firstOrFail();
$deployment->status = 'cancelled';
$deployment->save();
$this->activity->properties = $this->activity->properties->merge([
'exitCode' => 1,
'status' => ProcessStatus::CANCELLED->value,
]);
$this->activity->save();
instant_remote_process(["docker rm -f {$this->deployment_uuid}"], $this->application->destination->server, throwError: false);
} catch (\Throwable $th) {
return general_error_handler($th, $this);
}
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace App\Http\Livewire\Project\Application\Preview;
use App\Models\Application;
use Illuminate\Support\Str;
use Livewire\Component;
use Spatie\Url\Url;
class Form extends Component
{
public Application $application;
public string $preview_url_template;
protected $rules = [
'application.preview_url_template' => 'required',
];
public function resetToDefault()
{
$this->application->preview_url_template = '{{pr_id}}.{{domain}}';
$this->preview_url_template = $this->application->preview_url_template;
$this->application->save();
$this->generate_real_url();
}
public function generate_real_url()
{
if (data_get($this->application, 'fqdn')) {
$url = Url::fromString($this->application->fqdn);
$host = $url->getHost();
$this->preview_url_template = Str::of($this->application->preview_url_template)->replace('{{domain}}', $host);
}
}
public function mount()
{
$this->generate_real_url();
}
public function submit()
{
$this->validate();
$this->application->preview_url_template = str_replace(' ', '', $this->application->preview_url_template);
ray($this->application->preview_url_template);
$this->application->save();
$this->generate_real_url();
}
}

View File

@@ -2,10 +2,77 @@
namespace App\Http\Livewire\Project\Application;
use App\Jobs\ContainerStatusJob;
use App\Models\Application;
use App\Models\ApplicationPreview;
use Illuminate\Support\Collection;
use Livewire\Component;
use Visus\Cuid2\Cuid2;
class Previews extends Component
{
public Application $application;
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();
ApplicationPreview::create([
'application_id' => $this->application->id,
'pull_request_id' => $pull_request_id,
]);
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);
dispatch(new ContainerStatusJob(
application: $this->application,
container_name: $container_name,
pull_request_id: $pull_request_id
));
} catch (\Throwable $th) {
return general_error_handler($th, $this);
}
}
}

View File

@@ -18,18 +18,15 @@ class Rollback extends Component
{
$this->parameters = get_parameters();
}
public function rollbackImage($tag)
public function rollbackImage($commit)
{
$deployment_uuid = new Cuid2(7);
queue_application_deployment(
application: $this->application,
extra_attributes: [
'deployment_uuid' => $deployment_uuid,
'application_uuid' => $this->application->uuid,
'force_rebuild' => false,
'commit' => $tag,
]
application_id: $this->application->id,
deployment_uuid: $deployment_uuid,
commit: $commit,
force_rebuild: false,
);
return redirect()->route('project.application.deployments', [