From 026626c612a98c9a92c3cef109999fbcc92c691b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Szo=C5=82tysek?= Date: Tue, 25 Aug 2026 11:41:50 +0200 Subject: [PATCH 1/2] IBX-11919: Build CI assets with yarn encore prod Browser-tests CI runs the app under APP_ENV=behat throughout the pipeline. ibexa:encore:compile decides between yarn encore dev/prod based on the ambient console --env option, which defaults to APP_ENV, so every composer run post-install-cmd call in this workflow was silently compiling assets in dev mode. Override APP_ENV=prod for just those composer run post-install-cmd exec calls (initial compatibility-layer setup, multirepository setup, and both test-setup phases), so asset compilation uses a production build while the app container keeps running under APP_ENV=behat for the actual Behat test execution. --- .github/workflows/browser-tests.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/browser-tests.yml b/.github/workflows/browser-tests.yml index 6ad8ec0..4dc915b 100644 --- a/.github/workflows/browser-tests.yml +++ b/.github/workflows/browser-tests.yml @@ -254,7 +254,7 @@ jobs: cd ${HOME}/build/project docker compose --env-file=.env exec -T app sh -c "composer require ibexa/compatibility-layer:${{ steps.project-version.outputs.version }} --no-scripts --no-plugins" docker compose --env-file=.env exec -T app sh -c "composer recipes:install ibexa/compatibility-layer --force" - docker compose --env-file=.env exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" - if: inputs.multirepository && contains(inputs.setup, 'solr8.yml') name: Set up multirepository build with Solr @@ -267,9 +267,9 @@ jobs: # Run setup docker compose exec -T --user www-data app sh -c "vendor/bin/ibexabehat --mode=standard --profile=setup --suite=multirepository -c=behat_ibexa_oss.yaml --tags=~@elastic" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" else - docker compose exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" fi # Reinstall database using the new repository docker compose exec -T --user www-data app sh -c "php bin/console ibexa:install --no-interaction" @@ -285,9 +285,9 @@ jobs: # Run setup docker compose exec -T --user www-data app sh -c "vendor/bin/ibexabehat --mode=standard --profile=setup --suite=multirepository -c=behat_ibexa_oss.yaml --tags=~@solr" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" else - docker compose exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" fi # Reinstall database using the new repository docker compose exec -T --user www-data app sh -c "php bin/console ibexa:install --no-interaction" @@ -303,9 +303,9 @@ jobs: # Run setup docker compose exec -T --user www-data app sh -c "vendor/bin/ibexabehat --mode=standard --profile=setup --suite=multirepository -c=behat_ibexa_oss.yaml --tags=@multirepository" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" else - docker compose exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" fi # Reinstall database using the new repository docker compose exec -T --user www-data app sh -c "php bin/console ibexa:install --no-interaction" @@ -322,9 +322,9 @@ jobs: cd ${HOME}/build/project docker compose --env-file=.env exec -T --user www-data app sh -c "vendor/bin/ibexabehat ${{ inputs.test-setup-phase-1 }}" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose --env-file=.env exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" else - docker compose --env-file=.env exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" fi - if: inputs.test-setup-phase-2 != '' @@ -333,9 +333,9 @@ jobs: cd ${HOME}/build/project docker compose --env-file=.env exec -T --user www-data app sh -c "vendor/bin/ibexabehat ${{ inputs.test-setup-phase-2 }}" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose --env-file=.env exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" else - docker compose --env-file=.env exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" fi - name: Run tests From 5643666e4e78b8b5e455e20bdf423f20000a6f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Szo=C5=82tysek?= Date: Wed, 2 Sep 2026 10:54:28 +0200 Subject: [PATCH 2/2] IBX-11919: Scope prod asset build to the yarn encore step only Same fix as the companion ci-scripts change: overriding APP_ENV=prod for the whole `composer run post-install-cmd` call also switches the Symfony kernel env used by cache:clear, which excludes IbexaBehatBundle (registered only for 'behat') from kernel.bundles_metadata. That silently drops ibexa/behat's encore config (transition-listener.js) from var/encore/*.js, so the compiled admin-ui bundle never adds the ibexa-selenium-transition-* marker classes Behat's transition-wait conditions poll for. Run post-install-cmd unmodified in all 11 call sites (still under the behat env, so the generated var/encore manifest stays correct), then rebuild assets in production mode via a separate, plain `yarn encore prod` call that never touches the Symfony kernel/env. --- .github/workflows/browser-tests.yml | 33 +++++++++++++++++++---------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/.github/workflows/browser-tests.yml b/.github/workflows/browser-tests.yml index 4dc915b..cccf737 100644 --- a/.github/workflows/browser-tests.yml +++ b/.github/workflows/browser-tests.yml @@ -254,7 +254,8 @@ jobs: cd ${HOME}/build/project docker compose --env-file=.env exec -T app sh -c "composer require ibexa/compatibility-layer:${{ steps.project-version.outputs.version }} --no-scripts --no-plugins" docker compose --env-file=.env exec -T app sh -c "composer recipes:install ibexa/compatibility-layer --force" - docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "yarn encore prod --config-name app && yarn encore prod" - if: inputs.multirepository && contains(inputs.setup, 'solr8.yml') name: Set up multirepository build with Solr @@ -267,9 +268,11 @@ jobs: # Run setup docker compose exec -T --user www-data app sh -c "vendor/bin/ibexabehat --mode=standard --profile=setup --suite=multirepository -c=behat_ibexa_oss.yaml --tags=~@elastic" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod --config-name app && NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod" else - docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "yarn encore prod --config-name app && yarn encore prod" fi # Reinstall database using the new repository docker compose exec -T --user www-data app sh -c "php bin/console ibexa:install --no-interaction" @@ -285,9 +288,11 @@ jobs: # Run setup docker compose exec -T --user www-data app sh -c "vendor/bin/ibexabehat --mode=standard --profile=setup --suite=multirepository -c=behat_ibexa_oss.yaml --tags=~@solr" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod --config-name app && NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod" else - docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "yarn encore prod --config-name app && yarn encore prod" fi # Reinstall database using the new repository docker compose exec -T --user www-data app sh -c "php bin/console ibexa:install --no-interaction" @@ -303,9 +308,11 @@ jobs: # Run setup docker compose exec -T --user www-data app sh -c "vendor/bin/ibexabehat --mode=standard --profile=setup --suite=multirepository -c=behat_ibexa_oss.yaml --tags=@multirepository" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod --config-name app && NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod" else - docker compose exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose exec -T --user www-data app sh -c "yarn encore prod --config-name app && yarn encore prod" fi # Reinstall database using the new repository docker compose exec -T --user www-data app sh -c "php bin/console ibexa:install --no-interaction" @@ -322,9 +329,11 @@ jobs: cd ${HOME}/build/project docker compose --env-file=.env exec -T --user www-data app sh -c "vendor/bin/ibexabehat ${{ inputs.test-setup-phase-1 }}" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod --config-name app && NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod" else - docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "yarn encore prod --config-name app && yarn encore prod" fi - if: inputs.test-setup-phase-2 != '' @@ -333,9 +342,11 @@ jobs: cd ${HOME}/build/project docker compose --env-file=.env exec -T --user www-data app sh -c "vendor/bin/ibexabehat ${{ inputs.test-setup-phase-2 }}" if [[ "${{ steps.project-version.outputs.version }}" == *'5.0.x-dev'* ]]; then - docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod --config-name app && NODE_OPTIONS='--max-old-space-size=3072' yarn encore prod" else - docker compose --env-file=.env exec -T --user www-data -e APP_ENV=prod app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "composer run post-install-cmd" + docker compose --env-file=.env exec -T --user www-data app sh -c "yarn encore prod --config-name app && yarn encore prod" fi - name: Run tests