mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-21 02:41:36 +00:00
65 lines
1.6 KiB
PHP
65 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Jobs\Site;
|
|
|
|
use App\Enums\DeploymentStatus;
|
|
use App\Events\Broadcast;
|
|
use App\Jobs\Job;
|
|
use App\Models\Deployment;
|
|
use App\SSHCommands\System\RunScriptCommand;
|
|
use Throwable;
|
|
|
|
class Deploy extends Job
|
|
{
|
|
protected Deployment $deployment;
|
|
|
|
protected string $path;
|
|
|
|
protected string $script;
|
|
|
|
public function __construct(Deployment $deployment, string $path)
|
|
{
|
|
$this->script = $deployment->deploymentScript->content;
|
|
$this->deployment = $deployment;
|
|
$this->path = $path;
|
|
}
|
|
|
|
/**
|
|
* @throws Throwable
|
|
*/
|
|
public function handle(): void
|
|
{
|
|
$ssh = $this->deployment->site->server->ssh();
|
|
try {
|
|
$ssh->exec(
|
|
new RunScriptCommand($this->path, $this->script),
|
|
'deploy',
|
|
$this->deployment->site_id
|
|
);
|
|
$this->deployment->status = DeploymentStatus::FINISHED;
|
|
$this->deployment->log_id = $ssh->log->id;
|
|
$this->deployment->save();
|
|
event(
|
|
new Broadcast('deploy-site-finished', [
|
|
'deployment' => $this->deployment,
|
|
])
|
|
);
|
|
} catch (Throwable) {
|
|
$this->deployment->log_id = $ssh->log->id;
|
|
$this->deployment->save();
|
|
$this->failed();
|
|
}
|
|
}
|
|
|
|
public function failed(): void
|
|
{
|
|
$this->deployment->status = DeploymentStatus::FAILED;
|
|
$this->deployment->save();
|
|
event(
|
|
new Broadcast('deploy-site-failed', [
|
|
'deployment' => $this->deployment,
|
|
])
|
|
);
|
|
}
|
|
}
|