From eba33d0735b20afe5807aa88eeb77fc5df437bce Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Fri, 24 Apr 2026 20:00:42 +0200 Subject: [PATCH] Use CI volume for PHP app tests --- .github/docker-compose.ci.yml | 29 ++++++++++++ .github/workflows/tests.yml | 88 ++++++++++------------------------- 2 files changed, 53 insertions(+), 64 deletions(-) create mode 100644 .github/docker-compose.ci.yml diff --git a/.github/docker-compose.ci.yml b/.github/docker-compose.ci.yml new file mode 100644 index 00000000..b607519f --- /dev/null +++ b/.github/docker-compose.ci.yml @@ -0,0 +1,29 @@ +services: + caddy: + volumes: + - ci_php_app:/var/www/html + + php1: + environment: + AUTO_COMPOSER_INSTALL: "false" + volumes: + - ci_php_app:/var/www/html + + php2: + volumes: + - ci_php_app:/var/www/html + + php3: + volumes: + - ci_php_app:/var/www/html + + php4: + volumes: + - ci_php_app:/var/www/html + + php5: + volumes: + - ci_php_app:/var/www/html + +volumes: + ci_php_app: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7700c269..5a262d3e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,30 +40,20 @@ jobs: printf '%s\n' "$COMPOSE_ENV_STAGING" > .env.staging - name: Boot php1 test stack - run: docker compose -f docker-compose.yml up -d redis mysql-debug php1 + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml up -d redis mysql-debug php1 - name: Sync PHP app checkout - run: | - docker compose -f docker-compose.yml exec -T php1 sh -lc ' - cd /var/www/html - find . -mindepth 1 -maxdepth 1 ! -name vendor ! -name modules -exec rm -rf {} + - mkdir -p modules - find modules -mindepth 1 -maxdepth 1 ! -name washcertificates -exec rm -rf {} + - if [ -d modules/washcertificates ]; then - find modules/washcertificates -mindepth 1 -maxdepth 1 ! -name vendor -exec rm -rf {} + - fi - ' - tar -C services/nginx/app --exclude='./vendor' --exclude='./vendor/*' --exclude='./modules/washcertificates/vendor' --exclude='./modules/washcertificates/vendor/*' -cf - . | docker compose -f docker-compose.yml exec -T php1 tar -C /var/www/html -xf - + run: tar -C services/nginx/app -cf - . | docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 tar -C /var/www/html -xf - - name: Resolve dependencies - run: docker compose -f docker-compose.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" - name: Run unit tests - run: docker compose -f docker-compose.yml exec -T php1 sh -lc "cd /var/www/html && composer test:unit" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && composer test:unit" - name: Generate coverage report run: | - docker compose -f docker-compose.yml exec -T php1 sh -lc "cd /var/www/html && if php -m | grep -Eq '^(pcov|xdebug)$'; then composer test:coverage; else echo 'Skipping coverage: no pcov/xdebug extension available in php1 image.'; fi" + docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && if php -m | grep -Eq '^(pcov|xdebug)$'; then composer test:coverage; else echo 'Skipping coverage: no pcov/xdebug extension available in php1 image.'; fi" - name: Upload coverage artifact if: ${{ github.event_name == 'pull_request' }} @@ -77,7 +67,7 @@ jobs: - name: Tear down php1 test stack if: always() - run: docker compose -f docker-compose.yml down -v + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml down -v edge-agent: name: Edge Agent (required) @@ -151,7 +141,7 @@ jobs: name: Edge Gateway Backend (required) runs-on: [self-hosted, Linux, X64, default] env: - COMPOSE_FILE: docker-compose.yml + COMPOSE_FILE: docker-compose.yml:.github/docker-compose.ci.yml TRAEFIK_WEB_PORT: "18080" TRAEFIK_WEBSECURE_PORT: "18443" TRAEFIK_WEBSECURE_STAGING_PORT: "18433" @@ -185,27 +175,17 @@ jobs: node-version: 22 - name: Boot local stack - run: docker compose -f docker-compose.yml up -d traefik redis mysql-debug edge-broker php1 caddy + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml up -d traefik redis mysql-debug edge-broker php1 caddy - name: Sync PHP app checkout - run: | - docker compose -f docker-compose.yml exec -T php1 sh -lc ' - cd /var/www/html - find . -mindepth 1 -maxdepth 1 ! -name vendor ! -name modules -exec rm -rf {} + - mkdir -p modules - find modules -mindepth 1 -maxdepth 1 ! -name washcertificates -exec rm -rf {} + - if [ -d modules/washcertificates ]; then - find modules/washcertificates -mindepth 1 -maxdepth 1 ! -name vendor -exec rm -rf {} + - fi - ' - tar -C services/nginx/app --exclude='./vendor' --exclude='./vendor/*' --exclude='./modules/washcertificates/vendor' --exclude='./modules/washcertificates/vendor/*' -cf - . | docker compose -f docker-compose.yml exec -T php1 tar -C /var/www/html -xf - + run: tar -C services/nginx/app -cf - . | docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 tar -C /var/www/html -xf - - name: Resolve dependencies - run: docker compose -f docker-compose.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" - name: Verify edge gateway test files run: > - docker compose -f docker-compose.yml exec -T php1 sh -lc + docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && php -r '\$composer = json_decode(file_get_contents(\"composer.json\"), true); echo \"Composer scripts: \", implode(\",\", array_keys(\$composer[\"scripts\"] ?? [])), PHP_EOL;' && find tests/Api -maxdepth 1 -type f -name 'EdgeGateway*ApiTest.php' -print && @@ -215,7 +195,7 @@ jobs: - name: Run edge gateway API tests run: > - docker compose -f docker-compose.yml exec -T php1 sh -lc + docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && RUN_API_TESTS=1 API_TEST_BOOTSTRAP_SCHEMA=1 @@ -231,7 +211,7 @@ jobs: - name: Run edge gateway integration tests run: > - docker compose -f docker-compose.yml exec -T php1 sh -lc + docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && RUN_INTEGRATION_TESTS=1 CONFIG_DB_TARGET=debug @@ -243,7 +223,7 @@ jobs: - name: Tear down local stack if: always() - run: docker compose -f docker-compose.yml down -v + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml down -v integration: name: Integration (advisory) @@ -272,30 +252,20 @@ jobs: printf '%s\n' "$COMPOSE_ENV_STAGING" > .env.staging - name: Boot integration stack - run: docker compose -f docker-compose.yml up -d redis mysql-debug php1 + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml up -d redis mysql-debug php1 - name: Sync PHP app checkout - run: | - docker compose -f docker-compose.yml exec -T php1 sh -lc ' - cd /var/www/html - find . -mindepth 1 -maxdepth 1 ! -name vendor ! -name modules -exec rm -rf {} + - mkdir -p modules - find modules -mindepth 1 -maxdepth 1 ! -name washcertificates -exec rm -rf {} + - if [ -d modules/washcertificates ]; then - find modules/washcertificates -mindepth 1 -maxdepth 1 ! -name vendor -exec rm -rf {} + - fi - ' - tar -C services/nginx/app --exclude='./vendor' --exclude='./vendor/*' --exclude='./modules/washcertificates/vendor' --exclude='./modules/washcertificates/vendor/*' -cf - . | docker compose -f docker-compose.yml exec -T php1 tar -C /var/www/html -xf - + run: tar -C services/nginx/app -cf - . | docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 tar -C /var/www/html -xf - - name: Resolve dependencies - run: docker compose -f docker-compose.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" - name: Run integration tests - run: docker compose -f docker-compose.yml exec -T -e RUN_INTEGRATION_TESTS=1 php1 sh -lc "cd /var/www/html && composer test:integration" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T -e RUN_INTEGRATION_TESTS=1 php1 sh -lc "cd /var/www/html && composer test:integration" - name: Tear down integration stack if: always() - run: docker compose -f docker-compose.yml down -v + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml down -v api: name: API (advisory) @@ -324,27 +294,17 @@ jobs: printf '%s\n' "$COMPOSE_ENV_STAGING" > .env.staging - name: Boot API stack - run: docker compose -f docker-compose.yml up -d redis mysql-debug php1 + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml up -d redis mysql-debug php1 - name: Sync PHP app checkout - run: | - docker compose -f docker-compose.yml exec -T php1 sh -lc ' - cd /var/www/html - find . -mindepth 1 -maxdepth 1 ! -name vendor ! -name modules -exec rm -rf {} + - mkdir -p modules - find modules -mindepth 1 -maxdepth 1 ! -name washcertificates -exec rm -rf {} + - if [ -d modules/washcertificates ]; then - find modules/washcertificates -mindepth 1 -maxdepth 1 ! -name vendor -exec rm -rf {} + - fi - ' - tar -C services/nginx/app --exclude='./vendor' --exclude='./vendor/*' --exclude='./modules/washcertificates/vendor' --exclude='./modules/washcertificates/vendor/*' -cf - . | docker compose -f docker-compose.yml exec -T php1 tar -C /var/www/html -xf - + run: tar -C services/nginx/app -cf - . | docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 tar -C /var/www/html -xf - - name: Resolve dependencies - run: docker compose -f docker-compose.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T php1 sh -lc "cd /var/www/html && composer update --no-interaction --prefer-dist" - name: Run API tests - run: docker compose -f docker-compose.yml exec -T -e RUN_API_TESTS=1 -e API_TEST_BOOTSTRAP_SCHEMA=1 php1 sh -lc "cd /var/www/html && composer test:api" + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml exec -T -e RUN_API_TESTS=1 -e API_TEST_BOOTSTRAP_SCHEMA=1 php1 sh -lc "cd /var/www/html && composer test:api" - name: Tear down API stack if: always() - run: docker compose -f docker-compose.yml down -v + run: docker compose -f docker-compose.yml -f .github/docker-compose.ci.yml down -v