diff --git a/app/Filament/VersionProviders/SpeedtestTrackerVersionProvider.php b/app/Filament/VersionProviders/SpeedtestTrackerVersionProvider.php deleted file mode 100644 index 569e53da9..000000000 --- a/app/Filament/VersionProviders/SpeedtestTrackerVersionProvider.php +++ /dev/null @@ -1,20 +0,0 @@ -isProduction() - ? (config('speedtest.build_version')) - : config('app.env'); - } -} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index b76c18b5e..15d972dee 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -2,8 +2,7 @@ namespace App\Providers\Filament; -use App\Filament\VersionProviders\SpeedtestTrackerVersionProvider; -use Awcodes\FilamentVersions\VersionsPlugin; +use App\Services\GitHub\Repository; use Filament\FontProviders\LocalFontProvider; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; @@ -44,13 +43,6 @@ public function panel(Panel $panel): Panel ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages') ->pages([]) - ->plugins([ - VersionsPlugin::make() - ->hasDefaults(false) - ->items([ - new SpeedtestTrackerVersionProvider, - ]), - ]) ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets') ->widgets([]) ->databaseNotifications() @@ -85,9 +77,10 @@ public function panel(Panel $panel): Panel ->url('https://github.com/sponsors/alexjustesen', shouldOpenInNewTab: true) ->icon('heroicon-o-banknotes') ->group('Links'), - NavigationItem::make('GitHub') + NavigationItem::make(config('speedtest.build_version')) ->url('https://github.com/alexjustesen/speedtest-tracker', shouldOpenInNewTab: true) - ->icon('heroicon-o-code-bracket') + ->icon('tabler-brand-github') + ->badge(fn (): string => Repository::updateAvailable() ? 'Update Available!' : 'Up to Date') ->group('Links'), ]); } diff --git a/app/Services/GitHub/Repository.php b/app/Services/GitHub/Repository.php new file mode 100644 index 000000000..8cc50aee0 --- /dev/null +++ b/app/Services/GitHub/Repository.php @@ -0,0 +1,82 @@ +addHour(), function () { + try { + $response = Http::retry(3, 100) + ->timeout(10) + ->withHeaders([ + 'Accept' => 'application/vnd.github.v3+json', + 'User-Agent' => 'speedtest-tracker', + ]) + ->get('https://api.github.com/repos/alexjustesen/speedtest-tracker/releases/latest'); + + if (! $response->successful()) { + Log::warning('Failed to fetch latest version from GitHub API', [ + 'status' => $response->status(), + 'response' => $response->body(), + ]); + + return false; + } + + $data = $response->json(); + + if (! isset($data['tag_name'])) { + Log::warning('GitHub API response missing tag_name field', ['response' => $data]); + + return false; + } + + return $data['tag_name']; + } catch (Throwable $e) { + Log::error('Exception occurred while fetching latest version from GitHub', [ + 'message' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + ]); + + return false; + } + }); + } + + /** + * Check if a newer version is available. + * + * @return bool Returns true if a newer version is available, false if up to date or unable to determine + */ + public static function updateAvailable(): bool + { + $currentVersion = config('speedtest.build_version'); + $latestVersion = self::getLatestVersion(); + + if ($latestVersion === false) { + return false; // Unable to determine, assume no update available + } + + // Normalize versions by removing 'v' prefix for comparison + $normalizedCurrent = ltrim($currentVersion, 'v'); + $normalizedLatest = ltrim($latestVersion, 'v'); + + // Use version_compare to properly compare semantic versions + $comparison = version_compare($normalizedLatest, $normalizedCurrent); + + return $comparison > 0; // 1 = latest is newer, 0 = equal, -1 = latest is older + } +} diff --git a/composer.json b/composer.json index 8fb1b8eae..274013c6c 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,6 @@ "license": "MIT", "require": { "php": "^8.2", - "awcodes/filament-versions": "^2.0.1", "chrisullyott/php-filesize": "^4.2.1", "dragonmantank/cron-expression": "^3.4.0", "filament/filament": "^3.3.31", diff --git a/composer.lock b/composer.lock index 7386fbbed..9e35d62df 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f11783921ada2d4a89d1f546d1dffa9a", + "content-hash": "4183d0a201b5a4e5c9afc42741ea2924", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -72,70 +72,6 @@ }, "time": "2025-05-28T17:07:28+00:00" }, - { - "name": "awcodes/filament-versions", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/awcodes/filament-versions.git", - "reference": "7c5b518bc31d55bcdaa32db0cd61711a19478b34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awcodes/filament-versions/zipball/7c5b518bc31d55bcdaa32db0cd61711a19478b34", - "reference": "7c5b518bc31d55bcdaa32db0cd61711a19478b34", - "shasum": "" - }, - "require": { - "filament/filament": "^3.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.14.2" - }, - "require-dev": { - "laravel/pint": "^1.10" - }, - "type": "package", - "extra": { - "laravel": { - "providers": [ - "Awcodes\\FilamentVersions\\FilamentVersionsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Awcodes\\FilamentVersions\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adam Weston", - "email": "awcodes1@gmail.com", - "role": "Developer" - } - ], - "description": "A mostly useless package to display framework versions at the bottom of the navigation panel.", - "keywords": [ - "filament", - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/awcodes/filament-versions/issues", - "source": "https://github.com/awcodes/filament-versions/tree/v2.0.1" - }, - "funding": [ - { - "url": "https://github.com/awcodes", - "type": "github" - } - ], - "time": "2023-10-21T12:59:23+00:00" - }, { "name": "blade-ui-kit/blade-heroicons", "version": "2.6.0",