diff --git a/.env.example b/.env.example index 5430c53..ea5ea71 100755 --- a/.env.example +++ b/.env.example @@ -15,7 +15,7 @@ DB_USERNAME=root DB_PASSWORD= BROADCAST_DRIVER=null -CACHE_DRIVER=redis +CACHE_DRIVER=file FILESYSTEM_DRIVER=local QUEUE_CONNECTION=default SESSION_DRIVER=database diff --git a/app/Jobs/Job.php b/app/Jobs/Job.php index aaa4938..be45a6a 100755 --- a/app/Jobs/Job.php +++ b/app/Jobs/Job.php @@ -3,13 +3,12 @@ namespace App\Jobs; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; -abstract class Job implements ShouldQueue, ShouldBeUnique +abstract class Job implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; } diff --git a/app/Jobs/Site/Deploy.php b/app/Jobs/Site/Deploy.php index f0c4c2b..9b0cf43 100644 --- a/app/Jobs/Site/Deploy.php +++ b/app/Jobs/Site/Deploy.php @@ -4,7 +4,6 @@ use App\Enums\DeploymentStatus; use App\Events\Broadcast; -use App\Helpers\SSH; use App\Jobs\Job; use App\Models\Deployment; use App\SSHCommands\System\RunScriptCommand; @@ -18,13 +17,11 @@ class Deploy extends Job protected string $script; - protected SSH $ssh; - - public function __construct(Deployment $deployment, string $path, string $script) + public function __construct(Deployment $deployment, string $path) { + $this->script = $deployment->deploymentScript->content; $this->deployment = $deployment; $this->path = $path; - $this->script = $script; } /** @@ -32,28 +29,31 @@ public function __construct(Deployment $deployment, string $path, string $script */ public function handle(): void { - $this->ssh = $this->deployment->site->server->ssh(); - $this->ssh->exec( - new RunScriptCommand($this->path, $this->script), - 'deploy', - $this->deployment->site_id - ); - $this->deployment->status = DeploymentStatus::FINISHED; - $this->deployment->log_id = $this->ssh->log->id; - $this->deployment->save(); - event( - new Broadcast('deploy-site-finished', [ - 'deployment' => $this->deployment, - ]) - ); + $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; - if ($this->ssh->log) { - $this->deployment->log_id = $this->ssh->log->id; - } $this->deployment->save(); event( new Broadcast('deploy-site-failed', [ diff --git a/app/Models/Site.php b/app/Models/Site.php index 07ceb11..61c2ea2 100755 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -266,13 +266,7 @@ public function deploy(): Deployment } $deployment->save(); - dispatch( - new Deploy( - $deployment, - $this->path, - $this->deployment_script_text - ) - )->onConnection('ssh'); + dispatch(new Deploy($deployment, $this->path))->onConnection('ssh'); return $deployment; } diff --git a/resources/commands/system/run-script.sh b/resources/commands/system/run-script.sh index 837f548..7ecdab1 100644 --- a/resources/commands/system/run-script.sh +++ b/resources/commands/system/run-script.sh @@ -2,6 +2,4 @@ if ! cd __path__; then echo 'VITO_SSH_ERROR' && exit 1 fi -if ! __script__; then - echo 'VITO_SSH_ERROR' && exit 1 -fi +__script__ diff --git a/tests/Feature/SSHCommands/System/RunScriptCommandTest.php b/tests/Feature/SSHCommands/System/RunScriptCommandTest.php index 41c165f..dd30668 100644 --- a/tests/Feature/SSHCommands/System/RunScriptCommandTest.php +++ b/tests/Feature/SSHCommands/System/RunScriptCommandTest.php @@ -16,9 +16,7 @@ public function test_generate_command() echo 'VITO_SSH_ERROR' && exit 1 fi - if ! script; then - echo 'VITO_SSH_ERROR' && exit 1 - fi + script EOD; $this->assertStringContainsString($expected, $command->content());