/**
* Builds a boot sequence with the minimum modules necessary for both, compiletime
* and runtime.
*
* @param string $identifier
* @return Sequence
* @api
*/
public function buildEssentialsSequence($identifier)
{
$sequence = new Sequence($identifier);
if ($this->context->isProduction()) {
$lockManager = new LockManager();
$lockManager->exitIfSiteLocked();
if ($identifier === 'compiletime') {
$lockManager->lockSiteOrExit();
// make sure the site is unlocked even if the script ends unexpectedly due to an error/exception
register_shutdown_function([$lockManager, 'unlockSite']);
}
$this->setEarlyInstance(LockManager::class, $lockManager);
}
$sequence->addStep(new Step('neos.flow:annotationregistry', [Scripts::class, 'registerClassLoaderInAnnotationRegistry']));
$sequence->addStep(new Step('neos.flow:configuration', [Scripts::class, 'initializeConfiguration']), 'neos.flow:annotationregistry');
$sequence->addStep(new Step('neos.flow:systemlogger', [Scripts::class, 'initializeSystemLogger']), 'neos.flow:configuration');
$sequence->addStep(new Step('neos.flow:errorhandling', [Scripts::class, 'initializeErrorHandling']), 'neos.flow:systemlogger');
$sequence->addStep(new Step('neos.flow:cachemanagement', [Scripts::class, 'initializeCacheManagement']), 'neos.flow:systemlogger');
return $sequence;
}