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,
 | 
						|
    ));
 | 
						|
}
 |