Skip to content

Automated browser tests #84

Automated browser tests

Automated browser tests #84

Workflow file for this run

name: E2E Tests
on:
push:
pull_request:
jobs:
e2e:
name: PHP ${{ matrix.php }} - WP ${{ matrix.wordpress }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# temporary disabled for testing
# php: [ '7.4', '8.0', '8.1', '8.2' ]
# wordpress: [ '5.9', '6.0', '6.3', '6.5.3' ]
php: [ '8.4' ]
wordpress: [ '6.5' ]
exclude:
# Exclude older PHP versions with newer WordPress
- php: '7.4'
wordpress: '6.5.3'
services:
mysql:
image: mysql:8.0
env:
MYSQL_DATABASE: wordpress
MYSQL_ROOT_PASSWORD: root
ports: [ 3306:3306 ]
options: >-
--health-cmd="mysqladmin ping -h 127.0.0.1 -uroot -proot"
--health-interval=10s
--health-timeout=5s
--health-retries=5
web:
image: dunglas/frankenphp:1.9-php${{ matrix.php }}
ports: [ 8100:80 ]
volumes:
- ${{ github.workspace }}/wordpress:/var/www/html
- ${{ github.workspace }}/tests:/etc/frankenphp/
env:
WP_VERSION: ${{ matrix.wordpress }}
WP_SITE_URL: http://localhost:8100
WP_DB_NAME: wordpress
WP_DB_USER: root
WP_DB_PASS: root
WP_DB_HOST: 127.0.0.1
steps:
- name: Checkout plugin
uses: actions/checkout@v4
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: mysqli, zip, gd
coverage: none
tools: wp-cli
- name: Cache WordPress archive
id: cache-wordpress
uses: actions/cache@v3
with:
path: wordpress
key: wp-${{ matrix.wordpress }}
- name: Download WordPress
if: steps.cache-wordpress.outputs.cache-hit != 'true'
run: |
curl -O https://wordpress.org/wordpress-${WP_VERSION}.tar.gz
tar -xzf wordpress-${WP_VERSION}.tar.gz
rm wordpress-${WP_VERSION}.tar.gz
- name: Install WordPress
run: |
rm -f wordpress/wp-config.php
wp config create \
--dbname="$WP_DB_NAME" \
--dbuser="$WP_DB_USER" \
--dbpass="$WP_DB_PASS" \
--dbhost="$WP_DB_HOST" \
--path=wordpress \
--skip-check
wp core install \
--url="${WP_SITE_URL}" \
--title="Test Site" \
--admin_user=admin \
--admin_password=admin \
[email protected] \
--path=wordpress \
--skip-email \
--allow-root
wp user create author [email protected] --role=author --user_pass=author --path=wordpress
wp user create editor [email protected] --role=editor --user_pass=editor --path=wordpress
wp user create subscriber [email protected] --role=subscriber --user_pass=subscriber --path=wordpress
- name: Show current config values
run: wp config list --path=wordpress --allow-root
- name: Install plugin
run: |
PLUGIN_SLUG=$(basename "$GITHUB_WORKSPACE")
ln -s "$GITHUB_WORKSPACE" "wordpress/wp-content/plugins/simpleanalytics"
- name: Start WordPress server
run: |
wp server --host=localhost --port=8100 --allow-root --path=wordpress > /tmp/wp-server.log 2>&1 &
# Health check
for i in {1..30}; do
if curl -sf http://localhost:8100/wp-login.php > /dev/null 2>&1; then
echo "WordPress server ready"
break
fi
[ $i -eq 30 ] && echo "Server failed to start" && cat /tmp/wp-server.log && exit 1
sleep 1
done
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: "pnpm"
- name: Install Playwright and dependencies
run: |
pnpm install
pnpm run tests:install
- name: Cache composer dependencies
uses: actions/cache@v3
with:
path: vendor
key: composer-${{ hashFiles('composer.lock') }}
- name: Run composer install
run: composer install --no-progress --prefer-dist --no-interaction
- name: Run Pest tests
run: ./vendor/bin/pest --colors=always --browser firefox
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-php${{ matrix.php }}-wp${{ matrix.wordpress }}
path: |
tests/Browser/Screenshots
retention-days: 30
- name: Debug server status
if: failure()
run: |
cat /tmp/wp-server.log || echo "No log file found"
ps aux | grep php || true