mirror of
https://github.com/flarum/framework.git
synced 2025-02-21 07:50:24 +08:00
fix(em): skip incompatible extension updates (#4177)
This commit is contained in:
parent
55cd0850c7
commit
ce5feca140
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
namespace Flarum\ExtensionManager\Command;
|
namespace Flarum\ExtensionManager\Command;
|
||||||
|
|
||||||
|
use Composer\Semver\Semver;
|
||||||
use Flarum\Extension\Extension;
|
use Flarum\Extension\Extension;
|
||||||
use Flarum\Extension\ExtensionManager;
|
use Flarum\Extension\ExtensionManager;
|
||||||
use Flarum\ExtensionManager\Composer\ComposerAdapter;
|
use Flarum\ExtensionManager\Composer\ComposerAdapter;
|
||||||
@ -16,16 +17,21 @@ use Flarum\ExtensionManager\Composer\ComposerJson;
|
|||||||
use Flarum\ExtensionManager\Exception\ComposerCommandFailedException;
|
use Flarum\ExtensionManager\Exception\ComposerCommandFailedException;
|
||||||
use Flarum\ExtensionManager\Settings\LastUpdateCheck;
|
use Flarum\ExtensionManager\Settings\LastUpdateCheck;
|
||||||
use Flarum\ExtensionManager\Support\Util;
|
use Flarum\ExtensionManager\Support\Util;
|
||||||
|
use Flarum\Foundation\Application;
|
||||||
|
use GuzzleHttp\Client;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Symfony\Component\Console\Input\ArrayInput;
|
use Symfony\Component\Console\Input\ArrayInput;
|
||||||
|
|
||||||
class CheckForUpdatesHandler
|
class CheckForUpdatesHandler
|
||||||
{
|
{
|
||||||
|
protected array $meta = [];
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
protected ComposerAdapter $composer,
|
protected ComposerAdapter $composer,
|
||||||
protected LastUpdateCheck $lastUpdateCheck,
|
protected LastUpdateCheck $lastUpdateCheck,
|
||||||
protected ExtensionManager $extensions,
|
protected ExtensionManager $extensions,
|
||||||
protected ComposerJson $composerJson
|
protected ComposerJson $composerJson,
|
||||||
|
protected Client $http
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,6 +103,10 @@ class CheckForUpdatesHandler
|
|||||||
|
|
||||||
$mainPackageUpdate['required-as'] = $composerJson['require'][$mainPackageUpdate['name']] ?? null;
|
$mainPackageUpdate['required-as'] = $composerJson['require'][$mainPackageUpdate['name']] ?? null;
|
||||||
|
|
||||||
|
if (! $this->compatibleWithCurrentFlarumVersion($mainPackageUpdate)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$updates->push($mainPackageUpdate);
|
$updates->push($mainPackageUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,4 +146,49 @@ class CheckForUpdatesHandler
|
|||||||
|
|
||||||
return $output->getContents();
|
return $output->getContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function compatibleWithCurrentFlarumVersion(array $mainPackageUpdate): bool
|
||||||
|
{
|
||||||
|
if (empty($mainPackageUpdate['latest-major']) || str_contains($mainPackageUpdate['latest-major'], 'dev-')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! empty($this->meta[$mainPackageUpdate['name']])) {
|
||||||
|
$json = $this->meta[$mainPackageUpdate['name']];
|
||||||
|
} else {
|
||||||
|
$response = $this->http->get("https://repo.packagist.org/p2/{$mainPackageUpdate['name']}.json");
|
||||||
|
|
||||||
|
$body = $response->getBody()->getContents();
|
||||||
|
|
||||||
|
if ($response->getStatusCode() > 299 || $response->getStatusCode() < 200) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$json = json_decode($body, true);
|
||||||
|
|
||||||
|
$this->meta[$mainPackageUpdate['name']] = $json;
|
||||||
|
}
|
||||||
|
|
||||||
|
$packages = new Collection($json['packages'][$mainPackageUpdate['name']] ?? []);
|
||||||
|
|
||||||
|
if ($packages->isEmpty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$package = $packages->firstWhere('version', $mainPackageUpdate['latest-major']);
|
||||||
|
|
||||||
|
if (! $package) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$flarumVersion = Application::VERSION;
|
||||||
|
|
||||||
|
$require = $package['require']['flarum/core'] ?? null;
|
||||||
|
|
||||||
|
if (! $require || str_contains($require, 'dev-')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Semver::satisfies($flarumVersion, $require);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,9 @@ class Util
|
|||||||
if (str_starts_with($currentVersion, 'v')) {
|
if (str_starts_with($currentVersion, 'v')) {
|
||||||
$currentVersion = substr($currentVersion, 1);
|
$currentVersion = substr($currentVersion, 1);
|
||||||
}
|
}
|
||||||
|
if (str_starts_with($latestVersion, 'v')) {
|
||||||
|
$latestVersion = substr($latestVersion, 1);
|
||||||
|
}
|
||||||
|
|
||||||
$currentVersion = explode('.', $currentVersion);
|
$currentVersion = explode('.', $currentVersion);
|
||||||
$latestVersion = explode('.', $latestVersion);
|
$latestVersion = explode('.', $latestVersion);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user