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

View File

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

View File

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