As of March 2020, GitHub seems to remove the default MySQL installation from its ubuntu-latest
container. Now it’s required to set up the database service in order to use it.
Because we at BracketSpace are testing our WordPress plugins with PHPUnit it’s required to run them along with the database.
Let me show you how to set up the GitHub workflow file to use multiple PHP versions.
name: Test
on: push
jobs:
phpunit:
name: PHPUnit
runs-on: ubuntu-latest
strategy:
matrix:
php: ['7.0', '7.1', '7.2', '7.3', '7.4']
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress_test
ports:
- 3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Composer dependencies
run: composer install -o --no-progress
- name: Setup PHP
uses: shivammathur/setup-php@v1
with:
php-version: ${{ matrix.php }}
extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, mysql, mysqli, pdo_mysql, bcmath, soap, intl, gd, exif, iconv, imagick
coverage: none
- name: PHPUnit
run: |
bin/install-wp-tests.sh wordpress_test root root 127.0.0.1:${{ job.services.mysql.ports['3306'] }} latest true
vendor/bin/phpunit
A couple of things to keep in mind:
MYSQL_DATABASE
env variable will setup the database on startup- You have to install Composer dependencies before setting the PHP version or extract the build process to a separate job. Otherwise, make sure the Composer will install or add
--ignore-platform-reqs
- You have to connect to MySQL at
127.0.0.1
insteadlocalhost
. Otherways it may try to connect via socket, which won’t be available - GitHub randomly assigns the external port for services, access it with
${{ job.services.mysql.ports['3306'] }}