Skip to content

End-to-end tests

End-to-end tests #22

name: End-to-end tests
on:
push:
branches:
- main
paths-ignore:
- '**.md'
workflow_dispatch:
inputs:
debug_enabled:
type: boolean
description: Debug with tmate
default: false
permissions:
contents: read
env:
# Allow ddev get to use a GitHub token to prevent rate limiting by tests
DDEV_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
end-to-end-test-suite:
strategy:
fail-fast: false
matrix:
# Last 2 patches for the current minor, and last patch for the previous minor, greatest php version
include:
- m2-version: '2.3.7-p4'
php-version: '7.4'
- m2-version: '2.4.6'
php-version: '8.2'
- m2-version: '2.4.7'
php-version: '8.3'
name: End-to-end test suite
if: ${{ !contains(github.event.head_commit.message, 'chore(') }}
runs-on: ubuntu-latest
env:
EXTENSION_PACKAGE_NAME: "crowdsec/magento2-module-engine"
EXTENSION_NAME: "CrowdSec_Engine"
EXTENSION_PATH: "crowdsec-engine"
steps:
- name: Install Magento 2 with DDEV
id: magento_install
uses: julienloizelet/magento2-ddev-installation@v3
with:
php_version: ${{ matrix.php-version }}
magento_version: ${{ matrix.m2-version }}
composer_auth: ${{ secrets.M2_COMPOSER_AUTH }}
magento_repository: "https://repo.magento.com/"
- name: Add Redis and Memcached
run: |
ddev get ddev/ddev-redis
ddev get ddev/ddev-memcached
# override redis.conf
ddev get julienloizelet/ddev-tools
- name: Playwright
run: ddev get julienloizelet/ddev-playwright
- name: Clone M2 ${{ env.EXTENSION_NAME }} files
uses: actions/checkout@v4
with:
path: my-own-modules/${{ env.EXTENSION_PATH }}
- name: Validate composer.json
run: ddev composer validate --working-dir ./my-own-modules/${{ env.EXTENSION_PATH }}
- name: Prepare composer repositories
run: |
ddev composer config --unset repositories.0
ddev composer config repositories.0 '{"type": "path", "url":"my-own-modules/${{ env.EXTENSION_PATH }}/", "canonical": true}'
ddev composer config repositories.1 '{"type": "composer", "url":"https://repo.magento.com/", "exclude": ["${{ env.EXTENSION_PACKAGE_NAME }}", "magento/composer-dependency-version-audit-plugin"]}'
- name: Add ${{ env.EXTENSION_NAME }} as composer dependency
run: |
ddev composer require ${{ env.EXTENSION_PACKAGE_NAME }}:@dev --no-interaction
- name: Disable some extensions for 2.4.6 and superior
if: contains(fromJson('["2.4.6", "2.4.7"]'),matrix.m2-version)
run: |
ddev magento module:disable Magento_AdminAdobeImsTwoFactorAuth
- name: Disable some extensions for 2.4
if: startsWith(matrix.m2-version, '2.4')
run: |
ddev magento module:disable Magento_TwoFactorAuth
ddev magento module:disable Magento_AdminNotification
- name: Make some workaround for 2.3.5
if: startsWith(matrix.m2-version, '2.3.5')
run: |
ddev magento module:disable Dotdigitalgroup_Chat
ddev magento module:disable Dotdigitalgroup_Email
- name: Enable extension
run: |
ddev magento deploy:mode:set developer
ddev magento module:enable ${{ env.EXTENSION_NAME }}
ddev magento setup:upgrade
ddev magento setup:static-content:deploy -f
- name: Prepare for playwright test
run: |
# Override the Playwright test folder
ddev get julienloizelet/ddev-crowdsec-php
cp .ddev/okaeli-add-on/magento2/custom_files/crowdsec/engine/docker-compose.override.yaml .ddev/docker-compose.override.yaml
ddev restart
# Add some fixture data
cp .ddev/okaeli-add-on/magento2/custom_files/varnish-profile.xml varnish-profile.xml
ddev magento setup:performance:generate-fixtures ./varnish-profile.xml
# Set base url in Playwright config
sed -i 's|CHANGE_BASE_URL|${{ steps.magento_install.outputs.m2_url }}|g' my-own-modules/${{ env.EXTENSION_PATH }}/Test/EndToEnd/.env.example
# Install Playwright
ddev playwright-install
# Copy some scripts for tests
cp .ddev/okaeli-add-on/magento2/custom_scripts/cronLaunch.php ${{ github.workspace }}/pub/cronLaunch.php
cp .ddev/okaeli-add-on/magento2/custom_scripts/crowdsec/engine/runActions.php ${{ github.workspace }}/pub/runActions.php
# Force machine_id and passord to avoid creation of a new machine every time a test is launched
curl -v "https://${{ env.M2_VERSION_CODE }}.ddev.site/runActions.php?action=store-credentials&id=${{ secrets.MACHINE_ID }}&password=${{ secrets.MACHINE_PASSWORD }}"
# Set Enroll key in config
ddev magento config:set crowdsec_engine/general/enrollment_key ${{ secrets.ENROLL_KEY }}
ddev magento cache:flush
- name: Run config test
run: ddev playwright test config
- name: Run detect pages scan test
run: ddev playwright test pages-scan
- name: Run detect user enum test
run: ddev playwright test user-enum
- name: Run cron test
run: ddev playwright test cron
- name: Run alert test
run: ddev playwright test alert
- name: Run reports test
run: ddev playwright test reports
- name: Keep Playwright report
uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report-${{ matrix.php-version }}-${{ matrix.m2-version }}
path: my-own-modules/${{ env.EXTENSION_PATH }}/Test/EndToEnd/playwright-report/
retention-days: 10
- name: Debug with tmate
uses: mxschmitt/action-tmate@v3
with:
limit-access-to-actor: true
github-token: ${{ secrets.GITHUB_TOKEN }}
timeout-minutes: 30
if: failure() && github.event.inputs.debug_enabled == 'true'