public static function makeAutoload(Event $event) { $composer = $event->getComposer(); $generator = $composer->getAutoloadGenerator(); $generator->setDevMode($event->isDevMode()); $generator->dump($composer->getConfig(), $composer->getRepositoryManager()->getLocalRepository(), $composer->getPackage(), $composer->getInstallationManager(), 'composer', !$event->isDevMode()); $event->getIO()->write('-> generated composer autoload files'); }
/** * Creates the doctrine schema. * * @param Event $event */ public static function createDoctrineSchema(Event $event) { $envs = $event->isDevMode() ? ['dev', 'test'] : ['prod']; foreach ($envs as $env) { $cmd = sprintf('sententiaregum:install:database --no-interaction --apply-fixtures --env=%s', $env); if (!$event->isDevMode()) { $cmd .= ' --production-fixtures -s migrations'; } static::executeCommand($event, static::getConsoleDir($event, 'create doctrine schema'), $cmd); } }
/** * @param Event $event * @param $filename * @param $s3key * @throws \Exception */ protected static function getFile(Event $event, $filename, $s3key) { $env = getenv('SYRUP_ENV'); if (!$env) { $env = $event->isDevMode() ? 'dev' : 'prod'; } if (!in_array($env, ['dev', 'test', 'prod'])) { throw new \Exception('SYRUP_ENV only accepts value "dev", "test" or "prod"'); } if ($env == 'dev') { if ($event->getIO()->isInteractive()) { $event->getIO()->askAndValidate("<comment>Get <question>{$filename}</question> from development S3 bucket? [<options=bold>y</options=bold>/n/s]:\ny - yes <info>(default)</info>\nn - no <info>(manually input folder containing the file)</info>\ns - skip <info>(keep current file)</info>\n</comment>", function ($answer) use($event, $s3key, $filename, $env) { switch ($answer) { case "y": self::getFromS3($event->getIO(), $s3key, self::PARAMETERS_DIR . $filename, $env); break; case "n": self::getFromIO($event->getIO(), $filename); break; case "s": break; default: throw new \InvalidArgumentException("Invalid option! Please choose either y, n or s"); } }, 3, "y"); } elseif (file_exists("./{$filename}") && $event->getIO()->askConfirmation("Use './{$filename}'? [<options=bold>y</options=bold>/n]", true)) { self::getFromIO($event->getIO(), $filename, "."); } else { self::getFromS3($event->getIO(), $s3key, self::PARAMETERS_DIR . $filename, $env); } } else { self::getFromS3($event->getIO(), $s3key, self::PARAMETERS_DIR . $filename, $env); } }
public function onPostUpdate(Event $event) { $requires = []; $overrides = []; $resolutions = []; if ($event->isDevMode()) { $extra = $this->composer->getPackage()->getExtra(); $bower = isset($extra['bower']) ? $extra['bower'] : []; if (isset($bower['require-dev'])) { $requires = $this->_mergeDependencyVersions($requires, $bower['require-dev']); } } $packages = [$this->composer->getPackage()]; $packages = array_merge($packages, $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages()); foreach ($packages as $package) { if ($package instanceof CompletePackage) { $extra = $package->getExtra(); $bower = isset($extra['bower']) ? $extra['bower'] : []; if (isset($bower['require'])) { $requires = $this->_mergeDependencyVersions($requires, $bower['require']); } if (isset($bower['overrides'])) { $overrides = array_merge_recursive($overrides, $bower['overrides']); } if (isset($bower['resolutions'])) { $resolutions = $bower['resolutions']; } } } if (!$requires) { $this->info("No Bower packages are required by the application or by any installed Composer package"); } $dependencies = $this->_installBower($requires, $overrides, $resolutions); $this->info((count($dependencies) ?: "No") . " bower packages are installed"); }
/** * @param Event $event */ public static function overload(Event $event) { $extra = $event->getComposer()->getPackage()->getExtra(); if ($event->isDevMode()) { $envs = [static::EXTRA_OVERLOAD_CLASS, static::EXTRA_OVERLOAD_CLASS_DEV]; $cacheDir = static::EXTRA_OVERLOAD_CACHE_DIR_DEV; if (array_key_exists($cacheDir, $extra) === false) { $cacheDir = static::EXTRA_OVERLOAD_CACHE_DIR; } } else { $envs = [static::EXTRA_OVERLOAD_CLASS]; $cacheDir = static::EXTRA_OVERLOAD_CACHE_DIR; } foreach ($envs as $extraKey) { if (array_key_exists($extraKey, $extra)) { $autoload = $event->getComposer()->getPackage()->getAutoload(); if (array_key_exists('classmap', $autoload) === false) { $autoload['classmap'] = array(); } foreach ($extra[$extraKey] as $className => $infos) { static::generateProxy($extra[$cacheDir], $className, $infos['original-file']); $autoload['classmap'][$className] = $infos['overload-file']; } $event->getComposer()->getPackage()->setAutoload($autoload); } } }
/** * @param Event $event * @return null */ public static function checkHooks(Event $event) { $io = $event->getIO(); // Don't run pre-commit in non-dev mode if (!$event->isDevMode()) { return null; } // Cannot install pre-commit with a windows machine if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { return null; } $projectRoot = realpath(__DIR__ . '/../../../../../'); $packageHook = $projectRoot . '/bin/pre-commit'; if (strpos($projectRoot, 'laravel') !== false) { $projectRoot = realpath($projectRoot . '/../'); $packageHook = $projectRoot . '/laravel/bin/pre-commit'; } $hooksDir = realpath($projectRoot . '/.git/hooks/'); $newHook = $hooksDir . '/pre-commit'; if (@file_get_contents($newHook) !== @file_get_contents($packageHook)) { $io->write('<comment>GIT hooks are missing</comment>'); $symlink = symlink($packageHook, $newHook); if (false === $symlink) { $io->write('<error>Failed to symlink the GIT hooks</error>'); return null; } chmod($newHook, 0755); $defaultPhpCSFile = realpath(__DIR__ . '/../../.php_cs.example'); $newPhpCSFile = $projectRoot . '/.php_cs'; copy($defaultPhpCSFile, $newPhpCSFile); } $io->write('<info>GIT hooks are succesfully installed</info>'); }
public static function buildConfig(Event $event) { if (true === $event->isDevMode()) { $message = "Deprecated instalation script!!\n"; $message .= "Please replace it by \\PhpGitHooks\\Infrastructure\\Composer\\ConfiguratorScript::buildConfig\nin your composer.json file"; $event->getIO()->writeError(sprintf('<error>%s</error>', $message)); } }
public function onPostUpdate(Event $event) { $assetsLock = array('bower-dependencies' => array(), 'npm-dependencies' => array()); $packages = $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages(); $mergedNpmPackages = array(); // NPM install for dependencies that are not exposed. foreach ($packages as $package) { if ($package instanceof \Composer\Package\CompletePackage) { $extra = $package->getExtra(); if (!isset($extra['expose-npm-packages']) || $extra['expose-npm-packages'] != true) { $shrinkwrapDeps = $this->_installNpm($this->composer->getConfig()->get('vendor-dir') . '/' . $package->getName(), $package, false, array(), null); if ($shrinkwrapDeps) { $assetsLock['npm-dependencies'][$package->getName()] = $shrinkwrapDeps; } } else { $mergedNpmPackages[] = $package; } } } // NPM install for dependencies that are exposed on the root package. $shrinkwrapDeps = $this->_installNpm('.', $this->composer->getPackage(), $event->isDevMode(), $mergedNpmPackages, null); if ($shrinkwrapDeps) { $assetsLock['npm-dependencies']['self'] = $shrinkwrapDeps; } $this->_createNpmBinaries(); $requireBower = array(); if ($event->isDevMode()) { $extra = $this->composer->getPackage()->getExtra(); if (isset($extra['require-dev-bower'])) { $requireBower = $this->_mergeDependencyVersions($requireBower, $extra['require-dev-bower']); } } $packages = array($this->composer->getPackage()); $packages = array_merge($packages, $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages()); foreach ($packages as $package) { if ($package instanceof \Composer\Package\CompletePackageInterface) { $extra = $package->getExtra(); if (isset($extra['require-bower'])) { $requireBower = $this->_mergeDependencyVersions($requireBower, $extra['require-bower']); } } } $assetsLock['bower-dependencies'] = $this->_installBower($requireBower); $assetsLockFile = new JsonFile('composer-extra-assets.lock'); $assetsLockFile->write($assetsLock); }
/** * @param Event $event * * @return mixed */ public static function buildConfig(Event $event) { if (true === $event->isDevMode()) { $container = new AppKernel(); /** @var ConfigurationProcessorCommandHandler $processor */ $processor = $container->get('command.bus'); $processor->handle(new ConfigurationProcessorCommand($event->getIO())); } }
public static function buildConfig(Event $event) { if (true === $event->isDevMode()) { $container = new Container(); /** @var ConfiguratorProcessor $processor */ $processor = $container->get('configurator.processor'); $processor->setIO($event->getIO()); return $processor->process(); } }
private static function install(Event $event) { if (!$event->isDevMode()) { return; } $manager = new GitHookManager(); if ($manager->isInstalled() || $manager->install()) { $event->getIO()->write('Pre-commit hook has been successfully installed.'); } else { $event->getIO()->writeError('Some errors occurred during the installation process. Pre-commit hook are NOT installed.'); } }
public function start(Event $e) { $package = $this->composer->getPackage(); $fetches = array_merge($this->getFetchesInExtra($package, self::EXTRA_KEY), $this->findFetchesInRequire($package)); $this->baseDir = $this->determineBaseDir($fetches, self::DEFAULT_BASE_DIR); $this->targets = $this->processFetches($package, $fetches); if ($e->isDevMode()) { $devFetches = array_merge($this->getFetchesInExtra($package, self::EXTRA_KEY_DEV), $this->findFetchesInRequireDev($package)); $this->baseDirDev = $this->determineBaseDir($devFetches, self::DEFAULT_BASE_DIR_DEV); $this->targetsDev = $this->processFetches($package, $devFetches); } }
/** * @param Event $event * @return bool */ public static function setupPhpStorm(Event $event) { if ($event->isDevMode()) { try { (new IdeSetup(self::getProject(), new PhpStormIde()))->setup(); } catch (Exception $e) { null; } return true; } return false; }
/** * @param Event $event * * @return mixed */ public static function buildConfig(Event $event) { if (true === $event->isDevMode()) { $app = new AppKernel('dev', true); $app->boot(); $container = $app->getContainer(); /** * @var ConfigurationProcessorCommandHandler */ $processor = $container->get('bruli.command.bus'); $processor->handle(new ConfigurationProcessorCommand($event->getIO())); } }
public static function rebuildData(Event $event) { $io = $event->getIO(); if (!$event->isDevMode()) { $io->write('This script is only supported in development mode. Exiting.'); return; } $destroyed = self::destroyData($event); if ($destroyed) { MigrationHandler::runMigration(new Event($event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), ['--all'])); FixtureHandler::importFixture(new Event($event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), ['-target=honeybee.system_account::fixture::writer', '-fixture=20150819120801:import_demo_user'])); FixtureHandler::importFixture(new Event($event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), ['-target=hbdemo.commenting::fixture::writer', '-fixture=20150810231335:initial_test_data'])); } }
public function __construct(Event $event, PuliRunner $puliRunner = null) { $this->composer = $event->getComposer(); $this->io = $event->getIO(); $this->config = $this->composer->getConfig(); $this->isDev = $event->isDevMode(); $this->puliRunner = $puliRunner; $this->rootDir = Path::normalize(getcwd()); }
public function onPostUpdateInstall(Event $event) { $this->_installNpm('.', $this->composer->getPackage(), $event->isDevMode()); $packages = $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages(); foreach ($packages as $package) { if ($package instanceof \Composer\Package\CompletePackage) { $this->_installNpm('vendor/' . $package->getName(), $package, false); } } $requireBower = array(); if ($event->isDevMode()) { $extra = $this->composer->getPackage()->getExtra(); if (isset($extra['require-dev-bower'])) { foreach ($extra['require-dev-bower'] as $packageName => $versionConstraint) { if (isset($requireBower[$packageName]) && $requireBower[$packageName] != $versionConstraint) { $this->io->write("<error>ERROR: {$package->getName()} requires {$packageName} {$versionConstraint} but we have already {$requireBower[$packageName]}</error>"); } else { $requireBower[$packageName] = $versionConstraint; } } } } $packages = array($this->composer->getPackage()); $packages = array_merge($packages, $this->composer->getRepositoryManager()->getLocalRepository()->getCanonicalPackages()); foreach ($packages as $package) { if ($package instanceof \Composer\Package\CompletePackage) { $extra = $package->getExtra(); if (isset($extra['require-bower'])) { foreach ($extra['require-bower'] as $packageName => $versionConstraint) { if (isset($requireBower[$packageName]) && $requireBower[$packageName] != $versionConstraint) { $this->io->write("<error>ERROR: {$package->getName()} requires {$packageName} {$versionConstraint} but we have already {$requireBower[$packageName]}</error>"); } else { $requireBower[$packageName] = $versionConstraint; } } } } } if ($requireBower) { if (file_exists('bower.json')) { $p = json_decode(file_get_contents('bower.json'), true); if ($p['name'] != 'temp-composer-extra-asssets') { //assume we can overwrite our own temp one throw new \Exception("Can't install npm dependencies as there is already a bower.json"); } } $packageJson = array('name' => 'temp-composer-extra-asssets', 'repository' => array('type' => 'git'), 'dependencies' => $requireBower); file_put_contents('bower.json', json_encode($packageJson)); if (!file_exists('.bowerrc')) { $config = array('directory' => 'vendor/bower_components'); file_put_contents('.bowerrc', json_encode($config)); } $this->io->write(""); $this->io->write("installing bower dependencies..."); $cmd = "vendor/koala-framework/composer-extra-assets/node_modules/.bin/bower install"; passthru($cmd, $retVar); if ($retVar) { $this->io->write("<error>bower install failed</error>"); } } }
public static function createUser(Event $event) { self::call(new Event($event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), ['-route=honeybee.system_account.user.create'])); }
/** * Set the debug flag value in the application's config file. * * @param string $dir The application's root directory. * @param Event $event The composer event object. * @return void */ private static function setDebugLevel($dir, Event $event) { $io = $event->getIO(); $debug = $event->isDevMode() ? 'true' : 'false'; $config = $dir . '/config/app.php'; $originalContent = file_get_contents($config); $newContent = str_replace('__DEBUG__', $debug, $originalContent, $count); if ($count == 0) { $io->write('No debug placeholder to replace.'); return; } $result = file_put_contents($config, $newContent); if ($result) { $io->write('Updated debug value in config/app.php'); return; } $io->write('Unable to update debug value.'); }
/** * Throws exception if Composer is not in dev mode * * @param \Composer\Script\Event Composer Event * @throws Exception Throws exception if Composer is not in dev mode */ public static function confirmDevMode(Event $event) { if (!$event->isDevMode()) { throw new \Exception('Composer is not in dev mode. Will not create/modify ctags file.'); } }
public function __construct(Event $event, PuliRunner $puliRunner = null) { $this->composer = $event->getComposer(); $this->io = $event->getIO(); $this->config = $this->composer->getConfig(); $this->isDev = $event->isDevMode(); $this->puliRunner = $puliRunner; $this->rootDir = Path::normalize(getcwd()); $vendorDir = $this->config->get('vendor-dir'); // On TravisCI, $vendorDir is a relative path. Probably an old Composer // build or something. Usually, $vendorDir should be absolute already. $vendorDir = Path::makeAbsolute($vendorDir, $this->rootDir); $this->autoloadFile = $vendorDir . '/autoload.php'; }
/** * Delegate autoload dump to all the monorepo subdirectories. */ public function generateMonorepoAutoloads(Event $event) { $flags = $event->getFlags(); $optimize = isset($flags['optimize']) ? $flags['optimize'] : false; $this->build->build(getcwd(), $optimize, !$event->isDevMode()); }
/** * Handle post install command events. * * @param Event $event The event to handle. * * @throws NpmNotFoundException If the npm executable cannot be located. * @throws NpmCommandFailedException If the operation fails. */ public function onPostInstallCmd(Event $event) { $this->bridgeFactory->createBridge($event->getIO())->install($event->getComposer(), $event->isDevMode()); }
/** * Run the build tools * * @param Event $event */ public function runBuildTools(Event $event) { foreach ($this->finder->getDependentPackages($event->isDevMode()) as $package) { $this->runner->runBuildTools($package, $event->isDevMode()); } }
/** * Handle post install command events. * * @param Event $event The event to handle. * * @throws Exception\GruntNotFoundException If the grunt executable cannot be located. * @throws Exception\GruntCommandFailedException If the operation fails. */ public function onPostInstallCmd(Event $event) { $this->bridgeFactory()->create($event->getIO())->runGruntTasks($event->getComposer(), $event->isDevMode()); }
/** * Handle an event callback following an install or update command. If our * plugin was installed during the run then trigger an update command to * process any merge-patterns in the current config. * * @param Event $event */ public function onPostInstallOrUpdate(Event $event) { if ($this->pluginFirstInstall) { $this->pluginFirstInstall = false; $this->debug('<comment>' . 'Running additional update to apply merge settings' . '</comment>'); $config = $this->composer->getConfig(); $preferSource = $config->get('preferred-install') == 'source'; $preferDist = $config->get('preferred-install') == 'dist'; $installer = Installer::create($event->getIO(), Factory::create($event->getIO(), null, false)); $installer->setPreferSource($preferSource); $installer->setPreferDist($preferDist); $installer->setDevMode($event->isDevMode()); $installer->setDumpAutoloader($this->dumpAutoloader); $installer->setOptimizeAutoloader($this->optimizeAutoloader); // Force update mode so that new packages are processed rather // than just telling the user that composer.json and composer.lock // don't match. $installer->setUpdate(true); $installer->run(); } }
/** * Run gulp build * * @param Event $event */ public static function gulpBuild(Event $event) { static::runCommandOnlyInDevMode('gulp build', $event->getIO(), $event->isDevMode()); }
/** * Handle an event callback following an install or update command. If our * plugin was installed during the run then trigger an update command to * process any merge-patterns in the current config. * * @param Event $event */ public function onPostInstallOrUpdate(Event $event) { // @codeCoverageIgnoreStart if ($this->state->isFirstInstall()) { $this->state->setFirstInstall(false); $this->logger->info('<comment>' . 'Running additional update to apply merge settings' . '</comment>'); $config = $this->composer->getConfig(); $preferSource = $config->get('preferred-install') == 'source'; $preferDist = $config->get('preferred-install') == 'dist'; $installer = Installer::create($event->getIO(), Factory::create($event->getIO(), null, false)); $installer->setPreferSource($preferSource); $installer->setPreferDist($preferDist); $installer->setDevMode($event->isDevMode()); $installer->setDumpAutoloader($this->state->shouldDumpAutoloader()); $installer->setOptimizeAutoloader($this->state->shouldOptimizeAutoloader()); if ($this->state->forceUpdate()) { // Force update mode so that new packages are processed rather // than just telling the user that composer.json and // composer.lock don't match. $installer->setUpdate(true); } $installer->run(); } // @codeCoverageIgnoreEnd }
/** * Run first install. * * @param \Composer\Script\Event $event * * @throws \Exception * * @codeCoverageIgnore */ private function runFirstInstall(ScriptEvent $event) { $installer = Installer::create($event->getIO(), Factory::create($event->getIO(), null, false)); $installer->setPreferSource($this->isPreferredInstall('source')); $installer->setPreferDist($this->isPreferredInstall('dist')); $installer->setDevMode($event->isDevMode()); $installer->setDumpAutoloader($this->state->shouldDumpAutoloader()); $installer->setOptimizeAutoloader($this->state->shouldOptimizeAutoloader()); if ($this->state->forceUpdate()) { // Force update mode so that new packages are processed rather than just telling // the user that composer.json and composer.lock don't match. $installer->setUpdate(true); } $installer->run(); }