Skip to content

Migrate skeleton to Studio UI with installer profile#255

Merged
mcop1 merged 12 commits into2026.xfrom
installer_profile
Mar 26, 2026
Merged

Migrate skeleton to Studio UI with installer profile#255
mcop1 merged 12 commits into2026.xfrom
installer_profile

Conversation

@mcop1
Copy link
Copy Markdown
Contributor

@mcop1 mcop1 commented Mar 25, 2026

Summary

  • Replace admin-ui-classic-bundle with studio-backend-bundle + studio-ui-bundle and add required dependency bundles (GenericExecutionEngine, CustomReports, GenericDataIndex, Quill)
  • Create SkeletonProfile installer profile implementing InstallProfileInterface for the new profile-first installation flow (vendor/bin/pimcore-install --install-profile='App\Installer\SkeletonProfile')
  • Add Docker services for Mercure, OpenSearch, and OpenSearch Dashboards; wire Mercure JWT/URLs and CSP via env vars

Changes

Installer Profile (src/Installer/SkeletonProfile.php)

New InstallProfileInterface implementation with:

  • 6 bundles in correct dependency order (GenericExecutionEngine → CustomReports → GenericDataIndex → StudioBackend → StudioUI → Quill)
  • Env var definitions: Database, OpenSearch, AMQP Messenger, Mercure, Product Registration, Application Secret
  • Clean install (no data source)

Security (config/packages/security.yaml)

  • Replace pimcore_admin firewall (%pimcore_admin_bundle.firewall_settings%) with pimcore_studio (%pimcore_studio_backend.firewall_settings%)
  • Update access control rules from /admin/* to /pimcore-studio/api/*

Configuration

  • config/config.yaml: Wire pimcore_studio_backend Mercure settings and pimcore_studio_ui CSP connect-src via env vars; add error_pages defaults to work around vendor config gap
  • config/services.yaml: Replace hardcoded secret with %env(APPLICATION_SECRET)%; add Mercure JWT key parameter
  • config/bundles.php: Register all 6 Studio bundles
  • config/installer.yaml: Remove dead BundleSetupSubscriber reference

Docker (docker-compose.yaml)

  • Add mercure service with CORS configured for http://localhost
  • Add opensearch and opensearch-dashboards services
  • Remove old PIMCORE_INSTALL_MYSQL_* env vars from php service (replaced by installer profile)
  • Uncomment user: '1000:1000' for php and supervisord services

Messenger (.docker/supervisord.conf)

  • Add new queues: pimcore_generic_execution_engine, pimcore_generic_data_index_queue, scheduler_generic_data_index, pimcore_generic_data_index_failed, pimcore_asset_update

Removed

  • src/EventSubscriber/BundleSetupSubscriber.php — referenced removed InstallEvents::EVENT_BUNDLE_SETUP API
  • PimcoreAdminBundle registration from Kernel.php

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
@mcop1 mcop1 self-assigned this Mar 25, 2026
@mcop1 mcop1 added the Task label Mar 25, 2026
@mcop1 mcop1 added this to the 2026.1.0 milestone Mar 25, 2026
mcop1 added 2 commits March 25, 2026 19:37
…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)
@mcop1 mcop1 marked this pull request as draft March 26, 2026 08:07
mcop1 added 5 commits March 26, 2026 09:33
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.
@mcop1 mcop1 marked this pull request as ready for review March 26, 2026 10:14
@mcop1 mcop1 marked this pull request as draft March 26, 2026 10:14
@mcop1 mcop1 marked this pull request as ready for review March 26, 2026 10:14
mcop1 added 3 commits March 26, 2026 11:25
…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.
Copy link
Copy Markdown
Contributor

@bluvulture bluvulture left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm - we will sort out dockerize in the follow up pr

@mcop1 mcop1 merged commit d88085e into 2026.x Mar 26, 2026
2 checks passed
@mcop1 mcop1 deleted the installer_profile branch March 26, 2026 11:01
@github-actions github-actions bot locked and limited conversation to collaborators Mar 26, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants