2021-09-01 19:49:44 +01:00
|
|
|
<?php
|
|
|
|
|
2021-10-21 10:52:51 +01:00
|
|
|
/*
|
|
|
|
* This file is part of Flarum.
|
2021-09-29 10:40:40 +01:00
|
|
|
*
|
2021-10-21 10:52:51 +01:00
|
|
|
* For detailed copyright and license information, please view the
|
|
|
|
* LICENSE file that was distributed with this source code.
|
2021-09-29 10:40:40 +01:00
|
|
|
*/
|
|
|
|
|
2021-10-21 10:52:51 +01:00
|
|
|
namespace Flarum\PackageManager;
|
2021-09-01 19:49:44 +01:00
|
|
|
|
|
|
|
use Composer\Config;
|
|
|
|
use Composer\Console\Application;
|
2021-09-29 10:40:40 +01:00
|
|
|
use Flarum\Extension\ExtensionManager;
|
2021-09-01 19:49:44 +01:00
|
|
|
use Flarum\Foundation\AbstractServiceProvider;
|
|
|
|
use Flarum\Foundation\Paths;
|
2021-09-29 10:40:40 +01:00
|
|
|
use Flarum\Frontend\RecompileFrontendAssets;
|
|
|
|
use Flarum\Locale\LocaleManager;
|
2021-11-09 17:38:47 +01:00
|
|
|
use Flarum\PackageManager\Composer\ComposerAdapter;
|
2021-09-01 19:49:44 +01:00
|
|
|
use Illuminate\Contracts\Container\Container;
|
2021-09-29 10:40:40 +01:00
|
|
|
use Illuminate\Contracts\Events\Dispatcher;
|
2021-09-29 13:00:36 +01:00
|
|
|
use Monolog\Formatter\LineFormatter;
|
|
|
|
use Monolog\Handler\RotatingFileHandler;
|
|
|
|
use Monolog\Logger;
|
2021-10-21 10:52:51 +01:00
|
|
|
use Flarum\PackageManager\Event\FlarumUpdated;
|
|
|
|
use Flarum\PackageManager\Extension\Event\Updated;
|
|
|
|
use Flarum\PackageManager\Listener\PostUpdateListener;
|
2021-09-01 19:49:44 +01:00
|
|
|
|
|
|
|
class PackageManagerServiceProvider extends AbstractServiceProvider
|
|
|
|
{
|
|
|
|
public function register()
|
|
|
|
{
|
2021-11-09 17:38:47 +01:00
|
|
|
$this->container->singleton(ComposerAdapter::class, function (Container $container) {
|
2021-09-01 19:49:44 +01:00
|
|
|
// This should only ever be resolved when running composer commands,
|
|
|
|
// because we modify other environment configurations.
|
|
|
|
$composer = new Application();
|
|
|
|
$composer->setAutoExit(false);
|
|
|
|
|
2021-10-21 10:52:51 +01:00
|
|
|
/** @var Paths $paths */
|
2021-09-01 19:49:44 +01:00
|
|
|
$paths = $container->make(Paths::class);
|
|
|
|
|
|
|
|
putenv("COMPOSER_HOME={$paths->storage}/.composer");
|
|
|
|
putenv("COMPOSER={$paths->base}/composer.json");
|
2021-10-21 10:52:51 +01:00
|
|
|
Config::$defaultConfig['vendor-dir'] = $paths->vendor;
|
2021-09-01 19:49:44 +01:00
|
|
|
|
|
|
|
// When running simple require, update and remove commands on packages,
|
|
|
|
// composer 2 doesn't really need this much unless the extensions are very loaded dependency wise,
|
|
|
|
// but this is necessary for running flarum updates.
|
|
|
|
@ini_set('memory_limit', '1G');
|
|
|
|
@set_time_limit(5 * 60);
|
|
|
|
|
2021-11-09 17:38:47 +01:00
|
|
|
return new ComposerAdapter($composer, $container->make(OutputLogger::class));
|
2021-09-01 19:49:44 +01:00
|
|
|
});
|
|
|
|
|
2021-11-09 17:38:47 +01:00
|
|
|
$this->container->alias(ComposerAdapter::class, 'flarum.composer');
|
2021-09-29 13:00:36 +01:00
|
|
|
|
|
|
|
$this->container->singleton(OutputLogger::class, function (Container $container) {
|
|
|
|
$logPath = $container->make(Paths::class)->storage.'/logs/composer/output.log';
|
|
|
|
$handler = new RotatingFileHandler($logPath, Logger::INFO);
|
|
|
|
$handler->setFormatter(new LineFormatter(null, null, true, true));
|
|
|
|
|
|
|
|
$logger = new Logger('composer', [$handler]);
|
|
|
|
|
|
|
|
return new OutputLogger($logger);
|
|
|
|
});
|
2021-09-01 19:49:44 +01:00
|
|
|
}
|
2021-09-29 10:40:40 +01:00
|
|
|
|
|
|
|
public function boot(Container $container)
|
|
|
|
{
|
|
|
|
/** @var Dispatcher $events */
|
|
|
|
$events = $container->make('events');
|
|
|
|
|
|
|
|
$events->listen(
|
|
|
|
[Updated::class],
|
|
|
|
function (Updated $event) use ($container) {
|
2021-11-08 22:07:30 +01:00
|
|
|
/** @var ExtensionManager $extensions */
|
|
|
|
$extensions = $container->make(ExtensionManager::class);
|
|
|
|
|
|
|
|
if ($extensions->isEnabled($event->extension->getId())) {
|
|
|
|
$recompile = new RecompileFrontendAssets(
|
|
|
|
$container->make('flarum.assets.forum'),
|
|
|
|
$container->make(LocaleManager::class)
|
|
|
|
);
|
|
|
|
$recompile->flush();
|
|
|
|
|
|
|
|
$extensions->migrate($event->extension);
|
|
|
|
$event->extension->copyAssetsTo($container->make('filesystem')->disk('flarum-assets'));
|
|
|
|
}
|
2021-09-29 10:40:40 +01:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
$events->listen(FlarumUpdated::class, PostUpdateListener::class);
|
|
|
|
}
|
2021-09-01 19:49:44 +01:00
|
|
|
}
|