fix githook deletion

This commit is contained in:
Saeed Vaziry
2025-06-20 00:13:54 +02:00
parent 7a94e28da2
commit 45521d2616
3 changed files with 18 additions and 6 deletions

View File

@ -3,13 +3,11 @@
namespace App\Http\Controllers\API; namespace App\Http\Controllers\API;
use App\Actions\Site\Deploy; use App\Actions\Site\Deploy;
use App\Exceptions\SourceControlIsNotConnected; use App\Exceptions\FailedToDestroyGitHook;
use App\Facades\Notifier;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\GitHook; use App\Models\GitHook;
use App\Models\ServerLog; use App\Models\ServerLog;
use App\Models\SourceControl; use App\Models\SourceControl;
use App\Notifications\SourceControlDisconnected;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
@ -18,6 +16,9 @@
class GitHookController extends Controller class GitHookController extends Controller
{ {
/**
* @throws FailedToDestroyGitHook
*/
#[Any('api/git-hooks', name: 'api.git-hooks')] #[Any('api/git-hooks', name: 'api.git-hooks')]
public function __invoke(Request $request): JsonResponse public function __invoke(Request $request): JsonResponse
{ {
@ -30,6 +31,14 @@ public function __invoke(Request $request): JsonResponse
->where('secret', $request->input('secret')) ->where('secret', $request->input('secret'))
->firstOrFail(); ->firstOrFail();
if (! $gitHook->site) {
$gitHook->destroyHook();
return response()->json([
'success' => true,
]);
}
foreach ($gitHook->actions as $action) { foreach ($gitHook->actions as $action) {
/** @var SourceControl $sourceControl */ /** @var SourceControl $sourceControl */
$sourceControl = $gitHook->site->sourceControl; $sourceControl = $gitHook->site->sourceControl;
@ -37,8 +46,6 @@ public function __invoke(Request $request): JsonResponse
if ($action == 'deploy' && $gitHook->site->branch === $webhookBranch) { if ($action == 'deploy' && $gitHook->site->branch === $webhookBranch) {
try { try {
app(Deploy::class)->run($gitHook->site); app(Deploy::class)->run($gitHook->site);
} catch (SourceControlIsNotConnected) {
Notifier::send($gitHook->sourceControl, new SourceControlDisconnected($gitHook->sourceControl));
} catch (Throwable $e) { } catch (Throwable $e) {
ServerLog::log( ServerLog::log(
$gitHook->site->server, $gitHook->site->server,

View File

@ -15,7 +15,7 @@
* @property array<string, mixed> $actions * @property array<string, mixed> $actions
* @property string $hook_id * @property string $hook_id
* @property array<string, mixed> $hook_response * @property array<string, mixed> $hook_response
* @property Site $site * @property ?Site $site
* @property SourceControl $sourceControl * @property SourceControl $sourceControl
*/ */
class GitHook extends AbstractModel class GitHook extends AbstractModel

View File

@ -118,6 +118,11 @@ public static function boot(): void
$site->ssls()->delete(); $site->ssls()->delete();
$site->deployments()->delete(); $site->deployments()->delete();
$site->deploymentScript()->delete(); $site->deploymentScript()->delete();
try {
$site->gitHook?->destroyHook();
} catch (FailedToDestroyGitHook) {
$site->refresh()->gitHook?->delete();
}
}); });
static::created(function (Site $site): void { static::created(function (Site $site): void {