refactor(jobs): pull github changelogs from cdn instead of github
This commit is contained in:
parent
84e692fb43
commit
d2ed68e605
5 changed files with 27 additions and 10 deletions
|
|
@ -5,7 +5,7 @@
|
||||||
use App\Enums\ActivityTypes;
|
use App\Enums\ActivityTypes;
|
||||||
use App\Enums\ApplicationDeploymentStatus;
|
use App\Enums\ApplicationDeploymentStatus;
|
||||||
use App\Jobs\CheckHelperImageJob;
|
use App\Jobs\CheckHelperImageJob;
|
||||||
use App\Jobs\PullChangelogFromGitHub;
|
use App\Jobs\PullChangelog;
|
||||||
use App\Models\ApplicationDeploymentQueue;
|
use App\Models\ApplicationDeploymentQueue;
|
||||||
use App\Models\Environment;
|
use App\Models\Environment;
|
||||||
use App\Models\ScheduledDatabaseBackup;
|
use App\Models\ScheduledDatabaseBackup;
|
||||||
|
|
@ -140,7 +140,7 @@ private function pullTemplatesFromCDN()
|
||||||
private function pullChangelogFromGitHub()
|
private function pullChangelogFromGitHub()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
PullChangelogFromGitHub::dispatch();
|
PullChangelog::dispatch();
|
||||||
echo "Changelog fetch initiated\n";
|
echo "Changelog fetch initiated\n";
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
echo "Could not fetch changelog from GitHub: {$e->getMessage()}\n";
|
echo "Could not fetch changelog from GitHub: {$e->getMessage()}\n";
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
use App\Jobs\CheckForUpdatesJob;
|
use App\Jobs\CheckForUpdatesJob;
|
||||||
use App\Jobs\CheckHelperImageJob;
|
use App\Jobs\CheckHelperImageJob;
|
||||||
use App\Jobs\CleanupInstanceStuffsJob;
|
use App\Jobs\CleanupInstanceStuffsJob;
|
||||||
use App\Jobs\PullChangelogFromGitHub;
|
use App\Jobs\PullChangelog;
|
||||||
use App\Jobs\PullTemplatesFromCDN;
|
use App\Jobs\PullTemplatesFromCDN;
|
||||||
use App\Jobs\RegenerateSslCertJob;
|
use App\Jobs\RegenerateSslCertJob;
|
||||||
use App\Jobs\ScheduledJobManager;
|
use App\Jobs\ScheduledJobManager;
|
||||||
|
|
@ -68,7 +68,7 @@ protected function schedule(Schedule $schedule): void
|
||||||
$this->scheduleInstance->command('cleanup:unreachable-servers')->daily()->onOneServer();
|
$this->scheduleInstance->command('cleanup:unreachable-servers')->daily()->onOneServer();
|
||||||
|
|
||||||
$this->scheduleInstance->job(new PullTemplatesFromCDN)->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
|
$this->scheduleInstance->job(new PullTemplatesFromCDN)->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
|
||||||
$this->scheduleInstance->job(new PullChangelogFromGitHub)->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
|
$this->scheduleInstance->job(new PullChangelog)->cron($this->updateCheckFrequency)->timezone($this->instanceTimezone)->onOneServer();
|
||||||
|
|
||||||
$this->scheduleInstance->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer();
|
$this->scheduleInstance->job(new CleanupInstanceStuffsJob)->everyTwoMinutes()->onOneServer();
|
||||||
$this->scheduleUpdates();
|
$this->scheduleUpdates();
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,9 @@
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class PullChangelogFromGitHub implements ShouldBeEncrypted, ShouldQueue
|
class PullChangelog implements ShouldBeEncrypted, ShouldQueue
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
|
@ -26,21 +27,36 @@ public function __construct()
|
||||||
public function handle(): void
|
public function handle(): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
// Fetch from CDN instead of GitHub API to avoid rate limits
|
||||||
|
$cdnUrl = config('constants.coolify.releases_url');
|
||||||
|
|
||||||
$response = Http::retry(3, 1000)
|
$response = Http::retry(3, 1000)
|
||||||
->timeout(30)
|
->timeout(30)
|
||||||
->get('https://api.github.com/repos/coollabsio/coolify/releases?per_page=10');
|
->get($cdnUrl);
|
||||||
|
|
||||||
if ($response->successful()) {
|
if ($response->successful()) {
|
||||||
$releases = $response->json();
|
$releases = $response->json();
|
||||||
|
|
||||||
|
// Limit to 10 releases for processing (same as before)
|
||||||
|
$releases = array_slice($releases, 0, 10);
|
||||||
|
|
||||||
$changelog = $this->transformReleasesToChangelog($releases);
|
$changelog = $this->transformReleasesToChangelog($releases);
|
||||||
|
|
||||||
// Group entries by month and save them
|
// Group entries by month and save them
|
||||||
$this->saveChangelogEntries($changelog);
|
$this->saveChangelogEntries($changelog);
|
||||||
} else {
|
} else {
|
||||||
send_internal_notification('PullChangelogFromGitHub failed with: '.$response->status().' '.$response->body());
|
// Log error instead of sending notification
|
||||||
|
Log::error('PullChangelogFromGitHub: Failed to fetch from CDN', [
|
||||||
|
'status' => $response->status(),
|
||||||
|
'url' => $cdnUrl,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
send_internal_notification('PullChangelogFromGitHub failed with: '.$e->getMessage());
|
// Log error instead of sending notification
|
||||||
|
Log::error('PullChangelogFromGitHub: Exception occurred', [
|
||||||
|
'message' => $e->getMessage(),
|
||||||
|
'trace' => $e->getTraceAsString(),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace App\Livewire;
|
namespace App\Livewire;
|
||||||
|
|
||||||
use App\Jobs\PullChangelogFromGitHub;
|
use App\Jobs\PullChangelog;
|
||||||
use App\Services\ChangelogService;
|
use App\Services\ChangelogService;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
@ -50,7 +50,7 @@ public function manualFetchChangelog()
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
PullChangelogFromGitHub::dispatch();
|
PullChangelog::dispatch();
|
||||||
$this->dispatch('success', 'Changelog fetch initiated! Check back in a few moments.');
|
$this->dispatch('success', 'Changelog fetch initiated! Check back in a few moments.');
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
$this->dispatch('error', 'Failed to fetch changelog: '.$e->getMessage());
|
$this->dispatch('error', 'Failed to fetch changelog: '.$e->getMessage());
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
'helper_image' => env('HELPER_IMAGE', env('REGISTRY_URL', 'ghcr.io').'/coollabsio/coolify-helper'),
|
'helper_image' => env('HELPER_IMAGE', env('REGISTRY_URL', 'ghcr.io').'/coollabsio/coolify-helper'),
|
||||||
'realtime_image' => env('REALTIME_IMAGE', env('REGISTRY_URL', 'ghcr.io').'/coollabsio/coolify-realtime'),
|
'realtime_image' => env('REALTIME_IMAGE', env('REGISTRY_URL', 'ghcr.io').'/coollabsio/coolify-realtime'),
|
||||||
'is_windows_docker_desktop' => env('IS_WINDOWS_DOCKER_DESKTOP', false),
|
'is_windows_docker_desktop' => env('IS_WINDOWS_DOCKER_DESKTOP', false),
|
||||||
|
'releases_url' => 'https://cdn.coollabs.io/coolify/releases.json',
|
||||||
],
|
],
|
||||||
|
|
||||||
'urls' => [
|
'urls' => [
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue