refactoring (#116)

- refactoring architecture
- fix incomplete ssh logs
- code editor for scripts in the app
- remove Jobs and SSHCommands
This commit is contained in:
Saeed Vaziry
2024-03-14 20:03:43 +01:00
committed by GitHub
parent cee4a70c3c
commit 428140b931
472 changed files with 24110 additions and 8159 deletions

View File

@ -2,9 +2,11 @@
namespace App\Http\Controllers;
use App\Actions\Site\Deploy;
use App\Actions\Site\UpdateBranch;
use App\Actions\Site\UpdateDeploymentScript;
use App\Actions\Site\UpdateEnv;
use App\Exceptions\DeploymentScriptIsEmptyException;
use App\Exceptions\SourceControlIsNotConnected;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
@ -19,13 +21,15 @@ class ApplicationController extends Controller
public function deploy(Server $server, Site $site): HtmxResponse
{
try {
$site->deploy();
app(Deploy::class)->run($site);
Toast::success('Deployment started!');
} catch (SourceControlIsNotConnected $e) {
Toast::error($e->getMessage());
return htmx()->redirect(route('source-controls'));
} catch (DeploymentScriptIsEmptyException) {
Toast::error('Deployment script is empty!');
}
return htmx()->back();
@ -33,7 +37,7 @@ public function deploy(Server $server, Site $site): HtmxResponse
public function showDeploymentLog(Server $server, Site $site, Deployment $deployment): RedirectResponse
{
return back()->with('content', $deployment->log->content);
return back()->with('content', $deployment->log?->getContent());
}
public function updateDeploymentScript(Server $server, Site $site, Request $request): RedirectResponse
@ -68,9 +72,9 @@ public function updateEnv(Server $server, Site $site, Request $request): Redirec
return back();
}
public function enableAutoDeployment(Server $server, Site $site): RedirectResponse
public function enableAutoDeployment(Server $server, Site $site): HtmxResponse
{
if (! $site->auto_deployment) {
if (! $site->isAutoDeployment()) {
try {
$site->enableAutoDeployment();
@ -82,12 +86,12 @@ public function enableAutoDeployment(Server $server, Site $site): RedirectRespon
}
}
return back();
return htmx()->back();
}
public function disableAutoDeployment(Server $server, Site $site): RedirectResponse
public function disableAutoDeployment(Server $server, Site $site): HtmxResponse
{
if ($site->auto_deployment) {
if ($site->isAutoDeployment()) {
try {
$site->disableAutoDeployment();
@ -99,6 +103,6 @@ public function disableAutoDeployment(Server $server, Site $site): RedirectRespo
}
}
return back();
return htmx()->back();
}
}

View File

@ -1,15 +0,0 @@
<?php
namespace App\Http\Controllers;
use App\Models\Server;
class DaemonController extends Controller
{
public function index(Server $server)
{
return view('daemons.index', [
'server' => $server,
]);
}
}

View File

@ -3,11 +3,12 @@
namespace App\Http\Controllers;
use App\Actions\Database\CreateBackup;
use App\Actions\Database\RestoreBackup;
use App\Actions\Database\RunBackup;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\Database;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
@ -27,7 +28,7 @@ public function show(Server $server, Backup $backup): View
public function run(Server $server, Backup $backup): RedirectResponse
{
$backup->run();
app(RunBackup::class)->run($backup);
Toast::success('Backup is running.');
@ -54,14 +55,7 @@ public function destroy(Server $server, Backup $backup): RedirectResponse
public function restore(Server $server, Backup $backup, BackupFile $backupFile, Request $request): HtmxResponse
{
$this->validate($request, [
'database' => 'required|exists:databases,id',
]);
/** @var Database $database */
$database = Database::query()->findOrFail($request->input('database'));
$backupFile->restore($database);
app(RestoreBackup::class)->restore($backupFile, $request->input());
Toast::success('Backup restored successfully.');

View File

@ -2,9 +2,11 @@
namespace App\Http\Controllers;
use App\Actions\Site\Deploy;
use App\Exceptions\SourceControlIsNotConnected;
use App\Facades\Notifier;
use App\Models\GitHook;
use App\Models\ServerLog;
use App\Notifications\SourceControlDisconnected;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
@ -26,10 +28,16 @@ public function __invoke(Request $request)
foreach ($gitHook->actions as $action) {
if ($action == 'deploy') {
try {
$gitHook->site->deploy();
app(Deploy::class)->run($gitHook->site);
} catch (SourceControlIsNotConnected) {
Notifier::send($gitHook->sourceControl, new SourceControlDisconnected($gitHook->sourceControl));
} catch (Throwable $e) {
ServerLog::log(
$gitHook->site->server,
'deploy-failed',
$e->getMessage(),
$gitHook->site
);
Log::error('git-hook-exception', (array) $e);
}
}

View File

@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use App\Actions\Queue\CreateQueue;
use App\Actions\Queue\DeleteQueue;
use App\Actions\Queue\ManageQueue;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Models\Queue;
@ -34,7 +36,7 @@ public function store(Server $server, Site $site, Request $request): HtmxRespons
public function action(Server $server, Site $site, Queue $queue, string $action): HtmxResponse
{
$queue->{$action}();
app(ManageQueue::class)->{$action}($queue);
Toast::success('Queue is about to '.$action);
@ -43,7 +45,7 @@ public function action(Server $server, Site $site, Queue $queue, string $action)
public function destroy(Server $server, Site $site, Queue $queue): RedirectResponse
{
$queue->remove();
app(DeleteQueue::class)->delete($queue);
Toast::success('Queue is being deleted.');

View File

@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use App\Actions\SshKey\CreateSshKey;
use App\Actions\SshKey\DeleteKeyFromServer;
use App\Actions\SshKey\DeployKeyToServer;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Models\Server;
@ -29,34 +31,29 @@ public function store(Server $server, Request $request): HtmxResponse
$request->input()
);
$key->deployTo($server);
$request->merge(['key_id' => $key->id]);
Toast::success('SSH Key added and being deployed to the server.');
return htmx()->back();
return $this->deploy($server, $request);
}
public function destroy(Server $server, SshKey $sshKey): RedirectResponse
{
$sshKey->deleteFrom($server);
app(DeleteKeyFromServer::class)->delete($server, $sshKey);
Toast::success('SSH Key is being deleted.');
Toast::success('SSH Key has been deleted.');
return back();
}
public function deploy(Server $server, Request $request): HtmxResponse
{
$this->validate($request, [
'key_id' => 'required|exists:ssh_keys,id',
]);
app(DeployKeyToServer::class)->deploy(
$request->user(),
$server,
$request->input()
);
/** @var SshKey $sshKey */
$sshKey = SshKey::query()->findOrFail($request->input('key_id'));
$sshKey->deployTo($server);
Toast::success('SSH Key is being deployed to the server.');
Toast::success('SSH Key has been deployed to the server.');
return htmx()->back();
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Actions\SSL\CreateSSL;
use App\Actions\SSL\DeleteSSL;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Models\Server;
@ -34,9 +35,9 @@ public function store(Server $server, Site $site, Request $request): HtmxRespons
public function destroy(Server $server, Site $site, Ssl $ssl): RedirectResponse
{
$ssl->remove();
app(DeleteSSL::class)->delete($ssl);
Toast::success('SSL certificate is being deleted.');
Toast::success('SSL certificate has been deleted.');
return back();
}

View File

@ -23,7 +23,7 @@ public function show(Server $server, ServerLog $serverLog): RedirectResponse
}
return back()->with([
'content' => $serverLog->content,
'content' => $serverLog->getContent(),
]);
}
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Actions\Server\EditServer;
use App\Actions\Server\RebootServer;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Models\Server;
@ -40,7 +41,9 @@ public function checkConnection(Server $server): RedirectResponse|HtmxResponse
public function reboot(Server $server): HtmxResponse
{
$server->reboot();
app(RebootServer::class)->reboot($server);
Toast::info('Server is rebooting.');
return htmx()->redirect(back()->getTargetUrl());
}

View File

@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Actions\Site\CreateSite;
use App\Actions\Site\DeleteSite;
use App\Enums\SiteType;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
@ -51,7 +52,7 @@ public function show(Server $server, Site $site): View
public function destroy(Server $server, Site $site): RedirectResponse
{
$site->remove();
app(DeleteSite::class)->delete($site);
Toast::success('Site is being deleted');

View File

@ -2,6 +2,8 @@
namespace App\Http\Middleware;
use App\Enums\ServerStatus;
use App\Facades\Toast;
use App\Models\Server;
use Closure;
use Illuminate\Http\Request;
@ -13,7 +15,9 @@ public function handle(Request $request, Closure $next)
/** @var Server $server */
$server = $request->route('server');
if (! $server->isReady()) {
if ($server->status !== ServerStatus::READY) {
Toast::error('Server is not ready yet');
return redirect()->route('servers.show', ['server' => $server]);
}