From 8f96d6ed0adc22897a26ab737cbef8b9fb491766 Mon Sep 17 00:00:00 2001 From: tuutti Date: Thu, 12 Dec 2024 19:58:19 +0200 Subject: [PATCH 1/4] UHF-11131: Run tests and artifact using full Docker compose setup --- .github/workflows/artifact.yml.dist | 38 +++++++-------- .github/workflows/test.yml.dist | 75 +++++++++++++---------------- 2 files changed, 52 insertions(+), 61 deletions(-) diff --git a/.github/workflows/artifact.yml.dist b/.github/workflows/artifact.yml.dist index 2287bfb..969bfa8 100644 --- a/.github/workflows/artifact.yml.dist +++ b/.github/workflows/artifact.yml.dist @@ -8,32 +8,32 @@ name: Build artifacts jobs: build: runs-on: ubuntu-latest - container: - image: ghcr.io/city-of-helsinki/drupal-web:8.3 - - services: - db: - image: mysql:8 - env: - MYSQL_USER: drupal - MYSQL_PASSWORD: drupal - MYSQL_DATABASE: drupal - MYSQL_ROOT_PASSWORD: drupal - ports: - - 3306:3306 - steps: - uses: actions/checkout@v4 + - name: Install and start Stonehenge + run: | + git clone -b 5.x https://github.com/druidfi/stonehenge.git ~/stonehenge + cd ~/stonehenge && make up + + # This must be done after we start Stonehenge. + - name: Setup Docker compose environment variables + run: | + echo "COMPOSE_FILE=compose.yaml:compose.ci.yaml" >> $GITHUB_ENV + + - name: Start project + run: make up + - name: Build project - run: composer install --no-interaction + run: docker compose exec app bash -c "composer install --no-interaction" - name: Setup drupal and save database dump run: | - drush si -y && drush cr - drush si --existing-config -y - drush cim -y - drush sql-dump --result-file=${GITHUB_WORKSPACE}/latest.sql + docker compose exec app bash -c "drush si -y && drush cr" + docker compose exec app bash -c "drush si --existing-config -y" + docker compose exec app bash -c "drush cr" + docker compose exec app bash -c "drush cim -y" + docker compose exec app bash -c "drush sql-dump --result-file=/app/latest.sql" - name: Upload latest database dump uses: actions/upload-artifact@v4 diff --git a/.github/workflows/test.yml.dist b/.github/workflows/test.yml.dist index 9ae35ac..232aff5 100644 --- a/.github/workflows/test.yml.dist +++ b/.github/workflows/test.yml.dist @@ -3,39 +3,12 @@ on: push: branches: ['main', 'dev'] name: CI -env: - SYMFONY_DEPRECATIONS_HELPER: disabled jobs: tests: runs-on: ubuntu-latest - container: - image: ghcr.io/city-of-helsinki/drupal-web:8.3 - options: --hostname app --user 1001 - - services: - db: - image: mysql:8 - env: - MYSQL_USER: drupal - MYSQL_PASSWORD: drupal - MYSQL_DATABASE: drupal - MYSQL_ROOT_PASSWORD: drupal - ports: - - 3306:3306 steps: - uses: actions/checkout@v4 - # Actions worker overrides the default entrypoint with "tail -f /dev/null", so - # we have to start services manually. - - name: Start services - env: - WEBROOT: ${{ github.workspace }}/public - run: entrypoint & - - - name: Set browsertest output folder - run: | - echo "BROWSERTEST_OUTPUT_DIRECTORY=$GITHUB_WORKSPACE/public/sites/simpletest" >> $GITHUB_ENV - - name: Make sure configuration was exported in correct language (en or und) run: | OUTPUT=$(grep -oP '^langcode: \b(?!(?:en|und)\b)\w+' conf -R || true) @@ -46,22 +19,36 @@ jobs: exit 1 fi + - name: Install and start Stonehenge + run: | + git clone -b 5.x https://github.com/druidfi/stonehenge.git ~/stonehenge + cd ~/stonehenge && make up + + # This must be done after we start Stonehenge. + - name: Setup Docker compose environment variables + run: | + echo "COMPOSE_FILE=compose.yaml:compose.ci.yaml" >> $GITHUB_ENV + echo "COMPOSE_PROFILES=" >> $GITHUB_ENV + + - name: Start project + run: make up + - name: Build project - run: composer install --no-interaction + run: docker compose exec app bash -c "composer install --no-interaction" - name: Scan security updates - run: composer audit + run: docker compose exec app bash -c "composer audit" - name: Check that subtheme is not built with dev mode - run: if grep -q 'sourceMappingURL=' -R public/themes/custom/hdbt_subtheme/dist/css; then exit 1; fi + run: docker compose exec app bash -c "if grep -q 'sourceMappingURL=' -R public/themes/custom/hdbt_subtheme/dist/css; then exit 1; fi" - name: Run PHPCS run: | - vendor/bin/phpcs public/modules/custom/ - vendor/bin/phpcs public/themes/custom/ + docker compose exec app bash -c "vendor/bin/phpcs public/modules/custom/" + docker compose exec app bash -c "vendor/bin/phpcs public/themes/custom/" - name: Run phpstan - run: vendor/bin/phpstan analyze + run: docker compose exec app bash -c "vendor/bin/phpstan analyze" - name: Download latest dump env: @@ -70,22 +57,26 @@ jobs: - name: Install Drupal run: | - mysql --user=drupal --password=drupal --database=drupal --host=db --port=3306 -A < latest.sql - drush deploy - - - name: Start services - run: | - for i in {1..5}; do RESPONSE_CODE=$(curl -k -s -o /dev/null -w "%{http_code}" "$SIMPLETEST_BASE_URL" || true); if [ "$RESPONSE_CODE" -gt "301" ] || [ "$RESPONSE_CODE" -lt "200" ]; then sleep 2; fi; done + docker compose exec app bash -c "mysql --user=drupal --password=drupal --database=drupal --host=db --port=3306 -A < latest.sql" + docker compose exec app bash -c "drush deploy" - name: Run PHPUnit tests run: | - composer test-php public/modules/custom - if [ -d "tests/" ]; then composer test-php tests/; else echo "No DTT tests found. Ignoring..."; fi + docker compose exec app bash -c "mkdir -p /app/results" + + if [ -d "tests/" ]; then + docker compose exec app bash -c "composer test-php tests/" + fi + docker compose exec app bash -c "composer test-php public/modules/custom" + + - name: Export logs + if: always() + run: docker compose logs app > results/service.log - name: Create an artifact from test report uses: actions/upload-artifact@v4 if: always() with: name: results - path: ${{ env.BROWSERTEST_OUTPUT_DIRECTORY }} + path: results/ retention-days: 1 From 1c5d1ef372f8f038ebdc4111ec74d994ef5ea174 Mon Sep 17 00:00:00 2001 From: tuutti Date: Thu, 12 Dec 2024 19:59:08 +0200 Subject: [PATCH 2/4] UHF-11131: Added missing compose.ci.yaml --- compose.ci.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 compose.ci.yaml diff --git a/compose.ci.yaml b/compose.ci.yaml new file mode 100644 index 0000000..2099938 --- /dev/null +++ b/compose.ci.yaml @@ -0,0 +1,6 @@ +services: + app: + user: "1001:1001" + environment: + SYMFONY_DEPRECATIONS_HELPER: disabled + BROWSERTEST_OUTPUT_DIRECTORY: /app/results From 6a625e737b1e520e7f09fef01f5748d018174c1a Mon Sep 17 00:00:00 2001 From: tuutti Date: Fri, 13 Dec 2024 09:36:00 +0200 Subject: [PATCH 3/4] UHF-11131: Dont start varnish by default --- compose.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compose.yaml b/compose.yaml index 0e64d1d..cdf6ca7 100644 --- a/compose.yaml +++ b/compose.yaml @@ -87,6 +87,8 @@ services: - "traefik.http.routers.${COMPOSE_PROJECT_NAME}-varnish.tls=true" - "traefik.http.services.${COMPOSE_PROJECT_NAME}-varnish.loadbalancer.server.port=6081" - "traefik.docker.network=stonehenge-network" + profiles: + - varnish elastic-proxy: container_name: "${COMPOSE_PROJECT_NAME}-elastic-proxy" image: nginxinc/nginx-unprivileged:alpine-perl From d1cf311ca7edb0136293c59bca75502e9a93b71d Mon Sep 17 00:00:00 2001 From: tuutti Date: Fri, 13 Dec 2024 09:37:08 +0200 Subject: [PATCH 4/4] UHF-11131: Documentent varnish profile --- documentation/local.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/local.md b/documentation/local.md index 679a364..0c0ca70 100644 --- a/documentation/local.md +++ b/documentation/local.md @@ -31,6 +31,7 @@ Modify the value of `COMPOSE_PROFILES` environment variable from `.env` file or Currently available profiles: - `queue`: Apache Artemis queue service - `search`: ElasticSearch service +- `varnish`: Varnish service. Provides `varnish-yourproject.docker.so` address. ### Customizing docker-compose.yml