Migrate skeleton to Studio UI with installer profile#255
Merged
Conversation
Replace admin-ui-classic-bundle with studio-backend-bundle and studio-ui-bundle, add required dependency bundles (GenericExecutionEngine, CustomReports, GenericDataIndex, Quill), and create an InstallProfileInterface-based installer profile for the new profile-first installation flow. Key changes: - Add SkeletonProfile installer profile with OpenSearch, AMQP, Mercure, and product registration env var definitions - Update security.yaml firewall and access control for Studio API endpoints - Wire Mercure settings and CSP connect-src via env vars in config - Add mercure, opensearch, and opensearch-dashboards Docker services - Update supervisord to consume new messenger queues - Remove dead BundleSetupSubscriber and PimcoreAdminBundle references - Add error_pages defaults to work around vendor config gap
…om .env - Remove DATABASE_URL from .env to prevent Doctrine ProxyCacheWarmer from crashing during composer create-project (no DB available in standalone Docker container) - Update CI env var names from old PIMCORE_INSTALL_* to new PIMCORE_* - Pass only DATABASE_URL and product registration secrets via -e flags; everything else is read from .env by the installer - Remove obsolete PIMCORE_INSTALL_* env vars from test-php service - Skip opensearch/amqp validation in CI (services may still be starting) - Use --install-profile for codeception test installation step
…se, wait for services - Use 'composer create-project --no-install' to avoid ProxyCacheWarmer crash when DATABASE_URL references unavailable Docker services - Install dependencies inside docker-compose where all services exist - Use dockerize to wait for db, opensearch, and rabbitmq before install - Move DATABASE_URL back into .env (safe now that composer install runs inside docker-compose instead of during create-project) - Only pass product registration secrets via -e (everything else in .env) - Add --skip-validation for opensearch/amqp/mercure in test-php (those services are not available in the test profile)
jdreesen
reviewed
Mar 25, 2026
The php container runs as non-root user (uid set via sed) which cannot write to /usr/local/bin/. Use --user=root for the dockerize installation step only.
Symfony skips .env.local when APP_ENV=test, so the encryption secret written by the installer is not visible to the test runner. Pass the three product registration env vars explicitly via -e flags.
…php-http/discovery plugin
…-enterprise pattern
…d set The encryption secret, instance identifier, and product key are cryptographically linked — the product key is validated against the encryption secret. Hardcoding a different encryption secret in the test config would cause product registration validation to fail.
bluvulture
approved these changes
Mar 26, 2026
Contributor
bluvulture
left a comment
There was a problem hiding this comment.
lgtm - we will sort out dockerize in the follow up pr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
admin-ui-classic-bundlewithstudio-backend-bundle+studio-ui-bundleand add required dependency bundles (GenericExecutionEngine, CustomReports, GenericDataIndex, Quill)SkeletonProfileinstaller profile implementingInstallProfileInterfacefor the new profile-first installation flow (vendor/bin/pimcore-install --install-profile='App\Installer\SkeletonProfile')Changes
Installer Profile (
src/Installer/SkeletonProfile.php)New
InstallProfileInterfaceimplementation with:Security (
config/packages/security.yaml)pimcore_adminfirewall (%pimcore_admin_bundle.firewall_settings%) withpimcore_studio(%pimcore_studio_backend.firewall_settings%)/admin/*to/pimcore-studio/api/*Configuration
config/config.yaml: Wirepimcore_studio_backendMercure settings andpimcore_studio_uiCSPconnect-srcvia env vars; adderror_pagesdefaults to work around vendor config gapconfig/services.yaml: Replace hardcodedsecretwith%env(APPLICATION_SECRET)%; add Mercure JWT key parameterconfig/bundles.php: Register all 6 Studio bundlesconfig/installer.yaml: Remove deadBundleSetupSubscriberreferenceDocker (
docker-compose.yaml)mercureservice with CORS configured forhttp://localhostopensearchandopensearch-dashboardsservicesPIMCORE_INSTALL_MYSQL_*env vars fromphpservice (replaced by installer profile)user: '1000:1000'for php and supervisord servicesMessenger (
.docker/supervisord.conf)pimcore_generic_execution_engine,pimcore_generic_data_index_queue,scheduler_generic_data_index,pimcore_generic_data_index_failed,pimcore_asset_updateRemoved
src/EventSubscriber/BundleSetupSubscriber.php— referenced removedInstallEvents::EVENT_BUNDLE_SETUPAPIPimcoreAdminBundleregistration fromKernel.php