refactor(jobs): pull github changelogs from cdn instead of github
This commit is contained in:
@@ -5,7 +5,7 @@ namespace App\Console\Commands;
|
|||||||
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 @@ class Init extends Command
|
|||||||
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\CheckAndStartSentinelJob;
|
|||||||
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 @@ class Kernel extends ConsoleKernel
|
|||||||
$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\InteractsWithQueue;
|
|||||||
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 @@ class PullChangelogFromGitHub implements ShouldBeEncrypted, ShouldQueue
|
|||||||
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 @@ class SettingsDropdown extends Component
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 @@ return [
|
|||||||
'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' => [
|
||||||
|
Reference in New Issue
Block a user