mirror of
https://github.com/coollabsio/coolify.git
synced 2026-11-04 10:42:23 +00:00
Stop calling /zen before each installation token request. A short network problem to GitHub failed deployments with a cURL timeout on /zen. assertGithubClockInSync now takes the failed response and reads its Date header, so the "System time is out of sync" error still shows when GitHub rejects the JWT. Call it on failed JWT requests in the webhook installation check, the permission job, the source connection test, and the server transfer checklist. Remove the /zen fakes from the tests.
62 lines
2.2 KiB
PHP
62 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Jobs;
|
|
|
|
use App\Models\GithubApp;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Contracts\Queue\ShouldBeEncrypted;
|
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
use Illuminate\Foundation\Bus\Dispatchable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Queue\SerializesModels;
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
class GithubAppPermissionJob implements ShouldBeEncrypted, ShouldQueue
|
|
{
|
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
|
public $tries = 4;
|
|
|
|
public function backoff(): int
|
|
{
|
|
return isDev() ? 1 : 3;
|
|
}
|
|
|
|
public function __construct(public GithubApp $github_app) {}
|
|
|
|
public function handle()
|
|
{
|
|
try {
|
|
$github_access_token = generateGithubJwt($this->github_app);
|
|
|
|
$response = Http::GitSource($this->github_app->api_url)->withHeaders([
|
|
'Authorization' => "Bearer $github_access_token",
|
|
'Accept' => 'application/vnd.github+json',
|
|
])->get("{$this->github_app->api_url}/app");
|
|
|
|
if (! $response->successful()) {
|
|
assertGithubClockInSync($response);
|
|
throw new \RuntimeException('Failed to fetch GitHub app permissions: '.$response->body());
|
|
}
|
|
|
|
$response = $response->json();
|
|
$permissions = data_get($response, 'permissions');
|
|
|
|
$this->github_app->contents = data_get($permissions, 'contents');
|
|
$this->github_app->metadata = data_get($permissions, 'metadata');
|
|
$this->github_app->pull_requests = data_get($permissions, 'pull_requests');
|
|
$this->github_app->administration = data_get($permissions, 'administration');
|
|
$this->github_app->organization_self_hosted_runners = data_get($permissions, 'organization_self_hosted_runners');
|
|
$this->github_app->actions = data_get($permissions, 'actions');
|
|
$this->github_app->webhook_events = data_get($response, 'events', []);
|
|
|
|
$this->github_app->save();
|
|
$this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret');
|
|
|
|
} catch (\Throwable $e) {
|
|
send_internal_notification('GithubAppPermissionJob failed with: '.$e->getMessage());
|
|
throw $e;
|
|
}
|
|
}
|
|
}
|