33 lines
1.3 KiB
PHP
33 lines
1.3 KiB
PHP
<?php
|
|
|
|
use App\Jobs\ApplicationDeploymentJob;
|
|
use App\Models\Application;
|
|
use App\Models\ApplicationDeploymentQueue;
|
|
|
|
function queue_application_deployment(Application $application, $metadata)
|
|
{
|
|
$deployment = ApplicationDeploymentQueue::create([
|
|
'application_id' => $application->id,
|
|
'metadata' => $metadata,
|
|
]);
|
|
$queued_deployments = ApplicationDeploymentQueue::where('application_id', $application->id)->where('status', 'queued')->get()->sortByDesc('created_at');
|
|
$running_deployments = ApplicationDeploymentQueue::where('application_id', $application->id)->where('status', 'in_progress')->get()->sortByDesc('created_at');
|
|
if ($queued_deployments->count() > 1) {
|
|
$queued_deployments = $queued_deployments->skip(1);
|
|
$queued_deployments->each(function ($queued_deployment, $key) {
|
|
$queued_deployment->status = 'cancelled by system';
|
|
$queued_deployment->save();
|
|
});
|
|
}
|
|
if ($running_deployments->count() > 0) {
|
|
return;
|
|
}
|
|
dispatch(new ApplicationDeploymentJob(
|
|
application_deployment_queue_id: $deployment->id,
|
|
deployment_uuid: $metadata['deployment_uuid'],
|
|
application_uuid: $metadata['application_uuid'],
|
|
force_rebuild: $metadata['force_rebuild'],
|
|
commit: $metadata['commit'] ?? null,
|
|
));
|
|
}
|