sourceControl) { $site->sourceControl->getRepo($site->repository); } if (! $site->deploymentScript?->content) { throw new DeploymentScriptIsEmptyException; } $deployment = new Deployment([ 'site_id' => $site->id, 'deployment_script_id' => $site->deploymentScript->id, 'status' => DeploymentStatus::DEPLOYING, ]); $lastCommit = $site->sourceControl?->provider()?->getLastCommit($site->repository, $site->branch); if ($lastCommit) { $deployment->commit_id = $lastCommit['commit_id']; $deployment->commit_data = $lastCommit['commit_data']; } $deployment->save(); dispatch(function () use ($site, $deployment) { /** @var ServerLog $log */ $log = ServerLog::make($site->server, 'deploy-'.strtotime('now')) ->forSite($site); $log->save(); $deployment->log_id = $log->id; $deployment->save(); $site->server->os()->runScript( path: $site->path, script: $site->deploymentScript->content, serverLog: $log, user: $site->user, variables: $site->environmentVariables($deployment), ); $deployment->status = DeploymentStatus::FINISHED; $deployment->save(); Notifier::send($site, new DeploymentCompleted($deployment, $site)); })->catch(function () use ($deployment, $site) { $deployment->status = DeploymentStatus::FAILED; $deployment->save(); Notifier::send($site, new DeploymentCompleted($deployment, $site)); })->onConnection('ssh'); return $deployment; } }